@@ -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);
The function check_where_mounted() scans the system for all other btrfs devices, which is necessary for its operation. However, in certain cases, devices remained in the scanned state is undesirable. So introduces the 'noscan' argument to make devices unscanned before return. 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(-)