summaryrefslogtreecommitdiff
path: root/cmds-scrub.c
diff options
context:
space:
mode:
authorEric Sandeen <sandeen@redhat.com>2013-02-25 16:54:41 -0600
committerDavid Sterba <dsterba@suse.cz>2013-02-27 14:39:39 +0100
commitd310e9cfffe0154d05ba2c8774241341307a6c76 (patch)
tree5ff94bfaf2e3fe6ff0af8e9ead330a4840b66412 /cmds-scrub.c
parent5eaeb577b563620f41735e0064d55ae41e969e78 (diff)
btrfs-progs: more scrub cancel error handling
If we request scrub cancel on an unmounted or non-btrfs device, we still get a "scrub canceled" success message: # btrfs scrub cancel /dev/loop1 scrub cancelled # blkid /dev/loop1 /dev/loop1: UUID="7f586941-1d5e-4ba7-9caa-b35934849957" TYPE="xfs" Fix this so that if check_mounted_where returns 0 we don't report success. While we're at it, use perror to report the reason for an open failure, if we get one. Signed-off-by: Eric Sandeen <sandeen@redhat.com>
Diffstat (limited to 'cmds-scrub.c')
-rw-r--r--cmds-scrub.c15
1 files changed, 11 insertions, 4 deletions
diff --git a/cmds-scrub.c b/cmds-scrub.c
index 353d9cb1..da4120f8 100644
--- a/cmds-scrub.c
+++ b/cmds-scrub.c
@@ -1451,7 +1451,7 @@ static int cmd_scrub_cancel(int argc, char **argv)
again:
fdmnt = open_file_or_dir(path);
if (fdmnt < 0) {
- fprintf(stderr, "ERROR: scrub cancel failed\n");
+ perror("ERROR: scrub cancel failed:");
return 1;
}
@@ -1462,11 +1462,18 @@ again:
/* 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) {
- /* It is a device; try again with the mountpoint. */
+ 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;
}
}
@@ -1474,7 +1481,7 @@ again:
if (ret) {
fprintf(stderr, "ERROR: scrub cancel failed on %s: %s\n", path,
- err == ENOTCONN ? "not running" : strerror(errno));
+ err == ENOTCONN ? "not running" : strerror(err));
return 1;
}