Re: [PATCH] Btrfs: do not add replace target to the alloc_list
On Sun, 1 Sep 2013 18:56:44 +0300, Ilya Dryomov wrote: If replace was suspended by the umount, replace target device is added to the fs_devices-alloc_list during a later mount. This is obviously wrong. -is_tgtdev_for_dev_replace is supposed to guard against that, but -is_tgtdev_for_dev_replace is (and can only ever be) initialized *after* everything is opened and fs_devices lists are populated. Fix this by checking the devid instead: for replace targets it's always equal to BTRFS_DEV_REPLACE_DEVID. Cc: Stefan Behrens sbehr...@giantdisaster.de Signed-off-by: Ilya Dryomov idryo...@gmail.com --- At first I thought this was caused by my btrfs_device rollback patch, but no, it just made it easier to spot -- previously one had to reboot or rmmod/insmod before mounting a suspended replace. fs/btrfs/volumes.c |3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/fs/btrfs/volumes.c b/fs/btrfs/volumes.c index c9a0977..5b99f19 100644 --- a/fs/btrfs/volumes.c +++ b/fs/btrfs/volumes.c @@ -793,7 +793,8 @@ static int __btrfs_open_devices(struct btrfs_fs_devices *fs_devices, fs_devices-rotating = 1; fs_devices-open_devices++; - if (device-writeable !device-is_tgtdev_for_dev_replace) { + if (device-writeable + device-devid != BTRFS_DEV_REPLACE_DEVID) { fs_devices-rw_devices++; list_add(device-dev_alloc_list, fs_devices-alloc_list); Reviewed-by: Stefan Behrens sbehr...@giantdisaster.de -- To unsubscribe from this list: send the line unsubscribe linux-btrfs in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCH] Btrfs: do not add replace target to the alloc_list
If replace was suspended by the umount, replace target device is added to the fs_devices-alloc_list during a later mount. This is obviously wrong. -is_tgtdev_for_dev_replace is supposed to guard against that, but -is_tgtdev_for_dev_replace is (and can only ever be) initialized *after* everything is opened and fs_devices lists are populated. Fix this by checking the devid instead: for replace targets it's always equal to BTRFS_DEV_REPLACE_DEVID. Cc: Stefan Behrens sbehr...@giantdisaster.de Signed-off-by: Ilya Dryomov idryo...@gmail.com --- At first I thought this was caused by my btrfs_device rollback patch, but no, it just made it easier to spot -- previously one had to reboot or rmmod/insmod before mounting a suspended replace. fs/btrfs/volumes.c |3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/fs/btrfs/volumes.c b/fs/btrfs/volumes.c index c9a0977..5b99f19 100644 --- a/fs/btrfs/volumes.c +++ b/fs/btrfs/volumes.c @@ -793,7 +793,8 @@ static int __btrfs_open_devices(struct btrfs_fs_devices *fs_devices, fs_devices-rotating = 1; fs_devices-open_devices++; - if (device-writeable !device-is_tgtdev_for_dev_replace) { + if (device-writeable + device-devid != BTRFS_DEV_REPLACE_DEVID) { fs_devices-rw_devices++; list_add(device-dev_alloc_list, fs_devices-alloc_list); -- 1.7.10.4 -- To unsubscribe from this list: send the line unsubscribe linux-btrfs in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html