drbd: Fixed race condition in drbd_queue_bitmap_io
May only test for ap_bio_cnt == 0 under req_lock. It can increase only under req_lock. Signed-off-by: Philipp Reisner <philipp.reisner@linbit.com> Signed-off-by: Lars Ellenberg <lars.ellenberg@linbit.com>
This commit is contained in:
parent
8869d683b7
commit
22afd7ee94
1 changed files with 2 additions and 0 deletions
|
@ -3849,11 +3849,13 @@ void drbd_queue_bitmap_io(struct drbd_conf *mdev,
|
|||
mdev->bm_io_work.done = done;
|
||||
mdev->bm_io_work.why = why;
|
||||
|
||||
spin_lock_irq(&mdev->req_lock);
|
||||
set_bit(BITMAP_IO, &mdev->flags);
|
||||
if (atomic_read(&mdev->ap_bio_cnt) == 0) {
|
||||
if (!test_and_set_bit(BITMAP_IO_QUEUED, &mdev->flags))
|
||||
drbd_queue_work(&mdev->data.work, &mdev->bm_io_work.w);
|
||||
}
|
||||
spin_unlock_irq(&mdev->req_lock);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
Reference in a new issue