On Mon, 09 Jun 2014 13:43:20 -0700 <gregkh@xxxxxxxxxxxxxxxxxxx> wrote: > > The patch below does not apply to the 3.4-stable tree. > If someone wants it applied there, or to any other stable or longterm > tree, then please email the backport, including the original git commit > id to <stable@xxxxxxxxxxxxxxx>. My mistake, it isn't needed. This patch fixes 8313b8e57f55b1 which was tagged for backport to 3.2, but didn't apply to 3.4 and I subsequently realised that it wasn't really needed until 3.10. So this patch also isn't needed until 3.10, to which you have already applied it. So - nothing more to do. Thanks, NeilBrown > > thanks, > > greg k-h > > ------------------ original commit in Linus's tree ------------------ > > >From 2ac295a544dcae9299cba13ce250419117ae7fd1 Mon Sep 17 00:00:00 2001 > From: NeilBrown <neilb@xxxxxxx> > Date: Thu, 29 May 2014 11:40:03 +1000 > Subject: [PATCH] md: always set MD_RECOVERY_INTR when interrupting a reshape > thread. > > Commit 8313b8e57f55b15e5b7f7fc5d1630bbf686a9a97 > md: fix problem when adding device to read-only array with bitmap. > > added a called to md_reap_sync_thread() which cause a reshape thread > to be interrupted (in particular, it could cause md_thread() to never even > call md_do_sync()). > However it didn't set MD_RECOVERY_INTR so ->finish_reshape() would not > know that the reshape didn't complete. > > This only happens when mddev->ro is set and normally reshape threads > don't run in that situation. But raid5 and raid10 can start a reshape > thread during "run" is the array is in the middle of a reshape. > They do this even if ->ro is set. > > So it is best to set MD_RECOVERY_INTR before abortingg the > sync thread, just in case. > > Though it rare for this to trigger a problem it can cause data corruption > because the reshape isn't finished properly. > So it is suitable for any stable which the offending commit was applied to. > (3.2 or later) > > Fixes: 8313b8e57f55b15e5b7f7fc5d1630bbf686a9a97 > Cc: stable@xxxxxxxxxxxxxxx (3.2+) > Signed-off-by: NeilBrown <neilb@xxxxxxx> > > diff --git a/drivers/md/md.c b/drivers/md/md.c > index 48a99b75682c..2382cfc9bb3f 100644 > --- a/drivers/md/md.c > +++ b/drivers/md/md.c > @@ -7826,6 +7826,7 @@ void md_check_recovery(struct mddev *mddev) > /* There is no thread, but we need to call > * ->spare_active and clear saved_raid_disk > */ > + set_bit(MD_RECOVERY_INTR, &mddev->recovery); > md_reap_sync_thread(mddev); > clear_bit(MD_RECOVERY_NEEDED, &mddev->recovery); > goto unlock;
Attachment:
signature.asc
Description: PGP signature