diff options
author | Eric Sandeen <sandeen@redhat.com> | 2013-03-11 18:13:00 -0500 |
---|---|---|
committer | David Sterba <dsterba@suse.cz> | 2013-03-12 16:48:10 +0100 |
commit | 120fdfafa325777c2326229d6a8393ba5ed1914f (patch) | |
tree | dbfa774c4100154a09a9807d3ec2eb49300c7ddf | |
parent | 10e00b07640438c2412ec360433e38609c727738 (diff) |
btrfs-progs: don't open-code mountpoint discovery in scrub cancel
cmd_scrub_cancel had its own mountpoint discovery routine;
just use open_path_or_dev_mnt() for that now.
Signed-off-by: Eric Sandeen <sandeen@redhat.com>
-rw-r--r-- | cmds-scrub.c | 49 |
1 files changed, 15 insertions, 34 deletions
diff --git a/cmds-scrub.c b/cmds-scrub.c index b0fcde69..1792f5fb 100644 --- a/cmds-scrub.c +++ b/cmds-scrub.c @@ -1459,56 +1459,37 @@ static int cmd_scrub_cancel(int argc, char **argv) { char *path; int ret; - int fdmnt; - int err; - char mp[BTRFS_PATH_NAME_MAX + 1]; - struct btrfs_fs_devices *fs_devices_mnt = NULL; + int fdmnt = -1; if (check_argc_exact(argc, 2)) usage(cmd_scrub_cancel_usage); path = argv[1]; -again: - fdmnt = open_file_or_dir(path); + fdmnt = open_path_or_dev_mnt(path); if (fdmnt < 0) { - perror("ERROR: scrub cancel failed:"); - return 1; + fprintf(stderr, "ERROR: could not open %s: %s\n", + path, strerror(errno)); + ret = 1; + goto out; } ret = ioctl(fdmnt, BTRFS_IOC_SCRUB_CANCEL, NULL); - err = errno; - - if (ret && err == EINVAL) { - /* path is not a btrfs mount point. See if it's a device. */ - ret = check_mounted_where(fdmnt, path, mp, sizeof(mp), - &fs_devices_mnt); - if (ret > 0) { - /* It's a mounted btrfs device; retry w/ mountpoint. */ - close(fdmnt); - path = mp; - goto again; - } else { - /* It's not a mounted btrfs device either */ - fprintf(stderr, - "ERROR: %s is not a mounted btrfs device\n", - path); - ret = 1; - err = EINVAL; - } - } - - close(fdmnt); - if (ret) { + if (ret < 0) { fprintf(stderr, "ERROR: scrub cancel failed on %s: %s\n", path, - err == ENOTCONN ? "not running" : strerror(err)); - return 1; + errno == ENOTCONN ? "not running" : strerror(errno)); + ret = 1; + goto out; } + ret = 0; printf("scrub cancelled\n"); - return 0; +out: + if (fdmnt != -1) + close(fdmnt); + return ret; } static const char * const cmd_scrub_resume_usage[] = { |