md/raid5: be more careful about write ordering when reshaping.
authorNeilBrown <neilb@suse.de>
Tue, 31 Mar 2009 04:26:47 +0000 (15:26 +1100)
committerNeilBrown <neilb@suse.de>
Tue, 31 Mar 2009 04:26:47 +0000 (15:26 +1100)
commitab69ae12ceef7f23c578a3c230144e94a167a821
tree01bee8e4c4a91a1714596c4f85769bfe72e328ce
parentd1a7c50369835f9ecbd7752016cd9302ecfae678
md/raid5: be more careful about write ordering when reshaping.

When we are reshaping an array, it is very important that we read
the data from a particular sector offset before writing new data
at that offset.

In most cases when growing or shrinking an array we read long before
we even consider writing.  But when restriping an array without
changing it size, there is a small possibility that we might have
some data to available write before the read has happened at the same
location.  This would require some stripes to be in cache already.

To guard against this small possibility, we check, before writing,
that the 'old' stripe at the same location is not in the process of
being read.  And we ensure that we mark all 'source' stripes as such
before allowing new 'destination' stripes to proceed.

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