Received: by 2002:a05:6a10:16a7:0:0:0:0 with SMTP id gp39csp840465pxb; Tue, 3 Nov 2020 14:05:16 -0800 (PST) X-Google-Smtp-Source: ABdhPJyw+m4n+MMLCa6r3pxj2h5d+NANhm05hnZslQhPp0yqlonfwbp+XbPifUvO+p+UcpZRJMvR X-Received: by 2002:a17:906:74c6:: with SMTP id z6mr23238374ejl.448.1604441116416; Tue, 03 Nov 2020 14:05:16 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1604441116; cv=none; d=google.com; s=arc-20160816; b=zKlMVWXtixQ09JasW4VdvuGq35eBs5SZmi67uTu6nln0FRqSdjFU8G3AE6RnbUSTkG kIh92wvTzYJoy8EV+ULKwgLMKxry6NHN6wEOTsMg1ff9P6Ma60MxQ4LX3ABpChauhLGi 7vvQUihCwUck8Xirg1NtjJgFwEgKkvxhIyMqMQhbKQsX0nX8hm+4HLQ9d6m3k7LkuaoP yfJpRQoSIVYCRY6XdNBCaT2p+X/DXYq11rOLyo/A33Oa86vfCy5WjYMfmsb1ZRw5H8kL Va4qVurS+mu8j7SsQfV7ZaH9Xwv87NecIN7veBtLRiQev97spYCO3/EYnMxbNC3zwrX1 we7A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=osjJylLDsTvFGpgSyu//jfX4eCSqfmPCCOWihIhCMWc=; b=o2fk4BmkmdEbiopUvOATcV6MIkHuf64mCpk9XPQ4qHMrq2RWDjPO5LP9re0tdVjlt6 dsm2wgxSXXuEcv8liG9dQ/f+UHZ3nvSV7PlADg9y6UiqHR2OLkQd/ymgmeTrO+JCULHk ILRjxRiVIOF3K9MWla0qFfDDqfkIZF8XUd+UJMCu2tZutsxcRYCT28118i+syqlgOuMh 4lGw8Oxytda5OOQWSYyLZlXxBh85+9c3n0m2qHm00zR3Rtr8pPiKamz16PvFfTZ0tu6g SRQgU81B5oGvYXeqYq/CZ5x2favye86mQtF5Ak/JHSbHnrrDTjQjMs3+PqvBBDfFsruF arMQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b="EKa5O/Q/"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id f14si9379110edj.587.2020.11.03.14.04.53; Tue, 03 Nov 2020 14:05:16 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b="EKa5O/Q/"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1730915AbgKCUok (ORCPT + 99 others); Tue, 3 Nov 2020 15:44:40 -0500 Received: from mail.kernel.org ([198.145.29.99]:60074 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1730897AbgKCUoh (ORCPT ); Tue, 3 Nov 2020 15:44:37 -0500 Received: from localhost (83-86-74-64.cable.dynamic.v4.ziggo.nl [83.86.74.64]) (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 DA75B223BF; Tue, 3 Nov 2020 20:44:35 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1604436276; bh=YVHpLUZe1yQq/FKiJbZ80CFH8Rw9bKjaC7woX98qTMc=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=EKa5O/Q/M6NokR22EjlNJNJ2weZbPGs5rVeCn5MX1cL+WkSM7lSFcc5qt3MZnp+JR 4X66kHAVfaj3+pTDshqlhF3B6JawXrMORl7kwCoyXLukHiMu2nuTOjSWvvOy/M2Icb i23XpCUR6/853qcf4QgDziPlMBFsG+A7SfVDy5ws= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Anand Jain , David Sterba , Sasha Levin Subject: [PATCH 5.9 142/391] btrfs: fix replace of seed device Date: Tue, 3 Nov 2020 21:33:13 +0100 Message-Id: <20201103203356.413297184@linuxfoundation.org> X-Mailer: git-send-email 2.29.2 In-Reply-To: <20201103203348.153465465@linuxfoundation.org> References: <20201103203348.153465465@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Anand Jain [ Upstream commit c6a5d954950c5031444173ad2195efc163afcac9 ] If you replace a seed device in a sprouted fs, it appears to have successfully replaced the seed device, but if you look closely, it didn't. Here is an example. $ mkfs.btrfs /dev/sda $ btrfstune -S1 /dev/sda $ mount /dev/sda /btrfs $ btrfs device add /dev/sdb /btrfs $ umount /btrfs $ btrfs device scan --forget $ mount -o device=/dev/sda /dev/sdb /btrfs $ btrfs replace start -f /dev/sda /dev/sdc /btrfs $ echo $? 0 BTRFS info (device sdb): dev_replace from /dev/sda (devid 1) to /dev/sdc started BTRFS info (device sdb): dev_replace from /dev/sda (devid 1) to /dev/sdc finished $ btrfs fi show Label: none uuid: ab2c88b7-be81-4a7e-9849-c3666e7f9f4f Total devices 2 FS bytes used 256.00KiB devid 1 size 3.00GiB used 520.00MiB path /dev/sdc devid 2 size 3.00GiB used 896.00MiB path /dev/sdb Label: none uuid: 10bd3202-0415-43af-96a8-d5409f310a7e Total devices 1 FS bytes used 128.00KiB devid 1 size 3.00GiB used 536.00MiB path /dev/sda So as per the replace start command and kernel log replace was successful. Now let's try to clean mount. $ umount /btrfs $ btrfs device scan --forget $ mount -o device=/dev/sdc /dev/sdb /btrfs mount: /btrfs: wrong fs type, bad option, bad superblock on /dev/sdb, missing codepage or helper program, or other error. [ 636.157517] BTRFS error (device sdc): failed to read chunk tree: -2 [ 636.180177] BTRFS error (device sdc): open_ctree failed That's because per dev items it is still looking for the original seed device. $ btrfs inspect-internal dump-tree -d /dev/sdb item 0 key (DEV_ITEMS DEV_ITEM 1) itemoff 16185 itemsize 98 devid 1 total_bytes 3221225472 bytes_used 545259520 io_align 4096 io_width 4096 sector_size 4096 type 0 generation 6 start_offset 0 dev_group 0 seek_speed 0 bandwidth 0 uuid 59368f50-9af2-4b17-91da-8a783cc418d4 <--- seed uuid fsid 10bd3202-0415-43af-96a8-d5409f310a7e <--- seed fsid item 1 key (DEV_ITEMS DEV_ITEM 2) itemoff 16087 itemsize 98 devid 2 total_bytes 3221225472 bytes_used 939524096 io_align 4096 io_width 4096 sector_size 4096 type 0 generation 0 start_offset 0 dev_group 0 seek_speed 0 bandwidth 0 uuid 56a0a6bc-4630-4998-8daf-3c3030c4256a <- sprout uuid fsid ab2c88b7-be81-4a7e-9849-c3666e7f9f4f <- sprout fsid But the replaced target has the following uuid+fsid in its superblock which doesn't match with the expected uuid+fsid in its devitem. $ btrfs in dump-super /dev/sdc | egrep '^generation|dev_item.uuid|dev_item.fsid|devid' generation 20 dev_item.uuid 59368f50-9af2-4b17-91da-8a783cc418d4 dev_item.fsid ab2c88b7-be81-4a7e-9849-c3666e7f9f4f [match] dev_item.devid 1 So if you provide the original seed device the mount shall be successful. Which so long happening in the test case btrfs/163. $ btrfs device scan --forget $ mount -o device=/dev/sda /dev/sdb /btrfs Fix in this patch: If a seed is not sprouted then there is no replacement of it, because of its read-only filesystem with a read-only device. Similarly, in the case of a sprouted filesystem, the seed device is still read only. So, mark it as you can't replace a seed device, you can only add a new device and then delete the seed device. If replace is attempted then returns -EINVAL. Signed-off-by: Anand Jain Signed-off-by: David Sterba Signed-off-by: Sasha Levin --- fs/btrfs/dev-replace.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fs/btrfs/dev-replace.c b/fs/btrfs/dev-replace.c index e4a1c6afe35dc..0cb36746060da 100644 --- a/fs/btrfs/dev-replace.c +++ b/fs/btrfs/dev-replace.c @@ -230,7 +230,7 @@ static int btrfs_init_dev_replace_tgtdev(struct btrfs_fs_info *fs_info, int ret = 0; *device_out = NULL; - if (fs_info->fs_devices->seeding) { + if (srcdev->fs_devices->seeding) { btrfs_err(fs_info, "the filesystem is a seed filesystem!"); return -EINVAL; } -- 2.27.0