[PATCH] md: add write-intent-bitmap support to raid5
Most awkward part of this is delaying write requests until bitmap updates have been flushed. To achieve this, we have a sequence number (seq_flush) which is incremented each time the raid5 is unplugged. If the raid thread notices that this has changed, it flushes bitmap changes, and assigned the value of seq_flush to seq_write. When a write request arrives, it is given the number from seq_write, and that write request may not complete until seq_flush is larger than the saved seq number. We have a new queue for storing stripes which are waiting for a bitmap flush and an extra flag for stripes to record if the write was 'degraded' and so should not clear the a bit in the bitmap. Signed-off-by: Neil Brown <neilb@cse.unsw.edu.au> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
This commit is contained in:
committed by
Linus Torvalds
parent
0002b2718d
commit
72626685dc
@@ -645,7 +645,7 @@ static int super_90_validate(mddev_t *mddev, mdk_rdev_t *rdev)
|
||||
|
||||
if (sb->state & (1<<MD_SB_BITMAP_PRESENT) &&
|
||||
mddev->bitmap_file == NULL) {
|
||||
if (mddev->level != 1) {
|
||||
if (mddev->level != 1 && mddev->level != 5) {
|
||||
/* FIXME use a better test */
|
||||
printk(KERN_WARNING "md: bitmaps only support for raid1\n");
|
||||
return -EINVAL;
|
||||
@@ -3517,7 +3517,6 @@ void md_done_sync(mddev_t *mddev, int blocks, int ok)
|
||||
*/
|
||||
void md_write_start(mddev_t *mddev, struct bio *bi)
|
||||
{
|
||||
DEFINE_WAIT(w);
|
||||
if (bio_data_dir(bi) != WRITE)
|
||||
return;
|
||||
|
||||
|
Reference in New Issue
Block a user