summaryrefslogtreecommitdiffstats
path: root/drivers/md/raid5.h
diff options
context:
space:
mode:
authorNeilBrown <neilb@suse.de>2015-05-27 08:43:45 +1000
committerNeilBrown <neilb@suse.de>2015-05-28 11:34:40 +1000
commitd0852df543e5aa7db34c1ad26d053782bcbf48f1 (patch)
tree0276829b09beb6d16a4349afe2c75b3eaed80d47 /drivers/md/raid5.h
parent2b6b24574256c05be145936f1493aec74c6904e5 (diff)
downloadop-kernel-dev-d0852df543e5aa7db34c1ad26d053782bcbf48f1.zip
op-kernel-dev-d0852df543e5aa7db34c1ad26d053782bcbf48f1.tar.gz
md/raid5: close race between STRIPE_BIT_DELAY and batching.
When we add a write to a stripe we need to make sure the bitmap bit is set. While doing that the stripe is not locked so it could be added to a batch after which further changes to STRIPE_BIT_DELAY and ->bm_seq are ineffective. So we need to hold off adding to a stripe until bitmap_startwrite has completed at least once, and we need to avoid further changes to STRIPE_BIT_DELAY once the stripe has been added to a batch. If a bitmap_startwrite() completes after the stripe was added to a batch, it will not have set the bit, only incremented a counter, so no extra delay of the stripe is needed. Reported-by: Shaohua Li <shli@kernel.org> Signed-off-by: NeilBrown <neilb@suse.de>
Diffstat (limited to 'drivers/md/raid5.h')
-rw-r--r--drivers/md/raid5.h3
1 files changed, 3 insertions, 0 deletions
diff --git a/drivers/md/raid5.h b/drivers/md/raid5.h
index 7dc0dd8..01cdb9f 100644
--- a/drivers/md/raid5.h
+++ b/drivers/md/raid5.h
@@ -337,6 +337,9 @@ enum {
STRIPE_ON_RELEASE_LIST,
STRIPE_BATCH_READY,
STRIPE_BATCH_ERR,
+ STRIPE_BITMAP_PENDING, /* Being added to bitmap, don't add
+ * to batch yet.
+ */
};
#define STRIPE_EXPAND_SYNC_FLAG \
OpenPOWER on IntegriCloud