(test_bit(DE_HAVE_BARRIER_NUMBER, &epoch->flags) || ev & EV_CLEANUP)) {
                        if (!(ev & EV_CLEANUP)) {
                                spin_unlock(&mdev->epoch_lock);
-                               drbd_send_b_ack(mdev, epoch->barrier_nr, epoch_size);
+                               drbd_send_b_ack(epoch->mdev, epoch->barrier_nr, epoch_size);
                                spin_lock(&mdev->epoch_lock);
                        }
                        if (test_bit(DE_HAVE_BARRIER_NUMBER, &epoch->flags))
-                               dec_unacked(mdev);
+                               dec_unacked(epoch->mdev);
 
                        if (mdev->current_epoch != epoch) {
                                next_epoch = list_entry(epoch->list.next, struct drbd_epoch, list);
        inc_unacked(mdev);
 
        mdev->current_epoch->barrier_nr = p->barrier;
+       mdev->current_epoch->mdev = mdev;
        rv = drbd_may_finish_epoch(mdev, mdev->current_epoch, EV_GOT_BARRIER_NR);
 
        /* P_BARRIER_ACK may imply that the corresponding extent is dropped from