@@ -53,7 +53,8 @@ static int blk_file_in_dev_list(struct btrfs_fs_devices* fs_devices,
}
int check_mounted_where(int fd, const char *file, char *where, int size,
- struct btrfs_fs_devices **fs_dev_ret, unsigned sbflags)
+ struct btrfs_fs_devices **fs_dev_ret, unsigned sbflags,
+ bool noscan)
{
struct btrfs_fs_devices *fs_devices_mnt = NULL;
struct mntent *mnt;
@@ -108,6 +109,8 @@ int check_mounted_where(int fd, const char *file, char *where, int size,
}
if (fs_dev_ret)
*fs_dev_ret = fs_devices_mnt;
+ else if (noscan)
+ btrfs_close_all_devices();
ret = (mnt != NULL);
@@ -132,7 +135,7 @@ int check_mounted(const char* file)
return -errno;
}
- ret = check_mounted_where(fd, file, NULL, 0, NULL, SBREAD_DEFAULT);
+ ret = check_mounted_where(fd, file, NULL, 0, NULL, SBREAD_DEFAULT, false);
close(fd);
return ret;
@@ -168,7 +171,7 @@ int get_btrfs_mount(const char *dev, char *mp, size_t mp_size)
goto out;
}
- ret = check_mounted_where(fd, dev, mp, mp_size, NULL, SBREAD_DEFAULT);
+ ret = check_mounted_where(fd, dev, mp, mp_size, NULL, SBREAD_DEFAULT, false);
if (!ret) {
ret = -EINVAL;
} else { /* mounted, all good */
@@ -23,7 +23,8 @@
struct btrfs_fs_devices;
int check_mounted_where(int fd, const char *file, char *where, int size,
- struct btrfs_fs_devices **fs_dev_ret, unsigned sbflags);
+ struct btrfs_fs_devices **fs_dev_ret, unsigned sbflags,
+ bool noscan);
int check_mounted(const char* file);
int get_btrfs_mount(const char *dev, char *mp, size_t mp_size);
int open_path_or_dev_mnt(const char *path, DIR **dirstream, int verbose);
@@ -230,7 +230,8 @@ int get_fs_info(const char *path, struct btrfs_ioctl_fs_info_args *fi_args,
goto out;
}
ret = check_mounted_where(fd, path, mp, sizeof(mp),
- &fs_devices_mnt, SBREAD_DEFAULT);
+ &fs_devices_mnt, SBREAD_DEFAULT,
+ false);
if (!ret) {
ret = -EINVAL;
goto out;
@@ -268,7 +268,7 @@ int BOX_MAIN(btrfstune)(int argc, char *argv[])
}
ret = check_mounted_where(fd, device, NULL, 0, NULL,
- SBREAD_IGNORE_FSID_MISMATCH);
+ SBREAD_IGNORE_FSID_MISMATCH, false);
if (ret < 0) {
errno = -ret;
error("could not check mount status of %s: %m", device);
Signed-off-by: Anand Jain <anand.jain@oracle.com> --- common/open-utils.c | 9 ++++++--- common/open-utils.h | 3 ++- common/utils.c | 3 ++- tune/main.c | 2 +- 4 files changed, 11 insertions(+), 6 deletions(-)