aboutsummaryrefslogtreecommitdiffstats
path: root/meta/recipes-devtools/btrfs-tools/btrfs-tools/upstream-tmp/0005-Improve-error-handling-in-the-btrfs-command.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta/recipes-devtools/btrfs-tools/btrfs-tools/upstream-tmp/0005-Improve-error-handling-in-the-btrfs-command.patch')
-rw-r--r--meta/recipes-devtools/btrfs-tools/btrfs-tools/upstream-tmp/0005-Improve-error-handling-in-the-btrfs-command.patch510
1 files changed, 510 insertions, 0 deletions
diff --git a/meta/recipes-devtools/btrfs-tools/btrfs-tools/upstream-tmp/0005-Improve-error-handling-in-the-btrfs-command.patch b/meta/recipes-devtools/btrfs-tools/btrfs-tools/upstream-tmp/0005-Improve-error-handling-in-the-btrfs-command.patch
new file mode 100644
index 0000000000..e7e3fae332
--- /dev/null
+++ b/meta/recipes-devtools/btrfs-tools/btrfs-tools/upstream-tmp/0005-Improve-error-handling-in-the-btrfs-command.patch
@@ -0,0 +1,510 @@
+Upstream-Status: Inappropriate [Backport]
+From b3007332100e01ca84c161b6c75f0a414ab4611b Mon Sep 17 00:00:00 2001
+From: Goffredo Baroncelli <kreijack@libero.it>
+Date: Mon, 20 Dec 2010 20:06:19 +0000
+Subject: [PATCH 05/15] Improve error handling in the btrfs command
+
+Hi Chris,
+
+below is enclosed a trivial patch, which has the aim to improve the error
+reporting of the "btrfs" command.
+
+You can pull from
+
+ http://cassiopea.homelinux.net/git/btrfs-progs-unstable.git
+
+branch
+
+ strerror
+
+I changed every printf("some-error") to something like:
+
+ e = errno;
+ fprintf(stderr, "ERROR: .... - %s", strerror(e));
+
+so:
+
+1) all the error are reported to standard error
+2) At the end of the message is printed the error as returned by the system.
+
+The change is quite simple, I replaced every printf("some-error") to the line
+above. I don't touched anything other.
+I also integrated a missing "printf" on the basis of the Ben patch.
+
+This patch leads the btrfs command to be more "user friendly" :-)
+
+Regards
+G.Baroncelli
+
+ btrfs-list.c | 40 ++++++++++++++++++++++--------
+ btrfs_cmds.c | 77 ++++++++++++++++++++++++++++++++++++++++-----------------
+ utils.c | 6 ++++
+ 3 files changed, 89 insertions(+), 34 deletions(-)
+
+Signed-off-by: Chris Mason <chris.mason@oracle.com>
+---
+ btrfs-list.c | 40 ++++++++++++++++++++++--------
+ btrfs_cmds.c | 77 ++++++++++++++++++++++++++++++++++++++++-----------------
+ utils.c | 6 ++++
+ 3 files changed, 89 insertions(+), 34 deletions(-)
+
+diff --git a/btrfs-list.c b/btrfs-list.c
+index 93766a8..abcc2f4 100644
+--- a/btrfs-list.c
++++ b/btrfs-list.c
+@@ -265,7 +265,7 @@ static int resolve_root(struct root_lookup *rl, struct root_info *ri)
+ static int lookup_ino_path(int fd, struct root_info *ri)
+ {
+ struct btrfs_ioctl_ino_lookup_args args;
+- int ret;
++ int ret, e;
+
+ if (ri->path)
+ return 0;
+@@ -275,9 +275,11 @@ static int lookup_ino_path(int fd, struct root_info *ri)
+ args.objectid = ri->dir_id;
+
+ ret = ioctl(fd, BTRFS_IOC_INO_LOOKUP, &args);
++ e = errno;
+ if (ret) {
+- fprintf(stderr, "ERROR: Failed to lookup path for root %llu\n",
+- (unsigned long long)ri->ref_tree);
++ fprintf(stderr, "ERROR: Failed to lookup path for root %llu - %s\n",
++ (unsigned long long)ri->ref_tree,
++ strerror(e));
+ return ret;
+ }
+
+@@ -320,15 +322,18 @@ static u64 find_root_gen(int fd)
+ unsigned long off = 0;
+ u64 max_found = 0;
+ int i;
++ int e;
+
+ memset(&ino_args, 0, sizeof(ino_args));
+ ino_args.objectid = BTRFS_FIRST_FREE_OBJECTID;
+
+ /* this ioctl fills in ino_args->treeid */
+ ret = ioctl(fd, BTRFS_IOC_INO_LOOKUP, &ino_args);
++ e = errno;
+ if (ret) {
+- fprintf(stderr, "ERROR: Failed to lookup path for dirid %llu\n",
+- (unsigned long long)BTRFS_FIRST_FREE_OBJECTID);
++ fprintf(stderr, "ERROR: Failed to lookup path for dirid %llu - %s\n",
++ (unsigned long long)BTRFS_FIRST_FREE_OBJECTID,
++ strerror(e));
+ return 0;
+ }
+
+@@ -351,8 +356,10 @@ static u64 find_root_gen(int fd)
+
+ while (1) {
+ ret = ioctl(fd, BTRFS_IOC_TREE_SEARCH, &args);
++ e = errno;
+ if (ret < 0) {
+- fprintf(stderr, "ERROR: can't perform the search\n");
++ fprintf(stderr, "ERROR: can't perform the search - %s\n",
++ strerror(e));
+ return 0;
+ }
+ /* the ioctl returns the number of item it found in nr_items */
+@@ -407,14 +414,16 @@ static char *__ino_resolve(int fd, u64 dirid)
+ struct btrfs_ioctl_ino_lookup_args args;
+ int ret;
+ char *full;
++ int e;
+
+ memset(&args, 0, sizeof(args));
+ args.objectid = dirid;
+
+ ret = ioctl(fd, BTRFS_IOC_INO_LOOKUP, &args);
++ e = errno;
+ if (ret) {
+- fprintf(stderr, "ERROR: Failed to lookup path for dirid %llu\n",
+- (unsigned long long)dirid);
++ fprintf(stderr, "ERROR: Failed to lookup path for dirid %llu - %s\n",
++ (unsigned long long)dirid, strerror(e) );
+ return ERR_PTR(ret);
+ }
+
+@@ -472,6 +481,7 @@ static char *ino_resolve(int fd, u64 ino, u64 *cache_dirid, char **cache_name)
+ struct btrfs_ioctl_search_header *sh;
+ unsigned long off = 0;
+ int namelen;
++ int e;
+
+ memset(&args, 0, sizeof(args));
+
+@@ -490,8 +500,10 @@ static char *ino_resolve(int fd, u64 ino, u64 *cache_dirid, char **cache_name)
+ sk->nr_items = 1;
+
+ ret = ioctl(fd, BTRFS_IOC_TREE_SEARCH, &args);
++ e = errno;
+ if (ret < 0) {
+- fprintf(stderr, "ERROR: can't perform the search\n");
++ fprintf(stderr, "ERROR: can't perform the search - %s\n",
++ strerror(e));
+ return NULL;
+ }
+ /* the ioctl returns the number of item it found in nr_items */
+@@ -550,6 +562,7 @@ int list_subvols(int fd)
+ char *name;
+ u64 dir_id;
+ int i;
++ int e;
+
+ root_lookup_init(&root_lookup);
+
+@@ -578,8 +591,10 @@ int list_subvols(int fd)
+
+ while(1) {
+ ret = ioctl(fd, BTRFS_IOC_TREE_SEARCH, &args);
++ e = errno;
+ if (ret < 0) {
+- fprintf(stderr, "ERROR: can't perform the search\n");
++ fprintf(stderr, "ERROR: can't perform the search - %s\n",
++ strerror(e));
+ return ret;
+ }
+ /* the ioctl returns the number of item it found in nr_items */
+@@ -747,6 +762,7 @@ int find_updated_files(int fd, u64 root_id, u64 oldest_gen)
+ u64 found_gen;
+ u64 max_found = 0;
+ int i;
++ int e;
+ u64 cache_dirid = 0;
+ u64 cache_ino = 0;
+ char *cache_dir_name = NULL;
+@@ -773,8 +789,10 @@ int find_updated_files(int fd, u64 root_id, u64 oldest_gen)
+ max_found = find_root_gen(fd);
+ while(1) {
+ ret = ioctl(fd, BTRFS_IOC_TREE_SEARCH, &args);
++ e = errno;
+ if (ret < 0) {
+- fprintf(stderr, "ERROR: can't perform the search\n");
++ fprintf(stderr, "ERROR: can't perform the search- %s\n",
++ strerror(e));
+ return ret;
+ }
+ /* the ioctl returns the number of item it found in nr_items */
+diff --git a/btrfs_cmds.c b/btrfs_cmds.c
+index fffb423..775bfe1 100644
+--- a/btrfs_cmds.c
++++ b/btrfs_cmds.c
+@@ -156,6 +156,7 @@ int do_defrag(int ac, char **av)
+ int verbose = 0;
+ int fancy_ioctl = 0;
+ struct btrfs_ioctl_defrag_range_args range;
++ int e=0;
+
+ optind = 1;
+ while(1) {
+@@ -219,19 +220,21 @@ int do_defrag(int ac, char **av)
+ }
+ if (!fancy_ioctl) {
+ ret = ioctl(fd, BTRFS_IOC_DEFRAG, NULL);
++ e=errno;
+ } else {
+ ret = ioctl(fd, BTRFS_IOC_DEFRAG_RANGE, &range);
+ if (ret && errno == ENOTTY) {
+- fprintf(stderr, "defrag range ioctl not "
++ fprintf(stderr, "ERROR: defrag range ioctl not "
+ "supported in this kernel, please try "
+ "without any options.\n");
+ errors++;
++ close(fd);
+ break;
+ }
+ }
+ if (ret) {
+- fprintf(stderr, "ioctl failed on %s ret %d errno %d\n",
+- av[i], ret, errno);
++ fprintf(stderr, "ERROR: defrag failed on %s - %s\n",
++ av[i], strerror(e));
+ errors++;
+ }
+ close(fd);
+@@ -310,7 +313,7 @@ int do_subvol_list(int argc, char **argv)
+ int do_clone(int argc, char **argv)
+ {
+ char *subvol, *dst;
+- int res, fd, fddst, len;
++ int res, fd, fddst, len, e;
+ char *newname;
+ char *dstdir;
+
+@@ -377,12 +380,14 @@ int do_clone(int argc, char **argv)
+ args.fd = fd;
+ strncpy(args.name, newname, BTRFS_PATH_NAME_MAX);
+ res = ioctl(fddst, BTRFS_IOC_SNAP_CREATE, &args);
++ e = errno;
+
+ close(fd);
+ close(fddst);
+
+ if(res < 0 ){
+- fprintf( stderr, "ERROR: cannot snapshot '%s'\n",subvol);
++ fprintf( stderr, "ERROR: cannot snapshot '%s' - %s\n",
++ subvol, strerror(e));
+ return 11;
+ }
+
+@@ -392,7 +397,7 @@ int do_clone(int argc, char **argv)
+
+ int do_delete_subvolume(int argc, char **argv)
+ {
+- int res, fd, len;
++ int res, fd, len, e;
+ struct btrfs_ioctl_vol_args args;
+ char *dname, *vname, *cpath;
+ char *path = argv[1];
+@@ -438,11 +443,13 @@ int do_delete_subvolume(int argc, char **argv)
+ printf("Delete subvolume '%s/%s'\n", dname, vname);
+ strncpy(args.name, vname, BTRFS_PATH_NAME_MAX);
+ res = ioctl(fd, BTRFS_IOC_SNAP_DESTROY, &args);
++ e = errno;
+
+ close(fd);
+
+ if(res < 0 ){
+- fprintf( stderr, "ERROR: cannot delete '%s/%s'\n",dname, vname);
++ fprintf( stderr, "ERROR: cannot delete '%s/%s' - %s\n",
++ dname, vname, strerror(e));
+ return 11;
+ }
+
+@@ -452,7 +459,7 @@ int do_delete_subvolume(int argc, char **argv)
+
+ int do_create_subvol(int argc, char **argv)
+ {
+- int res, fddst, len;
++ int res, fddst, len, e;
+ char *newname;
+ char *dstdir;
+ struct btrfs_ioctl_vol_args args;
+@@ -492,11 +499,13 @@ int do_create_subvol(int argc, char **argv)
+ printf("Create subvolume '%s/%s'\n", dstdir, newname);
+ strncpy(args.name, newname, BTRFS_PATH_NAME_MAX);
+ res = ioctl(fddst, BTRFS_IOC_SUBVOL_CREATE, &args);
++ e = errno;
+
+ close(fddst);
+
+ if(res < 0 ){
+- fprintf( stderr, "ERROR: cannot create subvolume\n");
++ fprintf( stderr, "ERROR: cannot create subvolume - %s\n",
++ strerror(e));
+ return 11;
+ }
+
+@@ -506,7 +515,7 @@ int do_create_subvol(int argc, char **argv)
+
+ int do_fssync(int argc, char **argv)
+ {
+- int fd, res;
++ int fd, res, e;
+ char *path = argv[1];
+
+ fd = open_file_or_dir(path);
+@@ -517,9 +526,11 @@ int do_fssync(int argc, char **argv)
+
+ printf("FSSync '%s'\n", path);
+ res = ioctl(fd, BTRFS_IOC_SYNC);
++ e = errno;
+ close(fd);
+ if( res < 0 ){
+- fprintf(stderr, "ERROR: unable to fs-syncing '%s'\n", path);
++ fprintf(stderr, "ERROR: unable to fs-syncing '%s' - %s\n",
++ path, strerror(e));
+ return 16;
+ }
+
+@@ -528,7 +539,7 @@ int do_fssync(int argc, char **argv)
+
+ int do_scan(int argc, char **argv)
+ {
+- int i, fd;
++ int i, fd, e;
+ if(argc<=1){
+ int ret;
+
+@@ -560,10 +571,12 @@ int do_scan(int argc, char **argv)
+ * a btrfs filesystem from an I/O error !!!
+ */
+ ret = ioctl(fd, BTRFS_IOC_SCAN_DEV, &args);
++ e = errno;
+
+ if( ret < 0 ){
+ close(fd);
+- fprintf(stderr, "ERROR: unable to scan the device '%s'\n", argv[i]);
++ fprintf(stderr, "ERROR: unable to scan the device '%s' - %s\n",
++ argv[i], strerror(e));
+ return 11;
+ }
+ }
+@@ -577,7 +590,7 @@ int do_resize(int argc, char **argv)
+ {
+
+ struct btrfs_ioctl_vol_args args;
+- int fd, res, len;
++ int fd, res, len, e;
+ char *amount=argv[1], *path=argv[2];
+
+ fd = open_file_or_dir(path);
+@@ -595,9 +608,11 @@ int do_resize(int argc, char **argv)
+ printf("Resize '%s' of '%s'\n", path, amount);
+ strncpy(args.name, amount, BTRFS_PATH_NAME_MAX);
+ res = ioctl(fd, BTRFS_IOC_RESIZE, &args);
++ e = errno;
+ close(fd);
+ if( res < 0 ){
+- fprintf(stderr, "ERROR: unable to resize '%s'\n", path);
++ fprintf(stderr, "ERROR: unable to resize '%s' - %s\n",
++ path, strerror(e));
+ return 30;
+ }
+ return 0;
+@@ -691,7 +706,7 @@ int do_add_volume(int nargs, char **args)
+ {
+
+ char *mntpnt = args[nargs-1];
+- int i, fdmnt, ret=0;
++ int i, fdmnt, ret=0, e;
+
+
+ fdmnt = open_file_or_dir(mntpnt);
+@@ -738,8 +753,10 @@ int do_add_volume(int nargs, char **args)
+
+ strncpy(ioctl_args.name, args[i], BTRFS_PATH_NAME_MAX);
+ res = ioctl(fdmnt, BTRFS_IOC_ADD_DEV, &ioctl_args);
++ e = errno;
+ if(res<0){
+- fprintf(stderr, "ERROR: error adding the device '%s'\n", args[i]);
++ fprintf(stderr, "ERROR: error adding the device '%s' - %s\n",
++ args[i], strerror(e));
+ ret++;
+ }
+
+@@ -756,7 +773,7 @@ int do_add_volume(int nargs, char **args)
+ int do_balance(int argc, char **argv)
+ {
+
+- int fdmnt, ret=0;
++ int fdmnt, ret=0, e;
+ struct btrfs_ioctl_vol_args args;
+ char *path = argv[1];
+
+@@ -768,9 +785,11 @@ int do_balance(int argc, char **argv)
+
+ memset(&args, 0, sizeof(args));
+ ret = ioctl(fdmnt, BTRFS_IOC_BALANCE, &args);
++ e = errno;
+ close(fdmnt);
+ if(ret<0){
+- fprintf(stderr, "ERROR: balancing '%s'\n", path);
++ fprintf(stderr, "ERROR: error during balancing '%s' - %s\n",
++ path, strerror(e));
+
+ return 19;
+ }
+@@ -780,7 +799,7 @@ int do_remove_volume(int nargs, char **args)
+ {
+
+ char *mntpnt = args[nargs-1];
+- int i, fdmnt, ret=0;
++ int i, fdmnt, ret=0, e;
+
+ fdmnt = open_file_or_dir(mntpnt);
+ if (fdmnt < 0) {
+@@ -794,8 +813,10 @@ int do_remove_volume(int nargs, char **args)
+
+ strncpy(arg.name, args[i], BTRFS_PATH_NAME_MAX);
+ res = ioctl(fdmnt, BTRFS_IOC_RM_DEV, &arg);
++ e = errno;
+ if(res<0){
+- fprintf(stderr, "ERROR: error removing the device '%s'\n", args[i]);
++ fprintf(stderr, "ERROR: error removing the device '%s' - %s\n",
++ args[i], strerror(e));
+ ret++;
+ }
+ }
+@@ -809,7 +830,7 @@ int do_remove_volume(int nargs, char **args)
+
+ int do_set_default_subvol(int nargs, char **argv)
+ {
+- int ret=0, fd;
++ int ret=0, fd, e;
+ u64 objectid;
+ char *path = argv[2];
+ char *subvolid = argv[1];
+@@ -826,9 +847,11 @@ int do_set_default_subvol(int nargs, char **argv)
+ return 30;
+ }
+ ret = ioctl(fd, BTRFS_IOC_DEFAULT_SUBVOL, &objectid);
++ e = errno;
+ close(fd);
+ if( ret < 0 ){
+- fprintf(stderr, "ERROR: unable to set a new default subvolume\n");
++ fprintf(stderr, "ERROR: unable to set a new default subvolume - %s\n",
++ strerror(e));
+ return 30;
+ }
+ return 0;
+@@ -840,6 +863,7 @@ int do_df_filesystem(int nargs, char **argv)
+ u64 count = 0, i;
+ int ret;
+ int fd;
++ int e;
+ char *path = argv[1];
+
+ fd = open_file_or_dir(path);
+@@ -856,7 +880,10 @@ int do_df_filesystem(int nargs, char **argv)
+ sargs->total_spaces = 0;
+
+ ret = ioctl(fd, BTRFS_IOC_SPACE_INFO, sargs);
++ e = errno;
+ if (ret) {
++ fprintf(stderr, "ERROR: couldn't get space info on '%s' - %s\n",
++ path, strerror(e));
+ free(sargs);
+ return ret;
+ }
+@@ -874,7 +901,11 @@ int do_df_filesystem(int nargs, char **argv)
+ sargs->total_spaces = 0;
+
+ ret = ioctl(fd, BTRFS_IOC_SPACE_INFO, sargs);
++ e = errno;
+ if (ret) {
++ fprintf(stderr, "ERROR: couldn't get space info on '%s' - %s\n",
++ path, strerror(e));
++ close(fd);
+ free(sargs);
+ return ret;
+ }
+diff --git a/utils.c b/utils.c
+index d8c3dcc..2a15d86 100644
+--- a/utils.c
++++ b/utils.c
+@@ -821,6 +821,7 @@ void btrfs_register_one_device(char *fname)
+ struct btrfs_ioctl_vol_args args;
+ int fd;
+ int ret;
++ int e;
+
+ fd = open("/dev/btrfs-control", O_RDONLY);
+ if (fd < 0) {
+@@ -830,6 +831,11 @@ void btrfs_register_one_device(char *fname)
+ }
+ strncpy(args.name, fname, BTRFS_PATH_NAME_MAX);
+ ret = ioctl(fd, BTRFS_IOC_SCAN_DEV, &args);
++ e = errno;
++ if(ret<0){
++ fprintf(stderr, "ERROR: unable to scan the device '%s' - %s\n",
++ fname, strerror(e));
++ }
+ close(fd);
+ }
+
+--
+1.7.2.3
+