summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEric Sandeen <sandeen@redhat.com>2013-03-11 18:13:00 -0500
committerDavid Sterba <dsterba@suse.cz>2013-03-12 16:48:10 +0100
commit120fdfafa325777c2326229d6a8393ba5ed1914f (patch)
treedbfa774c4100154a09a9807d3ec2eb49300c7ddf
parent10e00b07640438c2412ec360433e38609c727738 (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.c49
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[] = {