Message ID | 20171204071939.22878-1-anand.jain@oracle.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On 2017/12/04 16:19, Anand Jain wrote: > When device is missing its not necessary that btrfs_device::name is null > or the path is different when it reappears. Its possible that device can > go missing after its been scanned where neither of > btrfs_device::name == NULL OR btrfs_device::name != reappear_dev_path, > is true. So just check for btrfs_device::dev_state.missing. Thanks. > > Signed-off-by: Anand Jain <anand.jain@oracle.com> > --- > 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 59a8785a2e9e..ac0c4eb5107f 100644 > --- a/fs/btrfs/volumes.c > +++ b/fs/btrfs/volumes.c > @@ -715,7 +715,8 @@ 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)) { > + } else if (!device->name || strcmp(device->name->str, path) || > + test_bit(BTRFS_DEV_STATE_MISSING, &device->dev_state)) { > /* > * When FS is already mounted. > * 1. If you are here and if the device->name is NULL that > I read the comments below this and wonder if BTRFS_DEV_STATE_MISSING is set when device->name is null and therefore the first condition can be removed. Thanks, Tomohiro -- To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On 12/05/2017 10:18 AM, Misono, Tomohiro wrote: > > > On 2017/12/04 16:19, Anand Jain wrote: >> When device is missing its not necessary that btrfs_device::name is null >> or the path is different when it reappears. Its possible that device can >> go missing after its been scanned where neither of >> btrfs_device::name == NULL OR btrfs_device::name != reappear_dev_path, >> is true. So just check for btrfs_device::dev_state.missing. Thanks. >> >> Signed-off-by: Anand Jain <anand.jain@oracle.com> >> --- >> 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 59a8785a2e9e..ac0c4eb5107f 100644 >> --- a/fs/btrfs/volumes.c >> +++ b/fs/btrfs/volumes.c >> @@ -715,7 +715,8 @@ 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)) { >> + } else if (!device->name || strcmp(device->name->str, path) || >> + test_bit(BTRFS_DEV_STATE_MISSING, &device->dev_state)) { >> /* >> * When FS is already mounted. >> * 1. If you are here and if the device->name is NULL that >> > > I read the comments below this and wonder if BTRFS_DEV_STATE_MISSING is set > when device->name is null and therefore the first condition can be removed. device->name is null only when missing is set. Will do this optimize in a new patch, as its about clean up and is not about fixing inconsistency as in here. Thanks, Anand > Thanks, > Tomohiro > -- To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
>>> @@ -715,7 +715,8 @@ 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)) { >>> + } else if (!device->name || strcmp(device->name->str, path) || >>> + test_bit(BTRFS_DEV_STATE_MISSING, &device->dev_state)) { >>> /* >>> * When FS is already mounted. >>> * 1. If you are here and if the device->name is NULL that >>> >> >> I read the comments below this and wonder if BTRFS_DEV_STATE_MISSING >> is set >> when device->name is null and therefore the first condition can be >> removed. On the 2nd thought, actually can not remove device->name, there can be a case where degraded FS is unmounted, then device->name is NULL. Thanks, Anand > device->name is null only when missing is set. > > Will do this optimize in a new patch, as its about clean up and > is not about fixing inconsistency as in here. > > Thanks, Anand -- To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/fs/btrfs/volumes.c b/fs/btrfs/volumes.c index 59a8785a2e9e..ac0c4eb5107f 100644 --- a/fs/btrfs/volumes.c +++ b/fs/btrfs/volumes.c @@ -715,7 +715,8 @@ 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)) { + } else if (!device->name || strcmp(device->name->str, path) || + test_bit(BTRFS_DEV_STATE_MISSING, &device->dev_state)) { /* * When FS is already mounted. * 1. If you are here and if the device->name is NULL that
When device is missing its not necessary that btrfs_device::name is null or the path is different when it reappears. Its possible that device can go missing after its been scanned where neither of btrfs_device::name == NULL OR btrfs_device::name != reappear_dev_path, is true. So just check for btrfs_device::dev_state.missing. Thanks. Signed-off-by: Anand Jain <anand.jain@oracle.com> --- fs/btrfs/volumes.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)