diff options
| author | NeilBrown <neilb@cse.unsw.edu.au> | 2005-09-09 19:23:47 -0400 |
|---|---|---|
| committer | Linus Torvalds <torvalds@g5.osdl.org> | 2005-09-09 19:39:10 -0400 |
| commit | 4b6d287f627b5fb6a49f78f9e81649ff98c62bb7 (patch) | |
| tree | 7b6cbc6a997e25a7fb6185da7129e539c4ffda8b /include/linux/raid/raid1.h | |
| parent | 8ddf9efe6708f3674f0ddfeb6425fd27bea109a2 (diff) | |
[PATCH] md: add write-behind support for md/raid1
If a device is flagged 'WriteMostly' and the array has a bitmap, and the
bitmap superblock indicates that write_behind is allowed, then write_behind is
enabled for WriteMostly devices.
Write requests will be acknowledges as complete to the caller (via b_end_io)
when all non-WriteMostly devices have completed the write, but will not be
cleared from the bitmap until all devices complete.
This requires memory allocation to make a local copy of the data being
written. If there is insufficient memory, then we fall-back on normal write
semantics.
Signed-Off-By: Paul Clements <paul.clements@steeleye.com>
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>
Diffstat (limited to 'include/linux/raid/raid1.h')
| -rw-r--r-- | include/linux/raid/raid1.h | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/include/linux/raid/raid1.h b/include/linux/raid/raid1.h index 9d93cf12e890..60e19b667548 100644 --- a/include/linux/raid/raid1.h +++ b/include/linux/raid/raid1.h | |||
| @@ -80,6 +80,9 @@ struct r1bio_s { | |||
| 80 | atomic_t remaining; /* 'have we finished' count, | 80 | atomic_t remaining; /* 'have we finished' count, |
| 81 | * used from IRQ handlers | 81 | * used from IRQ handlers |
| 82 | */ | 82 | */ |
| 83 | atomic_t behind_remaining; /* number of write-behind ios remaining | ||
| 84 | * in this BehindIO request | ||
| 85 | */ | ||
| 83 | sector_t sector; | 86 | sector_t sector; |
| 84 | int sectors; | 87 | int sectors; |
| 85 | unsigned long state; | 88 | unsigned long state; |
| @@ -107,4 +110,14 @@ struct r1bio_s { | |||
| 107 | #define R1BIO_Uptodate 0 | 110 | #define R1BIO_Uptodate 0 |
| 108 | #define R1BIO_IsSync 1 | 111 | #define R1BIO_IsSync 1 |
| 109 | #define R1BIO_Degraded 2 | 112 | #define R1BIO_Degraded 2 |
| 113 | #define R1BIO_BehindIO 3 | ||
| 114 | /* For write-behind requests, we call bi_end_io when | ||
| 115 | * the last non-write-behind device completes, providing | ||
| 116 | * any write was successful. Otherwise we call when | ||
| 117 | * any write-behind write succeeds, otherwise we call | ||
| 118 | * with failure when last write completes (and all failed). | ||
| 119 | * Record that bi_end_io was called with this flag... | ||
| 120 | */ | ||
| 121 | #define R1BIO_Returned 4 | ||
| 122 | |||
| 110 | #endif | 123 | #endif |
