1 diff .prev/drivers/md/bitmap.c ./drivers/md/bitmap.c
2 --- .prev/drivers/md/bitmap.c 2007-02-07 13:03:56.000000000 +1100
3 +++ ./drivers/md/bitmap.c 2007-02-07 21:34:47.000000000 +1100
4 @@ -1160,6 +1160,22 @@ int bitmap_startwrite(struct bitmap *bit
8 + if (unlikely((*bmc & COUNTER_MAX) == COUNTER_MAX)) {
10 + /* note that it is safe to do the prepare_to_wait
11 + * after the test as long as we do it before dropping
14 + prepare_to_wait(&bitmap->overflow_wait, &__wait,
15 + TASK_UNINTERRUPTIBLE);
16 + spin_unlock_irq(&bitmap->lock);
17 + bitmap->mddev->queue
18 + ->unplug_fn(bitmap->mddev->queue);
20 + finish_wait(&bitmap->overflow_wait, &__wait);
26 bitmap_file_set_bit(bitmap, offset);
27 @@ -1169,7 +1185,7 @@ int bitmap_startwrite(struct bitmap *bit
31 - BUG_ON((*bmc & COUNTER_MAX) == COUNTER_MAX);
35 spin_unlock_irq(&bitmap->lock);
36 @@ -1207,6 +1223,9 @@ void bitmap_endwrite(struct bitmap *bitm
37 if (!success && ! (*bmc & NEEDED_MASK))
40 + if ((*bmc & COUNTER_MAX) == COUNTER_MAX)
41 + wake_up(&bitmap->overflow_wait);
46 @@ -1431,6 +1450,7 @@ int bitmap_create(mddev_t *mddev)
47 spin_lock_init(&bitmap->lock);
48 atomic_set(&bitmap->pending_writes, 0);
49 init_waitqueue_head(&bitmap->write_wait);
50 + init_waitqueue_head(&bitmap->overflow_wait);
52 bitmap->mddev = mddev;
54 diff .prev/include/linux/raid/bitmap.h ./include/linux/raid/bitmap.h
55 --- .prev/include/linux/raid/bitmap.h 2007-02-07 13:03:56.000000000 +1100
56 +++ ./include/linux/raid/bitmap.h 2007-02-07 20:57:57.000000000 +1100
57 @@ -247,6 +247,7 @@ struct bitmap {
59 atomic_t pending_writes; /* pending writes to the bitmap file */
60 wait_queue_head_t write_wait;
61 + wait_queue_head_t overflow_wait;