Hi, Goffredo, On Mon, Jun 13, 2011 at 06:44:06PM +0200, Goffredo Baroncelli wrote: > I tryed to rebase this patch on your repo, but it seem that it was > already applied. (see commit b3007332100e01ca84c161b6c75f0a414ab4611b)... > > Let me know how to proceede
Don't worry, then. I saw the three other patches from this series that Chris applied for the tmp branch, but completely missed spotting that this one had also gone in. It's already applied -- no further work needs to be done. Hugo. > Regards > G.Baroncelli > > On 06/12/2011 11:51 PM, Hugo Mills wrote: > > Goffredo - > > > > This is missing a S-o-B, and is damaged with line-wrapping. If you > > fix it up and re-send, I can pull into my integration branch so it > > doesn't get forgotten... > > > > Hugo. > > > > On Sun, Dec 05, 2010 at 06:47:38PM +0100, Goffredo Baroncelli wrote: > >> Hi all, > >> > >> this patch makes the command "btrfs" more verbose when a btrfs ioctl > >> return an > >> error. The error code is printed as text message by the strerror(errno) > >> function. > >> > >> Example: > >> > >> # btrfs subvol create /tmp/1 > >> Create subvolume '/tmp/1' > >> # btrfs subvol create /tmp/1/2 > >> Create subvolume '/tmp/1/2' > >> # btrfs subvol delete > >> $ sudo btrfs subvol delete /tmp/1 > >> Delete subvolume '/tmp/1' > >> ERROR: cannot delete '/tmp/1' - Directory not empty > >> > >> You can pull the patch also from > >> http://cassiopea.homelinux.net/git/btrfs-progs-unstable.git > >> branch > >> strerror > >> > >> Comments are welcome. > >> > >> Reagrds > >> G.Baroncelli > >> > >> 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 8031c58..3765a10 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; > >> strcpy(args.name, newname); > >> 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); > >> strcpy(args.name, vname); > >> 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); > >> strcpy(args.name, newname); > >> 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); > >> strcpy(args.name, amount); > >> 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) > >> > >> strcpy(ioctl_args.name, args[i]); > >> 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) > >> > >> strcpy(arg.name, args[i]); > >> 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); > >> @@ -874,7 +898,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 - %s\n", > >> + strerror(e)); > >> + close(fd); > >> free(sargs); > >> return ret; > >> } > >> diff --git a/utils.c b/utils.c > >> index fd894f3..3e22403 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) > >> } > >> strcpy(args.name, fname); > >> 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); > >> } > >> > >> > >> > >> > >> > > > -- === Hugo Mills: hugo@... carfax.org.uk | darksatanic.net | lug.org.uk === PGP key: 515C238D from wwwkeys.eu.pgp.net or http://www.carfax.org.uk --- Strive for apathy! ---
signature.asc
Description: Digital signature