Skip to content

Commit

Permalink
md/raid5: flush out all pending requests before proceeding with reshape.
Browse files Browse the repository at this point in the history
Some requests - particularly 'discard' and 'read' are handled
differently depending on whether a reshape is active or not.

It is harmless to assume reshape is active if it isn't but wrong
to act as though reshape is not active when it is.

So when we start reshape - after making clear to all requests that
reshape has started - use mddev_suspend/mddev_resume to flush out all
requests.  This will ensure that no requests will be assuming the
absence of reshape once it really starts.

Signed-off-by: NeilBrown <neilb@suse.de>
  • Loading branch information
NeilBrown committed Aug 28, 2013
1 parent c46501b commit 4d77e3b
Showing 1 changed file with 7 additions and 0 deletions.
7 changes: 7 additions & 0 deletions drivers/md/raid5.c
Original file line number Diff line number Diff line change
Expand Up @@ -6279,6 +6279,13 @@ static int raid5_start_reshape(struct mddev *mddev)
write_seqcount_end(&conf->gen_lock);
spin_unlock_irq(&conf->device_lock);

/* Now make sure any requests that proceeded on the assumption
* the reshape wasn't running - like Discard or Read - have
* completed.
*/
mddev_suspend(mddev);
mddev_resume(mddev);

/* Add some new drives, as many as will fit.
* We know there are enough to make the newly sized array work.
* Don't add devices if we are reducing the number of
Expand Down

0 comments on commit 4d77e3b

Please sign in to comment.