drbd: Cleanup all epoch objects upon connection loss
Signed-off-by: Philipp Reisner <philipp.reisner@linbit.com> Signed-off-by: Lars Ellenberg <lars.ellenberg@linbit.com>
This commit is contained in:
Родитель
fd2491f4a4
Коммит
80f9fd55a6
|
@ -1001,13 +1001,14 @@ static enum finish_epoch drbd_may_finish_epoch(struct drbd_conf *mdev,
|
|||
|
||||
if (epoch_size != 0 &&
|
||||
atomic_read(&epoch->active) == 0 &&
|
||||
test_bit(DE_HAVE_BARRIER_NUMBER, &epoch->flags)) {
|
||||
(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);
|
||||
spin_lock(&mdev->epoch_lock);
|
||||
}
|
||||
dec_unacked(mdev);
|
||||
if (test_bit(DE_HAVE_BARRIER_NUMBER, &epoch->flags))
|
||||
dec_unacked(mdev);
|
||||
|
||||
if (mdev->current_epoch != epoch) {
|
||||
next_epoch = list_entry(epoch->list.next, struct drbd_epoch, list);
|
||||
|
|
Загрузка…
Ссылка в новой задаче