On Thu, 22 Mar 2012 15:56:39 -0700 <[email protected]> wrote:
> > The patch below does not apply to the 3.0-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 <[email protected]>. Sorry - that should have been "stable release 3.1 and later". It is not relevant for 3.0. Thanks, NeilBrown > > thanks, > > greg k-h > > ------------------ original commit in Linus's tree ------------------ > > >From d0962936bff659d20522555b517582a2715fd23f Mon Sep 17 00:00:00 2001 > From: NeilBrown <[email protected]> > Date: Mon, 19 Mar 2012 12:46:41 +1100 > Subject: [PATCH] md: fix clearing of the 'changed' flags for the bad blocks > list. > > In super_1_sync (the first hunk) we need to clear 'changed' before > checking read_seqretry(), otherwise we might race with other code > adding a bad block and so won't retry later. > > In md_update_sb (the second hunk), in the case where there is no > metadata (neither persistent nor external), we treat any bad blocks as > an error. However we need to clear the 'changed' flag before calling > md_ack_all_badblocks, else it won't do anything. > > This patch is suitable for -stable release 3.0 and later. > > Cc: [email protected] > Signed-off-by: NeilBrown <[email protected]> > > diff --git a/drivers/md/md.c b/drivers/md/md.c > index 26591cc..21a90ef 100644 > --- a/drivers/md/md.c > +++ b/drivers/md/md.c > @@ -1805,13 +1805,13 @@ retry: > | BB_LEN(internal_bb)); > *bbp++ = cpu_to_le64(store_bb); > } > + bb->changed = 0; > if (read_seqretry(&bb->lock, seq)) > goto retry; > > bb->sector = (rdev->sb_start + > (int)le32_to_cpu(sb->bblog_offset)); > bb->size = le16_to_cpu(sb->bblog_size); > - bb->changed = 0; > } > } > > @@ -2366,6 +2366,7 @@ repeat: > clear_bit(MD_CHANGE_PENDING, &mddev->flags); > rdev_for_each(rdev, mddev) { > if (rdev->badblocks.changed) { > + rdev->badblocks.changed = 0; > md_ack_all_badblocks(&rdev->badblocks); > md_error(mddev, rdev); > }
signature.asc
Description: PGP signature
