md/raid5: be more selective about distributing flags across batch.
authorNeilBrown <neilb@suse.de>
Thu, 21 May 2015 02:40:26 +0000 (12:40 +1000)
committerNeilBrown <neilb@suse.de>
Thu, 28 May 2015 01:40:01 +0000 (11:40 +1000)
commit1b956f7a8f9aa63ea9644ab8c3374cf381993363
tree7ec48a7e5c0d5342b99eaf7df013726430b86663
parent3960ce796198254b7a1b420dc9a26d80928523bd
md/raid5: be more selective about distributing flags across batch.

When a batch of stripes is broken up, we keep some of the flags
that were per-stripe, and copy other flags from the head to all
others.

This only happens while a stripe is being handled, so many of the
flags are irrelevant.

The "SYNC_FLAGS" (which I've renamed to make it clear there are
several) and STRIPE_DEGRADED are set per-stripe and so need to be
preserved.  STRIPE_INSYNC is the only flag that is set on the head
that needs to be propagated to all others.

For safety, add a WARN_ON if others are set, except:
 STRIPE_HANDLE - this is safe and per-stripe and we are going to set
      in several cases anyway
 STRIPE_INSYNC
 STRIPE_IO_STARTED - this is just a hint and doesn't hurt.
 STRIPE_ON_PLUG_LIST
 STRIPE_ON_RELEASE_LIST - It is a point pointless for a batched
           stripe to be on one of these lists, but it can happen
           as can be safely ignored.

Signed-off-by: NeilBrown <neilb@suse.de>
drivers/md/raid5.c
drivers/md/raid5.h