btrfs-progs: report failure when resize ioctl fails
authorZygo Blaxell <ce3g8jdj@umail.furryterror.org>
Wed, 22 Apr 2015 03:38:47 +0000 (23:38 -0400)
committerDavid Sterba <dsterba@suse.cz>
Fri, 24 Apr 2015 13:42:04 +0000 (15:42 +0200)
The BTRFS_IOC_RESIZE ioctl returns 0 on success, negative for POSIX
errors, and positive for btrfs-specific errors.

If resize fails with a btrfs-specific error, decode the error and
report it.  If we can't decode the error, report its numeric value so
that the userspace tool is not instantly useless when a new error code
is defined in the kernel.

Exit with non-zero status on any resize error.  This is very important
for scripts that will shrink the underlying storage when btrfs reports
success!

Signed-off-by: Zygo Blaxell <ce3g8jdj@umail.furryterror.org
Signed-off-by: David Sterba <dsterba@suse.cz>
cmds-filesystem.c

index 2cace75..b93bb33 100644 (file)
@@ -1278,6 +1278,18 @@ static int cmd_resize(int argc, char **argv)
                fprintf(stderr, "ERROR: unable to resize '%s' - %s\n", 
                        path, strerror(e));
                return 1;
+       } else if (res > 0) {
+               const char *err_str = btrfs_err_str(res);
+
+               if (err_str) {
+                       fprintf(stderr, "ERROR: btrfs error resizing '%s' - %s\n",
+                               path, err_str);
+               } else {
+                       fprintf(stderr,
+                       "ERROR: btrfs error resizing '%s' - unknown btrfs_err_code %d\n",
+                               path, res);
+               }
+               return 1;
        }
        return 0;
 }