Eric Sandeen [Mon, 25 Feb 2013 22:54:48 +0000 (16:54 -0600)]
btrfs-progs: Tidy up resolve_root
Whitespace fixes and fix a variable declaration after
code.
Signed-off-by: Eric Sandeen <sandeen@redhat.com>
Eric Sandeen [Mon, 25 Feb 2013 22:54:47 +0000 (16:54 -0600)]
btrfs-progs: fix mem leak in resolve_root
If we exit with error we must free the allocated memory
to avoid a leak.
Signed-off-by: Eric Sandeen <sandeen@redhat.com>
Eric Sandeen [Mon, 25 Feb 2013 22:54:46 +0000 (16:54 -0600)]
btrfs-progs: close fd on cmd_subvol_get_default return
Without this we leak the fd when we return from the
function.
Also, remove the senseless random return values.
Signed-off-by: Eric Sandeen <sandeen@redhat.com>
Eric Sandeen [Mon, 25 Feb 2013 22:54:45 +0000 (16:54 -0600)]
btrfs-progs: free allocated di_args in cmd_start_replace
We only freed this allocation in error paths, and leaked
a bit when it went out of scope normally.
Signed-off-by: Eric Sandeen <sandeen@redhat.com>
Eric Sandeen [Mon, 25 Feb 2013 22:54:44 +0000 (16:54 -0600)]
btrfs-progs: provide positive errno to strerror in cmd_restore
check_mounted returns a negative errno, so it needs to be flipped
again before passing to strerror.
Signed-off-by: Eric Sandeen <sandeen@redhat.com>
Eric Sandeen [Mon, 25 Feb 2013 22:54:43 +0000 (16:54 -0600)]
btrfs-progs: don't call close on error fd
In the error case where fd < 0, close(fd) is the wrong
thing to do.
Signed-off-by: Eric Sandeen <sandeen@redhat.com>
Eric Sandeen [Mon, 25 Feb 2013 22:54:42 +0000 (16:54 -0600)]
btrfs-progs: free memory before error exit in read_whole_eb
Free the memory allocated to "multi" before the error
exit in read_whole_eb(). Set it to NULL after we free
it in the loop to avoid any potential double-free.
Signed-off-by: Eric Sandeen <sandeen@redhat.com>
Eric Sandeen [Mon, 25 Feb 2013 22:54:41 +0000 (16:54 -0600)]
btrfs-progs: more scrub cancel error handling
If we request scrub cancel on an unmounted or
non-btrfs device, we still get a "scrub canceled"
success message:
# btrfs scrub cancel /dev/loop1
scrub cancelled
# blkid /dev/loop1
/dev/loop1: UUID="
7f586941-1d5e-4ba7-9caa-
b35934849957" TYPE="xfs"
Fix this so that if check_mounted_where returns 0
we don't report success.
While we're at it, use perror to report the reason for an open
failure, if we get one.
Signed-off-by: Eric Sandeen <sandeen@redhat.com>
Eric Sandeen [Mon, 25 Feb 2013 22:54:40 +0000 (16:54 -0600)]
btrfs-progs: fix close of error fd in scrub cancel
If we retry opening the mountpoint and fail, we'll call
close on a filehandle w/ value -1. Rearrange so the
retry uses the same open and same error handling.
Signed-off-by: Eric Sandeen <sandeen@redhat.com>
Eric Sandeen [Mon, 25 Feb 2013 22:54:39 +0000 (16:54 -0600)]
btrfs-progs: fix open error test in cmd_start_replace
open() returns a negative fd on failure, not 0.
Signed-off-by: Eric Sandeen <sandeen@redhat.com>
Eric Sandeen [Mon, 25 Feb 2013 22:54:38 +0000 (16:54 -0600)]
btrfs-progs: avoid double-free in __btrfs_map_block
__btrfs_map_block() can possibly do the goto again: loop after
having allocated & freed the "multi" pointer. There are then
a couple error conditions where it will attempt to again kfree
the now non-NULL multi pointer. So before retrying, reset
multi to NULL after we free it.
Signed-off-by: Eric Sandeen <sandeen@redhat.com>
Eric Sandeen [Mon, 25 Feb 2013 22:54:37 +0000 (16:54 -0600)]
btrfs-progs: btrfs_list_get_path_rootid error handling
btrfs_list_get_path_rootid() tries to return a negative
number on error, but it's a u64 function. Callers which test
for a return < 0 will never see an error.
Change the function to fill in the rootid via a pointer,
and then return a simple int as error.
Signed-off-by: Eric Sandeen <sandeen@redhat.com>
Eric Sandeen [Mon, 25 Feb 2013 22:54:36 +0000 (16:54 -0600)]
btrfs-progs: Remove write-only var fdres in cmd_dev_stats()
fdres is initialized to -1, then later tested, but never
set. Just remove it.
Signed-off-by: Eric Sandeen <sandeen@redhat.com>
Eric Sandeen [Mon, 25 Feb 2013 22:54:35 +0000 (16:54 -0600)]
btrfs-progs: fix btrfs_get_subvol cut/paste error
in btrfs_get_subvol(), there is a cut and paste error:
if (ri->full_path)
the_ri->full_path = strdup(ri->full_path);
else
the_ri->name = NULL;
It should be setting the_ri->full_path to NULL here.
Do it in a function instead of the cpoy & paste to avoid future
errors.
Signed-off-by: Eric Sandeen <sandeen@redhat.com>
Jeff Liu [Wed, 30 Jan 2013 08:32:47 +0000 (16:32 +0800)]
btrfs-progs: move btrfslabel.[c|h] stuff to utils.[c|h]
Clean btrfslabel.[c|h] out of the source tree and move those related
functions to utils.[c|h].
CC: Gene Czarcinski <gene@czarc.net>
Signed-off-by: Jie Liu <jeff.liu@oracle.com>
Signed-off-by: David Sterba <dsterba@suse.cz>
Jeff Liu [Wed, 30 Jan 2013 08:32:43 +0000 (16:32 +0800)]
btrfs-progs: refactor check_label()
Refactor check_label().
- Make it be static at first, this is a preparation step since we'll remove
btrfslabel.[c|h] and move those functions from there to utils.[c|h], we can
do pre-checking against the input label string with it.
- Fix the label length check up from BTRFS_LABEL_SIZE to BTRFS_LABEL_SIZE - 1.
- Kill the check of label contains an invalid character, see below commits for detail:
79e0e445fc2365e47fc7f060d5a4445d37e184b8
btrfs-progs: kill check for /'s in labels.
Signed-off-by: Jie Liu <jeff.liu@oracle.com>
CC: David Sterba <dsterba@suse.cz>
CC: Gene Czarcinski <gene@czarc.net>
Jeff Liu [Mon, 17 Dec 2012 11:35:29 +0000 (11:35 +0000)]
Btrfs-progs: fix cmd_label_usage to reflect this change.
Fix the command usage of "btrfs filesystem label" to reflect this change. i.e. so that
we can get/set the label of a mounted filesystem against the mountpoint.
Signed-off-by: Jie Liu <jeff.liu@oracle.com>
Signed-off-by: Anand Jain <anand.jain@oracle.com>
Jeff Liu [Mon, 17 Dec 2012 11:35:27 +0000 (11:35 +0000)]
Btrfs-progs: Fix set_label_unmounted() with label length validation
Currently, we keeping silent if the label length is exceeding BTRFS_LABEL_SIZE - 1, and just
truncating the characters beyond that.
This patch make it return error and exit in this situation.
Signed-off-by: Jie Liu <jeff.liu@oracle.com>
Signed-off-by: Anand Jain <anand.jain@oracle.com>
Jeff Liu [Mon, 17 Dec 2012 11:35:23 +0000 (11:35 +0000)]
Btrfs-progs: Change the label of a mounted file system
With this new ioctl(2), we can set/change the label for a mounted file system.
It still does normal process for an umounted file system.
Signed-off-by: Jie Liu <jeff.liu@oracle.com>
Signed-off-by: Anand Jain <anand.jain@oracle.com>
Mark Fasheh [Thu, 31 Jan 2013 18:57:53 +0000 (10:57 -0800)]
btrfsprogs: btrfstune support for extended inode refs
This patch adds an option to btrfstune, '-r' which will enable the extended
inode refs flag on the provided btrfs superblock. We don't have a disable
option at the moment as that would require far more work.
Signed-off-by: Mark Fasheh <mfasheh@suse.de>
Liu Bo [Mon, 18 Feb 2013 10:05:17 +0000 (18:05 +0800)]
Btrfs-progs: fix segmentation fault of 'btrfs-debug-tree -e'
Due to some historical reasons, we remove 'printing leaf' part, which'd
lead to 'Segmentation fault' of btrfs-debug-tree -e, this patch adds it
back.
Signed-off-by: Liu Bo <bo.li.liu@oracle.com>
Eric Sandeen [Thu, 14 Feb 2013 18:30:03 +0000 (12:30 -0600)]
btrfs-progs: require mkfs -f force option to overwrite filesystem or partition table
The core of this is shamelessly stolen from xfsprogs.
Use blkid to detect an existing filesystem or partition
table on any of the target devices. If something is found,
require the '-f' option to overwrite it, hopefully avoiding
disaster due to mistyped devicenames, etc.
# mkfs.btrfs /dev/sda1
WARNING! - Btrfs
v0.20-rc1-59-gd00279c-dirty IS EXPERIMENTAL
WARNING! - see http://btrfs.wiki.kernel.org before using
/dev/sda1 appears to contain an existing filesystem (xfs).
Use the -f option to force overwrite.
#
This does introduce a requirement on libblkid.
Signed-off-by: Eric Sandeen <sandeen@redhat.com>
Mark Fasheh [Thu, 14 Feb 2013 18:29:50 +0000 (10:29 -0800)]
btrfs-progs: Fix pointer math in __ino_to_path_fd
We are casting an array of u64 values into a char ** array so
when we dereference this array (as a char **) on a 32 bit system
we're then re-casting that back to a 32 bit value. This causes
problems when we try to print those strings.
Signed-off-by: Mark Fasheh <mfasheh@suse.de>
Tsutomu Itoh [Thu, 14 Feb 2013 07:53:04 +0000 (16:53 +0900)]
Btrfs-progs: check out if the swap device
Currently, the following commands succeed.
# cat /proc/swaps
Filename Type Size Used Priority
/dev/sda3 partition
8388604 0 -1
/dev/sdc8 partition
9765884 0 -2
# mkfs.btrfs /dev/sdc8
WARNING! - Btrfs
v0.20-rc1-165-g82ac345 IS EXPERIMENTAL
WARNING! - see http://btrfs.wiki.kernel.org before using
fs created label (null) on /dev/sdc8
nodesize 4096 leafsize 4096 sectorsize 4096 size 9.31GB
Btrfs
v0.20-rc1-165-g82ac345
# btrfs fi sh /dev/sdc8
Label: none uuid:
fc0bdbd0-7eed-460f-b4e9-
131273b66df2
Total devices 1 FS bytes used 28.00KB
devid 1 size 9.31GB used 989.62MB path /dev/sdc8
Btrfs
v0.20-rc1-165-g82ac345
#
But we should check out the swap device. Fixed it.
Signed-off-by: Tsutomu Itoh <t-itoh@jp.fujitsu.com>
Tested-by: David Sterba <dsterba@suse.cz>
Arvin Schnell [Wed, 30 Jan 2013 22:50:26 +0000 (14:50 -0800)]
btrfs-progs: make libbtrfs usable from C++
Please find attached a patch to make the new libbtrfs usable from
C++ (at least for the parts snapper will likely need).
Signed-off-by: Arvin Schnell <aschnell@suse.de>
Signed-off-by: Mark Fasheh <mfasheh@suse.de>
Ilya Dryomov [Tue, 12 Feb 2013 16:42:30 +0000 (18:42 +0200)]
Btrfs-progs: make 0 a valid usage filter argument
This is a progs counterpart to a "Btrfs: allow for selecting only
completely empty chunks". usage=0 now means "select only only
completely empty chunks and nothing else".
Signed-off-by: Ilya Dryomov <idryomov@gmail.com>
Mark Fasheh [Wed, 30 Jan 2013 22:50:25 +0000 (14:50 -0800)]
btrfs-progs: add send-test
send-test.c links against libbtrfs and uses the send functionality provided
to decode and print a send stream to the console.
Signed-off-by: Mark Fasheh <mfasheh@suse.de>
Signed-off-by: David Sterba <dsterba@suse.cz>
Mark Fasheh [Wed, 30 Jan 2013 22:50:23 +0000 (14:50 -0800)]
btrfs-progs: Add support for BTRFS_SEND_FLAG_NO_FILE_DATA
The flag and command are synced from kernel to user. Also, this patch adds a
callback for the BTRFS_SEND_C_UPDATE_EXTENT in struct btrfs_send_ops.
read_and_process_cmd() is updated to decode BTRFS_SEND_C_UPDATE_EXTENT and
send the values through the right callback. I did not add a callback
definition to cmds-receive.c as that code never uses
BTRFS_SEND_FLAG_NO_FILE_DATA.
Signed-off-by: Mark Fasheh <mfasheh@suse.de>
Ian Kumlien [Fri, 8 Feb 2013 00:37:02 +0000 (01:37 +0100)]
Btrfs-progs: add restore command to btrfs
Add 'btrfs restore' command which previously existed as a separate
utility btrfs-restore.
Signed-off-by: Ian Kumlien <pomac@demius.net>
Signed-off-by: David Sterba <dsterba@suse.cz>
Ian Kumlien [Fri, 8 Feb 2013 00:37:01 +0000 (01:37 +0100)]
Btrfs-progs: restore.c -> cmds-restore.c
The btrfs-restore functionality will be integrated in
btrs as "btrfs restore"
Signed-off-by: Ian Kumlien <pomac@demius.net>
David Sterba [Tue, 12 Feb 2013 16:39:44 +0000 (17:39 +0100)]
btrfs-progs: build btrsfck to keep compatibility
The command 'btrfsck' is commonly used and we should build it by
default.
Signed-off-by: David Sterba <dsterba@suse.cz>
Ilya Dryomov [Tue, 12 Feb 2013 19:24:50 +0000 (21:24 +0200)]
Btrfs-progs: add btrfsck name detection to btrfs
This patch adds a busybox-style name detection for the name "btrfsck" to
btrfs utility. The idea is to maintain backwards compatibility by
linking btrfsck to btrfs and have btrfs invoke the check sub-command
when called through the btrfsck link. This has been suggested on the
mailing list and approved by Dave and Chris.
Signed-off-by: Ilya Dryomov <idryomov@gmail.com>
Ilya Dryomov [Tue, 12 Feb 2013 19:24:50 +0000 (21:24 +0200)]
Btrfs-progs: move crc32c optimization init
Don't call crc32c_optimization_init() until we know that a command is
actually going to be invoked.
Signed-off-by: Ilya Dryomov <idryomov@gmail.com>
Ian Kumlien [Fri, 8 Feb 2013 00:36:58 +0000 (01:36 +0100)]
Btrfs-progs: add btrfsck functionality to btrfs
This patch includes the functionality of btrfs, it's
found as "btrfs check".
Signed-off-by: Ian Kumlien <pomac@demius.net>
Signed-off-by: David Sterba <dsterba@suse.cz>
Ian Kumlien [Fri, 8 Feb 2013 00:36:57 +0000 (01:36 +0100)]
Btrfs-progs: Rename btrfsck.c -> cmds-check.c
In preparation for merging btrfsck functionality in to btrfs.
Signed-off-by: Ian Kumlien <pomac@demius.net>
Ian Kumlien [Tue, 5 Feb 2013 22:04:22 +0000 (23:04 +0100)]
Btrfs-progs: -U_FORTIFY_SOURCE before -D
My builds are cluttered with:
<command-line>:0:0: warning: "_FORTIFY_SOURCE" redefined [enabled by
default]
Which makes it hard to tell if something breaks or not.
Signed-off-by: Ian Kumlien <pomac@demius.net>
Ian Kumlien [Fri, 25 Jan 2013 23:12:28 +0000 (00:12 +0100)]
Btrfs-progs: add static compile target
Sometimes, when you least expect it, a static binary is what you need to
rescue your data... Or just get a good enough handle on things to make
it work again ;)
"make static" is a gift to you, dear user with filesystem problems!
Anyway, on a more serious note, changed the cflags and ldflags so that
we create a smaller binary, 1.1MB stripped on my 64 bit system
(2.7MB with debug data)
Signed-off-by: Ian Kumlien <pomac@demius.net>
Wang Sheng-Hui [Thu, 16 Aug 2012 14:25:20 +0000 (22:25 +0800)]
btrfs-progs: code cleanup for root-tree.c/btrfs_del_root
Remove the redundant if check on the condition ret > 0.
Leave BUG_ON check here.
Signed-off-by: Wang Sheng-Hui <shhuiw@gmail.com>
Josef Bacik [Fri, 1 Feb 2013 20:21:04 +0000 (15:21 -0500)]
Btrfs-progs: return an error if we can't find an fs root
Instead of doing a BUG_ON() if we fail to find the last fs root just return
an error so the callers can deal with it how they like. Also we need to
actually return an error if we can't find the latest root so that the error
handling works. With this btrfsck was able to deal with a file system that
was missing a root item but still had extents that referred back to the
root. Thanks,
Signed-off-by: Josef Bacik <jbacik@fusionio.com>
Josef Bacik [Fri, 1 Feb 2013 20:18:24 +0000 (15:18 -0500)]
Btrfs-progs: fix double free of extent buffer
Noticed this while looking for an segfault related to our eb cache in
btrfsck. We free the eb in out: so we don't need this extra free. Thanks,
Signed-off-by: Josef Bacik <jbacik@fusionio.com>
Josef Bacik [Fri, 1 Feb 2013 20:17:07 +0000 (15:17 -0500)]
Btrfs-progs: handle errors reading fs roots
A user had a problem where btrfsck would bail out because it was finding
extents for a snapshot that had been deleted but not entirely cleaned up.
We can handle this case fine, we just need to report an error properly.
This patch allowed btrfsck to continue and eventually fix his file system.
Thanks,
Signed-off-by: Josef Bacik <jbacik@fusionio.com>
Eric Sandeen [Mon, 4 Feb 2013 17:26:23 +0000 (11:26 -0600)]
btrfs-progs: remove unused bit-radix.[ch] files
fd53de4d Drop bit-radix.[ch] files
removed the files from the Makefile, but not the files themselves.
Signed-off-by: Eric Sandeen <sandeen@redhat.com>
Eric Sandeen [Mon, 4 Feb 2013 15:57:57 +0000 (10:57 -0500)]
Btrfs-progs print more informative error when we fail to open a device
print more informative error when we fail to open a device
If open() fails, we should let the user know why it failed.
Signed-off-by: Eric Sandeen <sandeen@redhat.com>
Signed-off-by: Gene Czarcinski <gene@czarc.net>
Chris Mason [Wed, 6 Feb 2013 17:51:58 +0000 (12:51 -0500)]
Merge branch 'cov-fixes-v1-integration-
20130201' of git.zabbo.net/cgit/btrfs-progs into merged
Chris Mason [Wed, 6 Feb 2013 17:42:24 +0000 (12:42 -0500)]
Merge branch 'for-chris' of git://repo.or.cz/btrfs-progs-unstable/devel into raid56
Conflicts:
ctree.h
Signed-off-by: Chris Mason <chris.mason@fusionio.com>
Eric Sandeen [Wed, 30 Jan 2013 07:11:46 +0000 (01:11 -0600)]
btrfs-progs: initialize pipefd[] for error path
Several goto out; paths will end up doing i.e.
if (pipefd[0])
close(pipefd[0]);
but we get there with uninitialized values in many cases.
Signed-off-by: Eric Sandeen <sandeen@redhat.com>
Eric Sandeen [Fri, 25 Jan 2013 19:27:48 +0000 (13:27 -0600)]
btrfs-progs: fix overflows of ioctl name args
3 places where we copy pathnames into ioctl arguments
were not limited to the destination name size, and
could overflow. Use the new strncpy_null() macro
to make this safe.
Signed-off-by: Eric Sandeen <sandeen@redhat.com>
Eric Sandeen [Fri, 25 Jan 2013 19:27:47 +0000 (13:27 -0600)]
btrfs-progs: simplify ioctl name copy and null termination
In the places where we copy a string into the name
member of btrfs_ioctl_vol_args or btrfs_ioctl_vol_args_v2,
we use strncopy (to not overflow the name array) and then
set the last position to the null character.
Howver, in both cases the arrays are defined with:
char name[MAX+1];
hence the last array position is name[MAX].
In most cases, we now insert the null at name[MAX-1]
which deprives us of one useful character.
Even the above isn't consistent through the code, so
make some helper code to make it simple, i.e.
strncpy_null(dest, src) which automatically does the
right thing based on the size of dest.
Thanks to Zach Brown for the macro suggestion.
Signed-off-by: Eric Sandeen <sandeen@redhat.com>
Eric Sandeen [Fri, 25 Jan 2013 19:27:46 +0000 (13:27 -0600)]
btrfs-progs: fix name lengths in cmd_subvol_create
cmd_subvol_create() calls either BTRFS_IOC_SUBVOL_CREATE
or BTRFS_IOC_SUBVOL_CREATE_V2 depending on whether or
not inherit is set. However, these 2 ioctls have different
args structures with different length name[] members.
In the BTRFS_IOC_SUBVOL_CREATE case, the arg is
btrfs_ioctl_vol_args, with a BTRFS_PATH_NAME_MAX length
name, not a BTRFS_SUBVOL_NAME_MAX length name.
Signed-off-by: Eric Sandeen <sandeen@redhat.com>
Eric Sandeen [Fri, 25 Jan 2013 00:18:57 +0000 (18:18 -0600)]
btrfs-progs: remove duplicate __setup_root
__setup_root() was present in find-root.c as well
as disk-io.c. No need for the cut and paste, just
use the one in disk-io.c
Signed-off-by: Eric Sandeen <sandeen@redhat.com>
Signed-off-by: Zach Brown <zab@redhat.com>
Eric Sandeen [Fri, 25 Jan 2013 00:18:53 +0000 (18:18 -0600)]
btrfs-progs: fix mdresotre typo in function names
"mdresotre" sounds like it might be French, but most
likely it's a misspelling of mdrestore. Fix it.
Signed-off-by: Eric Sandeen <sandeen@redhat.com>
Signed-off-by: Zach Brown <zab@redhat.com>
Eric Sandeen [Fri, 25 Jan 2013 00:18:51 +0000 (18:18 -0600)]
btrfs-progs: zero out inspect ioctl args
Mostly just to keep things like coverity happy about potentially
uninitialized structure members, since it doesn't grok the ioctl.
Signed-off-by: Eric Sandeen <sandeen@redhat.com>
Signed-off-by: Zach Brown <zab@redhat.com>
Eric Sandeen [Fri, 25 Jan 2013 00:18:50 +0000 (18:18 -0600)]
btrfs-progs: don't use closed fd
In the case that btrfs scrub cancel is given a device name,
we close the file handle, and then pass it to check_mounted_where()
which eventually preads from that (now closed) fd. Fix the logic
so that we close & re-open the discovered mountpoint properly.
Signed-off-by: Eric Sandeen <sandeen@redhat.com>
Signed-off-by: Zach Brown <zab@redhat.com>
Eric Sandeen [Fri, 25 Jan 2013 00:18:49 +0000 (18:18 -0600)]
btrfs-progs: don't double-close prg_fd
If scrub start discovers that scrub is already running,
we need to set prg_fd to -1 before goto out, or we'll
try to close it again in the error path.
Signed-off-by: Eric Sandeen <sandeen@redhat.com>
Signed-off-by: Zach Brown <zab@redhat.com>
Zach Brown [Thu, 24 Jan 2013 18:53:49 +0000 (10:53 -0800)]
btrfs-progs: don't leak fds in logical resolve
Signed-off-by: Zach Brown <zab@redhat.com>
Zach Brown [Thu, 24 Jan 2013 18:45:00 +0000 (10:45 -0800)]
btrfs-progs: close fd in inode resolve
Signed-off-by: Zach Brown <zab@redhat.com>
Zach Brown [Thu, 24 Jan 2013 18:38:28 +0000 (10:38 -0800)]
btrfs-progs: don't leak multi-bio in find_root()
It wasn't freed if it didn't find metadata.
Signed-off-by: Zach Brown <zab@redhat.com>
Zach Brown [Wed, 23 Jan 2013 23:18:14 +0000 (15:18 -0800)]
btrfs-progs: don't leak inherit on errors
A few paths returned errors before freeing their inherit allocation.
Signed-off-by: Zach Brown <zab@redhat.com>
Zach Brown [Wed, 23 Jan 2013 23:15:09 +0000 (15:15 -0800)]
btrfs-progs: close ioctl fd in find new
Signed-off-by: Zach Brown <zab@redhat.com>
Zach Brown [Wed, 23 Jan 2013 23:11:24 +0000 (15:11 -0800)]
btrfs-progs: don't leak fd in resize
Argument validation failed to close the fd that was opened. So check
the arguments before opening anything.
Signed-off-by: Zach Brown <zab@redhat.com>
Zach Brown [Wed, 23 Jan 2013 23:07:18 +0000 (15:07 -0800)]
btrfs-progs: free path before returning
One of the return statements in search_dir() didn't free everything it
was supposed to.
Signed-off-by: Zach Brown <zab@redhat.com>
Zach Brown [Wed, 23 Jan 2013 23:00:46 +0000 (15:00 -0800)]
btrfs-progs: close fd in qgroup show
It wasn't closed in the error path.
Signed-off-by: Zach Brown <zab@redhat.com>
Zach Brown [Wed, 23 Jan 2013 22:55:31 +0000 (14:55 -0800)]
btrfs-progs: free bits in check_extents()
As far as I can tell, nothing took the address of this.
Signed-off-by: Zach Brown <zab@redhat.com>
Zach Brown [Wed, 23 Jan 2013 22:54:35 +0000 (14:54 -0800)]
btrfs-progs: remove unused arguments
add_root_to_pending() took a bunch of arguments that it never used.
Signed-off-by: Zach Brown <zab@redhat.com>
Zach Brown [Wed, 23 Jan 2013 22:41:03 +0000 (14:41 -0800)]
btrfs-progs: scrub can leak fd 0
< 0 is returned for errors opening the file, this code could leak fd 0.
Signed-off-by: Zach Brown <zab@redhat.com>
Zach Brown [Wed, 23 Jan 2013 22:36:03 +0000 (14:36 -0800)]
btrfs-progs: fix scrub socket leak
If connection fails the socket is leaked when the status file is used
instead. Close it to trivially cut down on fd use and to bring down the
noise in static code analysis.
Signed-off-by: Zach Brown <zab@redhat.com>
Zach Brown [Wed, 23 Jan 2013 20:18:32 +0000 (12:18 -0800)]
btrfs-progs: don't leak in set_extent_bits
It looks possible to hit the search_again label without using the
prealloc. A new prealloc is allocated, leaking the current one.
Every use of prealloc sets it to null so let's just allocate a new
prealloc when we don't already have one.
Signed-off-by: Zach Brown <zab@redhat.com>
Zach Brown [Wed, 23 Jan 2013 19:31:24 +0000 (11:31 -0800)]
btrfs-progs: fix overflow in btrfs_scan_one_dir()
btrfs_scan_one_dir() can overflow an arbitrarily small 256 byte buffer
with an arbitrarily slightly larger 1024 byte buffer as it remembers the
path of a dir to later descend.
Make these buffers the same size to stop the overflow and chose PATH_MAX
for that size so that it won't fail on legitimately bonkers paths.
Signed-off-by: Zach Brown <zab@redhat.com>
Zach Brown [Tue, 22 Jan 2013 23:52:17 +0000 (15:52 -0800)]
btrfs-progs: free path on read_chunk_tree error
Path allocation failure already has its own return, remember to free the
path when the error label is taken.
Signed-off-by: Zach Brown <zab@redhat.com>
Zach Brown [Tue, 22 Jan 2013 23:11:55 +0000 (15:11 -0800)]
btrfs-progs: array indexes must be < ARRAY_SIZE()
It looks like the usual kernel idiom of "< ARRAY_SIZE()" was
accidentally negated as ">" instead of ">=".
Signed-off-by: Zach Brown <zab@redhat.com>
Zach Brown [Tue, 22 Jan 2013 23:03:46 +0000 (15:03 -0800)]
btrfs-progs: don't write memory after sb to disk
struct btrfs_super is about 3.5k but a few writing paths were writing it
out as the full 4k BTRFS_SUPER_INFO_SIZE, leaking a few hundred bytes
after the super_block onto disk. In practice this meant the memory
after super_copy in struct btrfs_fs_info and whatever came after it in
the heap.
Signed-off-by: Zach Brown <zab@redhat.com>
Zach Brown [Tue, 22 Jan 2013 21:58:20 +0000 (13:58 -0800)]
btrfs-progs: impossible BUG_ON meant to test empty
old_left_nritems is unsigned so BUG_ON(old_left_nritems < 0) is
impossible. Presumably the BUG_ON() meant to test that it wasn't 0 so
that btrfs_item_offset_nr() doesn't get a nr of -1.
Signed-off-by: Zach Brown <zab@redhat.com>
Zach Brown [Tue, 22 Jan 2013 21:48:04 +0000 (13:48 -0800)]
btrfs-progs: check for open failure, don't close
Check for failure by testing for a negative file descriptor, not a
descriptor of 0. And if it failed we have nothing to close().
Signed-off-by: Zach Brown <zab@redhat.com>
Zach Brown [Tue, 22 Jan 2013 21:42:16 +0000 (13:42 -0800)]
btrfs-progs: don't close(<0) in subvol create
Don't try to close an fd immediately after discovering that opening it
failed.
Signed-off-by: Zach Brown <zab@redhat.com>
Zach Brown [Tue, 22 Jan 2013 21:36:47 +0000 (13:36 -0800)]
btrfs-progs: don't return -EBUSY from main()
-EBUSY is platform dependent and is even less reliable when truncated to
a u8. Just return 1 on error.
Signed-off-by: Zach Brown <zab@redhat.com>
Zach Brown [Tue, 22 Jan 2013 01:11:28 +0000 (17:11 -0800)]
btrfs-progs: don't close(-1)
When opening the fd fails just return instead of taking the shared error
path that tries to close() the fd.
Signed-off-by: Zach Brown <zab@redhat.com>
Zach Brown [Tue, 22 Jan 2013 00:52:15 +0000 (16:52 -0800)]
btrfs-progs: break after printing FREE_INO
The free inode objectid would be printed as "FREE_INOQUOTA_TREE" because
of a missing break.
Signed-off-by: Zach Brown <zab@redhat.com>
Zach Brown [Tue, 22 Jan 2013 00:34:03 +0000 (16:34 -0800)]
btrfs-progs: don't free null path
btrfs_free_path() derefs the path before freeing it. It can't be passed
a null pointer when allocation fails.
Signed-off-by: Zach Brown <zab@redhat.com>
Zach Brown [Tue, 22 Jan 2013 00:25:51 +0000 (16:25 -0800)]
btrfs-progs: remove dead code that checks null eb
'next' can never be non-null in the body of these loops. It's
initialized to NULL and the loop is terminated the moment it is set.
Signed-off-by: Zach Brown <zab@redhat.com>
Zach Brown [Fri, 18 Jan 2013 00:36:48 +0000 (16:36 -0800)]
btrfs-progs: fix copy-n-paste error checking
copy_one_inline() meant to test the return of pwrite() with ram_size.
Presumably the comparison with len was copied from the test earlier in
the function.
Signed-off-by: Zach Brown <zab@redhat.com>
Zach Brown [Fri, 18 Jan 2013 00:32:41 +0000 (16:32 -0800)]
btrfs-progs: remove unused info_fd
finish_subvol() initializes and tests info_fd but it is never used.
Signed-off-by: Zach Brown <zab@redhat.com>
Zach Brown [Thu, 17 Jan 2013 23:23:10 +0000 (15:23 -0800)]
btrfs-progs: use ftw() unstead of system("du")
size_sourcedir() uses shockingly bad code to try and estimate the size
of the files and directories in a subtree.
- Its use of snprintf(), strcat(), and sscanf() with arbitrarily small
on-stack buffers manages to overflow the stack a few times when given
long file names.
$ BIG=$(perl -e 'print "a" x 200')
$ mkdir -p /tmp/$BIG/$BIG/$BIG/$BIG/$BIG
$ mkfs.btrfs /tmp/img -r /tmp/$BIG/$BIG/$BIG/$BIG/$BIG
*** stack smashing detected ***: mkfs.btrfs terminated
- It passes raw paths to system() allowing interpreting file names as
shell control characters.
$ mkfs.btrfs /tmp/img -r /tmp/spacey\ dir/
du: cannot access `/tmp/spacey': No such file or directory
du: cannot access `dir/': No such file or directory
- It redirects du output to "temp_file" in the current directory,
allowing overwriting of files through symlinks.
$ echo hi > target
$ ln -s target temp_file
$ mkfs.btrfs /tmp/img -r /tmp/somedir/
$ cat target
3 /tmp/somedir/
This fixes the worst problems while maintaining -r functionality by
tearing out the system() code and using ftw() to walk the source tree
and sum up st.st_size.
Signed-off-by: Zach Brown <zab@redhat.com>
Zach Brown [Thu, 17 Jan 2013 21:24:35 +0000 (13:24 -0800)]
btrfs-progs: more carefully check eb backrefs
check_owner_ref() could deref a null path node if btrfs_search_slot()
fails or simply doesn't find a tree tall enough to get to the parent of
the desired block.
This was flagged by static analysis warning that btrfs_search_slot()'s
return value wasn't being checked.
Signed-off-by: Zach Brown <zab@redhat.com>
Again: caught by static analysis.
Zach Brown [Thu, 17 Jan 2013 20:06:29 +0000 (12:06 -0800)]
btrfs-progs: return error from commit_tree_roots()
Errors cow-ing the root block are silently being dropped. This is
just a step towards error handling because both the caller and calee
assert on errors.
Signed-off-by: Zach Brown <zab@redhat.com>
Zach Brown [Thu, 17 Jan 2013 19:54:47 +0000 (11:54 -0800)]
btrfs-progs: treat super.magic as an le64
The super block magic is a le64 whose value looks like an unterminated
string in memory. The lack of null termination leads to clumsy use of
string functions and causes static analysis tools to warn that the
string will be unterminated.
So let's just treat it as the le64 that it is. Endian wrappers are used
on the constant so that they're compiled into run-time constants.
Signed-off-by: Zach Brown <zab@redhat.com>
Eric Sandeen [Sun, 3 Feb 2013 17:34:27 +0000 (10:34 -0700)]
btrfs-progs: include kerncompat.h in raid6.c, define __attribute_const__
raid6.c was failing to build for Goffredo and me due to
__attribute_const__ being undefined.
Define it in kerncompat.h and include that; this also makes
sure BITS_PER_LONG is defined for raid6.c, prior to this it
was not defined, at least in my build.
Finally, redefine BITS_PER_LONG in a way that it can be
tested in the preprocessor macro.
Signed-off-by: Eric Sandeen <sandeen@redhat.com>
Signed-off-by: Chris Mason <chris.mason@fusionio.com>
David Woodhouse [Sat, 11 Jul 2009 17:12:37 +0000 (18:12 +0100)]
Add basic RAID[56] support
David Woodhouse originally contributed this code, and Chris Mason
changed it around to reflect the current design goals for raid56.
The original code expected all metadata and data writes to be full
stripes. This meant metadata block size == stripe size, and had a few
other restrictions.
This version allows metadata blocks smaller than the stripe size. It
implements both raid5 and raid6, although it does not have code to
rebuild from parity if one of the drives is missing or incorrect.
Signed-off-by: David Woodhouse <David.Woodhouse@intel.com>
Signed-off-by: Chris Mason <chris.mason@fusionio.com>
Josef Bacik [Fri, 1 Feb 2013 17:00:32 +0000 (12:00 -0500)]
Btrfs-progs: use btrfs_lookup_first_block_group when fixing accounting
This was a bug from long time ago that never actually got fixed. We start
with bytenr 0 when looping through all of the block groups, but
btrfs_lookup_block_group will bail out since it couldn't find a block group
with 0 as the bytenr. Btrfs_lookup_first_block_group will be nice and
adjust the start up to the right value, so this way we reset all the block
groups properly and not screw up the users block group accounting. Thanks,
Signed-off-by: Josef Bacik <jbacik@fusionio.com>
Anand Jain [Thu, 25 Oct 2012 08:00:31 +0000 (16:00 +0800)]
Btrfs-progs: dont print uuid unless -u option is given
unless it was intentional to include uuid when -s
option is (show snapshot only) given, we would need
this break statement.
Signed-off-by: Anand Jain <anand.jain@oracle.com>
Dieter Ries [Sun, 14 Oct 2012 15:17:19 +0000 (17:17 +0200)]
btrfs-progs: btrfsck: Print which filesystem to be checked to stdout
This patch makes btrfsck print the filesystem, which is to be checked,
to stdout, as well as the UUID of the corresponding partition.
This should be helpful when analyzing (copied and pasted) output of
btrfsck.
Signed-off-by: Dieter Ries <mail@dieterries.net>
David Sterba [Fri, 1 Feb 2013 16:37:29 +0000 (17:37 +0100)]
btrfs-progs: update man pages of subvol list
- rename to match code where applicable
- add missing options
- unify the help strings in short and detailed sections
- fix a few typos
Signed-off-by: David Sterba <dsterba@suse.cz>
David Sterba [Fri, 1 Feb 2013 16:19:49 +0000 (17:19 +0100)]
btrfs-progs: add option c to show ogeneration
This will also pair the 'C' filter.
Signed-off-by: David Sterba <dsterba@suse.cz>
David Sterba [Tue, 9 Oct 2012 16:27:53 +0000 (18:27 +0200)]
btrfs-progs: add option g to show generation
Add 'g' to pair the 'G' filter.
Signed-off-by: David Sterba <dsterba@suse.cz>
David Sterba [Tue, 9 Oct 2012 16:27:52 +0000 (18:27 +0200)]
btrfs-progs: upcase filter options
Rename filter options in 'subvol list' subcommand, that way we can
distinguish them from the options that just show some option in the
output and can have a matching uppercase filter.
Signed-off-by: David Sterba <dsterba@suse.cz>
Anand Jain [Fri, 1 Feb 2013 07:56:32 +0000 (15:56 +0800)]
Btrfs-progs: add subvol flags to print
This patch adds the flags row which as of now will show if the
subvol/snapshot is readonly.
Signed-off-by: Anand Jain <anand.jain@oracle.com>
Anand Jain [Fri, 1 Feb 2013 07:56:31 +0000 (15:56 +0800)]
Btrfs-progs: Fix a small memory leak in managing the btrfs list filter
Signed-off-by: Anand Jain <anand.jain@oracle.com>
Anand Jain [Fri, 1 Feb 2013 07:56:30 +0000 (15:56 +0800)]
Btrfs-progs: update btrfs_get_subvol to be inline with resolve_root ret changes
Signed-off-by: Anand Jain <anand.jain@oracle.com>
Wang Shilong [Fri, 1 Feb 2013 07:56:29 +0000 (15:56 +0800)]
Btrfs-progs: filter the deleted subvolumes when listing snapshots
btrfs snapshot list command will stop by the deleted subvolumes.
The problem may happen by two ways:
1. a subvolume deletion is not commited, that is ROOT_BACKREF has been deleted,
but ROOT_ITEM still exists. The command will fail to fill the path of
the deleted subvolumes because we can not get the parent fs/file tree.
2. a subvolume is possibly deleted when we fill the path, For example,
Fs tree
|->subv0
|->subv1
We may fill the path of subv1 firstly, after that, some user deletes subv1
and subv0, and then we fill the path of subv0. The command will fail to
fill the path of subv0 because we can not get path of subv0. And the command
also will fail to make the full path of subv1 because we don't have the path
of subv0.
Since these subvolumes have been deleted, we should filter them. This patch
fixed the above problem by this way.
For the 1st case, ->ref_tree of the deleted subvolumes are 0.
For the 2nd case, if we found the error number that ioctl() returns is ENOENT,
we will set ->ref_tree to 0.
And when we make the full path of the subvolumes, we will check ->ref_tree of
them and their parent. If someone's ->ref_tree or its parent's ->ref_tree is 0,
we will filter it.
Reported-by: Stefan Priebe <s.priebe@profihost.ag>
Signed-off-by: Wang Shilong <wangsl-fnst@cn.fujitsu.com>
Signed-off-by: Anand Jain <anand.jain@oracle.com>
Anand Jain [Fri, 1 Feb 2013 07:56:28 +0000 (15:56 +0800)]
Btrfs-progs: add show subcommand to subvol cli
This adds show sub-command to the btrfs subvol cli
to display detailed inforamtion of the given subvol
or snapshot.
Signed-off-by: Anand Jain <anand.jain@oracle.com>
Anand Jain [Fri, 1 Feb 2013 07:56:27 +0000 (15:56 +0800)]
Btrfs-progs: make get_subvol_name non cmds-send specific
get_subvol_name can be used other than the just with in cmds-send.c
so this patch will make it possible with out changing the original
intentions.
Signed-off-by: Anand Jain <anand.jain@oracle.com>