* [PATCH 2/5][REPOST][BTRFS-PROGS] Be more verbose when a ioctl returns an error
@ 2010-12-05 17:47 Goffredo Baroncelli
2011-06-12 21:51 ` Hugo Mills
0 siblings, 1 reply; 4+ messages in thread
From: Goffredo Baroncelli @ 2010-12-05 17:47 UTC (permalink / raw)
To: chris.mason; +Cc: linux-btrfs
[-- Attachment #1: Type: text/plain, Size: 13344 bytes --]
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);
}
--
gpg key@ keyserver.linux.it: Goffredo Baroncelli (ghigo) <kreijack@inwind.it>
Key fingerprint = 4769 7E51 5293 D36C 814E C054 BF04 F161 3DC5 0512
[-- Attachment #2: This is a digitally signed message part. --]
[-- Type: application/pgp-signature, Size: 190 bytes --]
^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [PATCH 2/5][REPOST][BTRFS-PROGS] Be more verbose when a ioctl returns an error
2010-12-05 17:47 [PATCH 2/5][REPOST][BTRFS-PROGS] Be more verbose when a ioctl returns an error Goffredo Baroncelli
@ 2011-06-12 21:51 ` Hugo Mills
2011-06-13 16:44 ` Goffredo Baroncelli
0 siblings, 1 reply; 4+ messages in thread
From: Hugo Mills @ 2011-06-12 21:51 UTC (permalink / raw)
To: Goffredo Baroncelli; +Cc: linux-btrfs
[-- Attachment #1: Type: text/plain, Size: 14256 bytes --]
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
--- My doctor tells me that I have a malformed public-duty gland, ---
and a natural deficiency in moral fibre.
[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 190 bytes --]
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH 2/5][REPOST][BTRFS-PROGS] Be more verbose when a ioctl returns an error
2011-06-12 21:51 ` Hugo Mills
@ 2011-06-13 16:44 ` Goffredo Baroncelli
2011-06-13 16:51 ` Hugo Mills
0 siblings, 1 reply; 4+ messages in thread
From: Goffredo Baroncelli @ 2011-06-13 16:44 UTC (permalink / raw)
To: Hugo Mills, linux-btrfs
Hi Hugo,
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
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);
>> }
>>
>>
>>
>>
>>
>
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH 2/5][REPOST][BTRFS-PROGS] Be more verbose when a ioctl returns an error
2011-06-13 16:44 ` Goffredo Baroncelli
@ 2011-06-13 16:51 ` Hugo Mills
0 siblings, 0 replies; 4+ messages in thread
From: Hugo Mills @ 2011-06-13 16:51 UTC (permalink / raw)
To: kreijack; +Cc: linux-btrfs
[-- Attachment #1: Type: text/plain, Size: 16324 bytes --]
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! ---
[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 190 bytes --]
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2011-06-13 16:51 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-12-05 17:47 [PATCH 2/5][REPOST][BTRFS-PROGS] Be more verbose when a ioctl returns an error Goffredo Baroncelli
2011-06-12 21:51 ` Hugo Mills
2011-06-13 16:44 ` Goffredo Baroncelli
2011-06-13 16:51 ` Hugo Mills
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox