diff options
author | Lars Ellenberg <lars.ellenberg@linbit.com> | 2011-06-06 05:31:42 -0400 |
---|---|---|
committer | Philipp Reisner <philipp.reisner@linbit.com> | 2011-06-30 03:23:42 -0400 |
commit | 8ccee20e3ef4e12dbf02a18f17d386569b1f73ee (patch) | |
tree | a725b7844412c1cf9079e46ce779d33338ae1d67 /drivers/block/drbd | |
parent | 829c60878626be290a4c248e8f1b86a0d5cbd38b (diff) |
drbd: don't cond_resched_lock with IRQs disabled
The last commit, drbd: add missing spinlock to bitmap receive,
introduced a cond_resched_lock(), where the lock in question is taken
with irqs disabled.
As we must not schedule with IRQs disabled,
and cond_resched_lock_irq() does not exist, yet,
we re-aquire the spin_lock_irq() for each bitmap page processed in turn.
Signed-off-by: Philipp Reisner <philipp.reisner@linbit.com>
Signed-off-by: Lars Ellenberg <lars.ellenberg@linbit.com>
Diffstat (limited to 'drivers/block/drbd')
-rw-r--r-- | drivers/block/drbd/drbd_bitmap.c | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/drivers/block/drbd/drbd_bitmap.c b/drivers/block/drbd/drbd_bitmap.c index 1e89a74ddb17..61f4fae9f67e 100644 --- a/drivers/block/drbd/drbd_bitmap.c +++ b/drivers/block/drbd/drbd_bitmap.c | |||
@@ -1400,8 +1400,10 @@ void _drbd_bm_set_bits(struct drbd_conf *mdev, const unsigned long s, const unsi | |||
1400 | /* first and full pages, unless first page == last page */ | 1400 | /* first and full pages, unless first page == last page */ |
1401 | for (page_nr = first_page; page_nr < last_page; page_nr++) { | 1401 | for (page_nr = first_page; page_nr < last_page; page_nr++) { |
1402 | bm_set_full_words_within_one_page(mdev->bitmap, page_nr, first_word, last_word); | 1402 | bm_set_full_words_within_one_page(mdev->bitmap, page_nr, first_word, last_word); |
1403 | cond_resched_lock(&b->bm_lock); | 1403 | spin_unlock_irq(&b->bm_lock); |
1404 | cond_resched(); | ||
1404 | first_word = 0; | 1405 | first_word = 0; |
1406 | spin_lock_irq(&b->bm_lock); | ||
1405 | } | 1407 | } |
1406 | 1408 | ||
1407 | /* last page (respectively only page, for first page == last page) */ | 1409 | /* last page (respectively only page, for first page == last page) */ |