diff options
author | Jan Schmidt <list.btrfs@jan-o-sch.net> | 2011-07-18 14:37:23 +0200 |
---|---|---|
committer | Chris Mason <chris.mason@oracle.com> | 2011-10-25 09:18:59 -0400 |
commit | 828f2b30df51161385a0739e4eff53b6affd7bec (patch) | |
tree | 94912d51e419d6db7623257e63fde98c51d70d2f | |
parent | eecfba1d345a5107cfd6efad0898a3f741a11e5a (diff) |
btrfs-progs: added check_mounted_where
new version of check_mounted() returning more information gathered while
searching. check_mounted() is now a wrapper for check_mounted_where(). the
new version is needed by scrub.c
Signed-off-by: Jan Schmidt <list.btrfs@jan-o-sch.net>
Signed-off-by: Hugo Mills <hugo@carfax.org.uk>
-rw-r--r-- | utils.c | 29 | ||||
-rw-r--r-- | utils.h | 2 |
2 files changed, 24 insertions, 7 deletions
@@ -790,13 +790,8 @@ int blk_file_in_dev_list(struct btrfs_fs_devices* fs_devices, const char* file) */ int check_mounted(const char* file) { - int ret; int fd; - u64 total_devs = 1; - int is_btrfs; - struct btrfs_fs_devices* fs_devices_mnt = NULL; - FILE *f; - struct mntent *mnt; + int ret; fd = open(file, O_RDONLY); if (fd < 0) { @@ -804,11 +799,26 @@ int check_mounted(const char* file) return -errno; } + ret = check_mounted_where(fd, file, NULL, 0, NULL); + close(fd); + + return ret; +} + +int check_mounted_where(int fd, const char *file, char *where, int size, + struct btrfs_fs_devices **fs_dev_ret) +{ + int ret; + u64 total_devs = 1; + int is_btrfs; + struct btrfs_fs_devices *fs_devices_mnt = NULL; + FILE *f; + struct mntent *mnt; + /* scan the initial device */ ret = btrfs_scan_one_device(fd, file, &fs_devices_mnt, &total_devs, BTRFS_SUPER_INFO_OFFSET); is_btrfs = (ret >= 0); - close(fd); /* scan other devices */ if (is_btrfs && total_devs > 1) { @@ -844,6 +854,11 @@ int check_mounted(const char* file) } /* Did we find an entry in mnt table? */ + if (mnt && size && where) + strncpy(where, mnt->mnt_dir, size); + if (fs_dev_ret) + *fs_dev_ret = fs_devices_mnt; + ret = (mnt != NULL); out_mntloop_err: @@ -37,6 +37,8 @@ int btrfs_scan_for_fsid(struct btrfs_fs_devices *fs_devices, u64 total_devs, void btrfs_register_one_device(char *fname); int btrfs_scan_one_dir(char *dirname, int run_ioctl); int check_mounted(const char *devicename); +int check_mounted_where(int fd, const char *file, char *where, int size, + struct btrfs_fs_devices **fs_devices_mnt); int btrfs_device_already_in_root(struct btrfs_root *root, int fd, int super_offset); char *pretty_sizes(u64 size); |