aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/block
diff options
context:
space:
mode:
authorLars Ellenberg <lars.ellenberg@linbit.com>2011-06-06 05:31:42 -0400
committerPhilipp Reisner <philipp.reisner@linbit.com>2011-06-30 03:23:42 -0400
commit8ccee20e3ef4e12dbf02a18f17d386569b1f73ee (patch)
treea725b7844412c1cf9079e46ce779d33338ae1d67 /drivers/block
parent829c60878626be290a4c248e8f1b86a0d5cbd38b (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')
-rw-r--r--drivers/block/drbd/drbd_bitmap.c4
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) */