From: Satoru Takeuchi <takeuchi_satoru@jp.fujitsu.com>
To: Miao Xie <miaox@cn.fujitsu.com>, <linux-btrfs@vger.kernel.org>
Cc: Anand Jain <anand.jain@oracle.com>,
Wang Shilong <wangsl.fnst@cn.fujitsu.com>
Subject: Re: [PATCH V4 1/9] Btrfs: device_list_add() should not update list when mounted
Date: Fri, 4 Jul 2014 17:07:21 +0900 [thread overview]
Message-ID: <53B660B9.3040005@jp.fujitsu.com> (raw)
In-Reply-To: <1404382933-26672-1-git-send-email-miaox@cn.fujitsu.com>
Hi Miao, Anand,
(2014/07/03 19:22), Miao Xie wrote:
> From: Anand Jain <anand.jain@oracle.com>
>
> device_list_add() is called when user runs btrfs dev scan, which would add
> any btrfs device into the btrfs_fs_devices list.
Reviewed-by: Satoru Takeuchi <takeuchi_satoru@jp.fujitsu.com>
Thanks,
Satoru
>
> Now think of a mounted btrfs. And a new device which contains the a SB
> from the mounted btrfs devices.
>
> In this situation when user runs btrfs dev scan, the current code would
> just replace existing device with the new device.
>
> Which is to note that old device is neither closed nor gracefully
> removed from the btrfs.
>
> The FS is still operational with the old bdev however the device name
> is the btrfs_device is new which is provided by the btrfs dev scan.
>
> reproducer:
>
> devmgt[1] detach /dev/sdc
>
> replace the missing disk /dev/sdc
>
> btrfs rep start -f 1 /dev/sde /btrfs
> Label: none uuid: 5dc0aaf4-4683-4050-b2d6-5ebe5f5cd120
> Total devices 2 FS bytes used 32.00KiB
> devid 1 size 958.94MiB used 115.88MiB path /dev/sde
> devid 2 size 958.94MiB used 103.88MiB path /dev/sdd
>
> make /dev/sdc to reappear
>
> devmgt attach host2
>
> btrfs dev scan
>
> btrfs fi show -m
> Label: none uuid: 5dc0aaf4-4683-4050-b2d6-5ebe5f5cd120^M
> Total devices 2 FS bytes used 32.00KiB^M
> devid 1 size 958.94MiB used 115.88MiB path /dev/sdc <- Wrong.
> devid 2 size 958.94MiB used 103.88MiB path /dev/sdd
>
> since /dev/sdc has been replaced with /dev/sde, the /dev/sdc shouldn't be
> part of the btrfs-fsid when it reappears. If user want it to be part of it
> then sys admin should be using btrfs device add instead.
>
> [1] github.com/anajain/devmgt.git
>
> Signed-off-by: Anand Jain <anand.jain@oracle.com>
> Signed-off-by: Wang Shilong <wangsl.fnst@cn.fujitsu.com>
> Signed-off-by: Miao Xie <miaox@cn.fujitsu.com>
> ---
> Changelog v3->v4:
> - Fix the over-80-charactor problem
> ---
> fs/btrfs/volumes.c | 27 +++++++++++++++++++++++++++
> 1 file changed, 27 insertions(+)
>
> diff --git a/fs/btrfs/volumes.c b/fs/btrfs/volumes.c
> index a9c11a0..16e71a1 100644
> --- a/fs/btrfs/volumes.c
> +++ b/fs/btrfs/volumes.c
> @@ -508,6 +508,33 @@ static noinline int device_list_add(const char *path,
> ret = 1;
> device->fs_devices = fs_devices;
> } else if (!device->name || strcmp(device->name->str, path)) {
> + /*
> + * When FS is already mounted.
> + * 1. If you are here and if the device->name is NULL that
> + * means this device was missing at time of FS mount.
> + * 2. If you are here and if the device->name is different
> + * from 'path' that means either
> + * a. The same device disappeared and reappeared with
> + * different name. or
> + * b. The missing-disk-which-was-replaced, has
> + * reappeared now.
> + *
> + * We must allow 1 and 2a above. But 2b would be a spurious
> + * and unintentional.
> + *
> + * Further in case of 1 and 2a above, the disk at 'path'
> + * would have missed some transaction when it was away and
> + * in case of 2a the stale bdev has to be updated as well.
> + * 2b must not be allowed at all time.
> + */
> +
> + /*
> + * As of now don't allow update to btrfs_fs_device through
> + * the btrfs dev scan cli, after FS has been mounted.
> + */
> + if (fs_devices->opened)
> + return -EBUSY;
> +
> name = rcu_string_strdup(path, GFP_NOFS);
> if (!name)
> return -ENOMEM;
>
prev parent reply other threads:[~2014-07-04 8:07 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-07-03 10:22 [PATCH V4 1/9] Btrfs: device_list_add() should not update list when mounted Miao Xie
2014-07-03 10:22 ` [PATCH V2 2/9] btrfs: check generation as replace duplicates devid+uuid Miao Xie
2014-07-03 10:22 ` [PATCH RESEND 3/9] Btrfs: make defragment work with nodatacow option Miao Xie
2014-07-03 10:22 ` [PATCH RESEND 4/9] Btrfs: fix put dio bio twice when we submit dio bio fail Miao Xie
2014-07-04 1:58 ` Satoru Takeuchi
2014-07-03 10:22 ` [PATCH RESEND 5/9] Btrfs: fix missing error handler if submiting re-read bio fails Miao Xie
2014-07-03 10:22 ` [PATCH RESEND 6/9] Btrfs: cleanup the read failure record after write or when the inode is freeing Miao Xie
2014-07-03 10:22 ` [PATCH V2 7/9] btrfs: fix null pointer dereference in clone_fs_devices when name is null Miao Xie
2014-07-07 4:04 ` Anand Jain
2014-07-07 4:22 ` Miao Xie
2014-07-07 9:56 ` Anand Jain
2014-07-08 2:11 ` Miao Xie
2014-07-03 10:22 ` [PATCH 8/9] Btrfs: fix unzeroed members in fs_devices when creating a fs from seed fs Miao Xie
2014-07-03 10:22 ` [PATCH 9/9] Btrfs: fix writing data into the seed filesystem Miao Xie
2014-07-04 3:17 ` Liu Bo
2014-07-04 8:07 ` Satoru Takeuchi [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=53B660B9.3040005@jp.fujitsu.com \
--to=takeuchi_satoru@jp.fujitsu.com \
--cc=anand.jain@oracle.com \
--cc=linux-btrfs@vger.kernel.org \
--cc=miaox@cn.fujitsu.com \
--cc=wangsl.fnst@cn.fujitsu.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.