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>
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;
}