md/raid5: STIPE_HANDLE bit in handle_strype_dirtying()
Set STRIPE_HANDLE flag only if it is required.
Signed-off-by: Markus Stockhausen <redacted>
diff --git a/drivers/md/raid5.c b/drivers/md/raid5.c
index 6a7e638..f8630c1 100644
--- a/drivers/md/raid5.c
+++ b/drivers/md/raid5.c
@@ -3584,7 +3584,6 @@ static void handle_stripe_dirtying(struct r5conf *conf,
}
pr_debug("for sector %llu, rmw=%d rcw=%d\n",
(unsigned long long)sh->sector, rmw, rcw);
- set_bit(STRIPE_HANDLE, &sh->state);
if ((rmw < rcw || (rmw == rcw && conf->rmw_level == PARITY_ENABLE_RMW)) && rmw > 0) {
/* prefer read-modify-write, but need to get some data */
if (conf->mddev->queue)@@ -3646,8 +3645,10 @@ static void handle_stripe_dirtying(struct r5conf *conf,
}
if (rcw > disks && rmw > disks &&
- !test_bit(STRIPE_PREREAD_ACTIVE, &sh->state))
+ !test_bit(STRIPE_PREREAD_ACTIVE, &sh->state)) {
set_bit(STRIPE_DELAYED, &sh->state);
+ set_bit(STRIPE_HANDLE, &sh->state);
+ }
/* now if nothing is locked, and if we have enough data,
* we can start a write request