Hi, running "btrfs filesystem defrag" somehow always returns a non-zero exit code, even when it succeeds:
[lenz@metis btrfs-progs]% sudo ./btrfs filesystem defrag -v /mnt /mnt Btrfs v0.19-102-g2482539-dirty [lenz@metis btrfs-progs]% echo $? 20 [lenz@metis btrfs-progs]% sudo ./btrfs filesystem defrag -v /dev/loop0 /dev/loop0 ERROR: defrag failed on /dev/loop0 - Invalid argument Btrfs v0.19-102-g2482539-dirty total 1 failures [lenz@metis btrfs-progs]% echo $? 1 [lenz@metis btrfs-progs]% sudo ./btrfs filesystem defrag -v /dev/loop0 /dev/loop1 /dev/loop0 ERROR: defrag failed on /dev/loop0 - Invalid argument /dev/loop1 ERROR: defrag failed on /dev/loop1 - Invalid argument Btrfs v0.19-102-g2482539-dirty total 2 failures [lenz@metis btrfs-progs]% echo $? 1 [lenz@metis btrfs-progs]% sudo ./btrfs filesystem defrag -v /tmp /tmp ERROR: defrag failed on /tmp - Inappropriate ioctl for device Btrfs v0.19-102-g2482539-dirty total 1 failures [lenz@metis btrfs-progs]% echo $? 1 I'm no C programmer, but looking at the end of the do_defrag function in btrfs_cmds.c, I wonder if the last "return errors + 20" is correct? In case that errors is greater than zero, the function would be left via the exit(1) anyway, wouldn't it? In that case, wouldn't "return 0" at the end be more appropriate? [SNIP] if (errors) { fprintf(stderr, "total %d failures\n", errors); exit(1); } free(av); return errors + 20; [SNIP] Thanks! -- Lenz Grimmer <l...@grimmer.com> - http://www.lenzg.net/
signature.asc
Description: OpenPGP digital signature