Received: by 2002:ac0:a594:0:0:0:0:0 with SMTP id m20-v6csp3480004imm; Thu, 17 May 2018 09:23:15 -0700 (PDT) X-Google-Smtp-Source: AB8JxZpydM1c7G/edCrjkBmobVE2HURBZMorvY9b62lwzzwUY/eg6z5HvFmQJJjKcahMz0xxxxzj X-Received: by 2002:a62:6402:: with SMTP id y2-v6mr5644740pfb.71.1526574195747; Thu, 17 May 2018 09:23:15 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1526574195; cv=none; d=google.com; s=arc-20160816; b=aKusReEDMMUTZWw2JY2z6Jk8NjegQY1KJWlknDI4UWAYfofdiGLfyYjKFvm3fYJ/LN qY7JwVEXDfobW7wmF8ID7gDYqiN2N2DD71UoAGpN7L8njaZ+RQC1nl/3yhwJfwOcm/EC uiLyt25B3aDE7F+s6oetFXkzJpxC/OXpzDTQZuFW6fbZmofZcxyiwRVmRTytdQiN/3Ko vfgG2fH+z2yWORtgh8zGiy4aYCt2Fa2bpQKEOxA31zPxmBD8xPY6X599fqhiarP8hFQt 5ku071w1+BpMcQma1VXLOcceLRQeUhju6Wki6zU6MjNzMdlWIPXN0F310vEI/STz4+Y/ rZkQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:user-agent:in-reply-to :content-disposition:mime-version:references:message-id:subject:cc :to:from:date:dkim-signature:arc-authentication-results; bh=EQfrpxMomTl02KIJlyAeNzhO/vacZnsem+Ejq5sMoCQ=; b=n4eHGTCE+Px+Jr4c+4WG9k9hb22OUi9T5zEDXFmZBULjmj125TnfK0zN/MOj1an+xu fuOEnCNoC/tb6mS0kvx6BlIlI/KdNLfIFy1Y6fH4LqVzTFh6egUzgVWzt5eoN2dAzHmR caRelBY6QTBetFlz9dLK0TJZoDQhohvuNvQTYEOIxsf7sDhusS3iypF0NJ0hWnCekANq voJV261TicJJu3VJJbtZQIrV0hTkew3tjDe9AHAXRgVLj4wC69gNLcw5mUhazwzG/HeR ndRQOFrsxriT3p556FyKDHPpKRqUwM2f6nQp+p1J7zq6hsbMx+8lRh7jCucpiUcu7MlQ cibg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=DWDeZLwO; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id i195-v6si1780214pgc.291.2018.05.17.09.22.54; Thu, 17 May 2018 09:23:15 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=DWDeZLwO; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752334AbeEQQVd (ORCPT + 99 others); Thu, 17 May 2018 12:21:33 -0400 Received: from mail.kernel.org ([198.145.29.99]:39704 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752026AbeEQQVa (ORCPT ); Thu, 17 May 2018 12:21:30 -0400 Received: from kernel.org (unknown [24.6.201.58]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 012B4206B7; Thu, 17 May 2018 16:21:29 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1526574090; bh=5kqK6PBAjiUhT3PZmBBcUmpjdJAAtKO2bCAk/WXfPmI=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=DWDeZLwOiG91DmJmRKq8Of10u262Kk+t97VCom3wT47nXTBxJLslr3IC3ulnWngz5 wLNlE9BL44YR6uv1zkW/qkjp15IRcPyVBMnk/BVOTdZzyfV9gh+klfDnsWC+ZkGWWH CtpgpR2lkEHoDB+79LMhYsf6t+IZrsYSeOrTvcxY= Date: Thu, 17 May 2018 09:21:28 -0700 From: Shaohua Li To: Jianchao Wang Cc: robert.butera@oracle.com, linux-raid@vger.kernel.org, linux-kernel@vger.kernel.org Subject: Re: [PATCH] md: zero the original position of sb for 0.90 and 1.0 Message-ID: <20180517162128.74fd5scca2yo3nep@kernel.org> References: <1526462319-14222-1-git-send-email-jianchao.w.wang@oracle.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1526462319-14222-1-git-send-email-jianchao.w.wang@oracle.com> User-Agent: NeoMutt/20170609 (1.8.3) Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Wed, May 16, 2018 at 05:18:39PM +0800, Jianchao Wang wrote: > For sb version 0.90 and 1.0 which locates after data, when we increase > the spindle volume size and grow the raid arry size, the older sb which is > different between spindles will be left there. Due to this left sb, the > spindle volume cannot be grown with zero filled part with --asume-clean. > applications have to take some workarounds such as sync_min/max to avoid > resync. > > It is easy and convevient for md to zero the older sb position after > write sb to new position, so do it here. From the description, this looks easy to do in userspace, eg, you can zero the super before increase the spindle volume. Convenience isn't a reason we should put these code into kernel space. Thanks, Shaohua > Cc: robert.butera@oracle.com > Signed-off-by: Jianchao Wang > --- > drivers/md/md.c | 27 +++++++++++++++++++++++++++ > 1 file changed, 27 insertions(+) > > diff --git a/drivers/md/md.c b/drivers/md/md.c > index c208c01..a042add 100644 > --- a/drivers/md/md.c > +++ b/drivers/md/md.c > @@ -1020,6 +1020,23 @@ int md_check_no_bitmap(struct mddev *mddev) > } > EXPORT_SYMBOL(md_check_no_bitmap); > > +static void md_zero_original_sb_position(struct md_rdev *rdev, sector_t old_pos) > +{ > + struct page *zero_pg; > + > + zero_pg = alloc_pages(GFP_KERNEL | __GFP_ZERO, 0); > + if (!zero_pg) { > + pr_warn("%s: failed to get page for zero original sb position", > + mdname(rdev->mddev)); > + return; > + } > + md_super_write(rdev->mddev, rdev, old_pos, rdev->sb_size, > + zero_pg); > + wait_event(rdev->mddev->sb_wait, > + (atomic_read(&rdev->mddev->pending_writes) == 0)); > + __free_pages(zero_pg, 0); > +} > + > /* > * load_super for 0.90.0 > */ > @@ -1394,6 +1411,8 @@ static void super_90_sync(struct mddev *mddev, struct md_rdev *rdev) > static unsigned long long > super_90_rdev_size_change(struct md_rdev *rdev, sector_t num_sectors) > { > + sector_t old_pos = rdev->sb_start; > + > if (num_sectors && num_sectors < rdev->mddev->dev_sectors) > return 0; /* component must fit device */ > if (rdev->mddev->bitmap_info.offset) > @@ -1411,6 +1430,8 @@ super_90_rdev_size_change(struct md_rdev *rdev, sector_t num_sectors) > md_super_write(rdev->mddev, rdev, rdev->sb_start, rdev->sb_size, > rdev->sb_page); > } while (md_super_wait(rdev->mddev) < 0); > + > + md_zero_original_sb_position(rdev, old_pos); > return num_sectors; > } > > @@ -1953,6 +1974,8 @@ super_1_rdev_size_change(struct md_rdev *rdev, sector_t num_sectors) > { > struct mdp_superblock_1 *sb; > sector_t max_sectors; > + sector_t old_pos = 0; > + > if (num_sectors && num_sectors < rdev->mddev->dev_sectors) > return 0; /* component must fit device */ > if (rdev->data_offset != rdev->new_data_offset) > @@ -1969,6 +1992,7 @@ super_1_rdev_size_change(struct md_rdev *rdev, sector_t num_sectors) > } else { > /* minor version 0; superblock after data */ > sector_t sb_start; > + old_pos = rdev->sb_start; > sb_start = (i_size_read(rdev->bdev->bd_inode) >> 9) - 8*2; > sb_start &= ~(sector_t)(4*2 - 1); > max_sectors = rdev->sectors + sb_start - rdev->sb_start; > @@ -1984,6 +2008,9 @@ super_1_rdev_size_change(struct md_rdev *rdev, sector_t num_sectors) > md_super_write(rdev->mddev, rdev, rdev->sb_start, rdev->sb_size, > rdev->sb_page); > } while (md_super_wait(rdev->mddev) < 0); > + > + if (old_pos) > + md_zero_original_sb_position(rdev, old_pos); > return num_sectors; > > } > -- > 2.7.4 >