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>
This commit is contained in:
Eric Sandeen 2013-03-11 18:13:00 -05:00 committed by David Sterba
parent 10e00b0764
commit 120fdfafa3

View File

@ -1459,56 +1459,37 @@ static int cmd_scrub_cancel(int argc, char **argv)
{ {
char *path; char *path;
int ret; int ret;
int fdmnt; int fdmnt = -1;
int err;
char mp[BTRFS_PATH_NAME_MAX + 1];
struct btrfs_fs_devices *fs_devices_mnt = NULL;
if (check_argc_exact(argc, 2)) if (check_argc_exact(argc, 2))
usage(cmd_scrub_cancel_usage); usage(cmd_scrub_cancel_usage);
path = argv[1]; path = argv[1];
again: fdmnt = open_path_or_dev_mnt(path);
fdmnt = open_file_or_dir(path);
if (fdmnt < 0) { if (fdmnt < 0) {
perror("ERROR: scrub cancel failed:"); fprintf(stderr, "ERROR: could not open %s: %s\n",
return 1; path, strerror(errno));
ret = 1;
goto out;
} }
ret = ioctl(fdmnt, BTRFS_IOC_SCRUB_CANCEL, NULL); ret = ioctl(fdmnt, BTRFS_IOC_SCRUB_CANCEL, NULL);
err = errno;
if (ret && err == EINVAL) { if (ret < 0) {
/* 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) {
fprintf(stderr, "ERROR: scrub cancel failed on %s: %s\n", path, fprintf(stderr, "ERROR: scrub cancel failed on %s: %s\n", path,
err == ENOTCONN ? "not running" : strerror(err)); errno == ENOTCONN ? "not running" : strerror(errno));
return 1; ret = 1;
goto out;
} }
ret = 0;
printf("scrub cancelled\n"); printf("scrub cancelled\n");
return 0; out:
if (fdmnt != -1)
close(fdmnt);
return ret;
} }
static const char * const cmd_scrub_resume_usage[] = { static const char * const cmd_scrub_resume_usage[] = {