platform/upstream/btrfs-progs.git
10 years agov3.14.1
Chris Mason [Fri, 18 Apr 2014 17:46:31 +0000 (10:46 -0700)]
v3.14.1

Signed-off-by: Chris Mason <clm@fb.com>
10 years agobtrfs-progs: correct prompt of minimal num of devs for raid56
Gui Hecheng [Thu, 10 Apr 2014 03:55:36 +0000 (11:55 +0800)]
btrfs-progs: correct prompt of minimal num of devs for raid56

For btrfs,
Raid5 can't go below 2 devs, not 3;
Raid6 can't go below 3 devs, not 4.

Signed-off-by: Gui Hecheng <guihc.fnst@cn.fujitsu.com>
Signed-off-by: David Sterba <dsterba@suse.cz>
10 years agoBtrfs-progs: update btrfs_file_extent_inline_len to match kernel version
Filipe David Borba Manana [Tue, 8 Apr 2014 17:25:43 +0000 (18:25 +0100)]
Btrfs-progs: update btrfs_file_extent_inline_len to match kernel version

The following kernel commit changed the definition of the inline function
btrfs_file_extent_inline_len():

    commit 514ac8ad8793a097c0c9d89202c642479d6dfa34
    Author: Chris Mason <clm@fb.com>
    Date:   Fri Jan 3 21:07:00 2014 -0800

    Btrfs: don't use ram_bytes for uncompressed inline items

    If we truncate an uncompressed inline item, ram_bytes isn't updated to reflect
    the new size.  The fixe uses the size directly from the item header when
    reading uncompressed inlines, and also fixes truncate to update the
    size as it goes.

Not having this new definition implies that the restore tool might misbehave when
restoring files with an inline extent that got truncated on a kernel older than
release 3.14.

Signed-off-by: Filipe David Borba Manana <fdmanana@gmail.com>
Signed-off-by: David Sterba <dsterba@suse.cz>
10 years agoBtrfs-progs: restore, for compressed extents don't read more bytes than needed
Filipe David Borba Manana [Tue, 8 Apr 2014 16:37:22 +0000 (17:37 +0100)]
Btrfs-progs: restore, for compressed extents don't read more bytes than needed

We need to read a number of bytes corresponding to the disk size of the file extent
item, and not to the number of bytes in the num_bytes field. Normally disk_size is
smaller than num_bytes (when using compression), except for files created with lzo
compression in a kernel older then the one which introduced the following change:

commit 59516f6017c589e7316418fda6128ba8f829a77f
Author: Stefan Agner <stefan@agner.ch>
Date:   Mon Jul 1 20:33:39 2013 +0200

    Btrfs: return -1 when lzo compression makes data bigger

    With this fix the lzo code behaves like the zlib code by returning an
    error
    code when compression does not help reduce the size of the file.
    This is currently not a bug since the compressed size is checked again
    in
    the calling method compress_file_range.

Signed-off-by: Filipe David Borba Manana <fdmanana@gmail.com>
Signed-off-by: David Sterba <dsterba@suse.cz>
10 years agobtrfs-progs: Make property work with -t option
Kusanagi Kouichi [Tue, 8 Apr 2014 13:38:02 +0000 (22:38 +0900)]
btrfs-progs: Make property work with -t option

# btrfs prop list -t f .
btrfs property list: too many arguments
...
# btrfs prop get -t f . label
btrfs property get: too many arguments
...
# btrfs prop set -t f . label abc
btrfs property set: too many arguments
...

Signed-off-by: Kusanagi Kouichi <slash@ac.auone-net.jp>
Signed-off-by: David Sterba <dsterba@suse.cz>
10 years agobtrfs-progs: Constify getters
Kusanagi Kouichi [Tue, 8 Apr 2014 13:37:39 +0000 (22:37 +0900)]
btrfs-progs: Constify getters

Signed-off-by: Kusanagi Kouichi <slash@ac.auone-net.jp>
Signed-off-by: David Sterba <dsterba@suse.cz>
10 years agoBtrfs-progs: btrfs: remove dead code in handle_options
Rakesh Pandit [Thu, 20 Mar 2014 09:43:35 +0000 (11:43 +0200)]
Btrfs-progs: btrfs: remove dead code in handle_options

Just cleanup: remove useless return type, while loop and dead code.

Signed-off-by: Rakesh Pandit <rakesh@tuxera.com>
Signed-off-by: David Sterba <dsterba@suse.cz>
10 years agobtrfs-progs: Modify the help string to keep consistent with man page.
Qu Wenruo [Wed, 19 Mar 2014 06:10:02 +0000 (06:10 +0000)]
btrfs-progs: Modify the help string to keep consistent with man page.

Help string of "btrfs dev scan" is inconsistent with man page,
which lacks the fact that -d|--all-device is conflict with <device>.
This patch fixes the description

Signed-off-by: Qu Wenruo <quwenruo@cn.fujitsu.com>
Signed-off-by: David Sterba <dsterba@suse.cz>
10 years agoBtrfs-progs: fsck: fix wrong index in pick_next_pending()
Wang Shilong [Tue, 18 Mar 2014 12:02:47 +0000 (20:02 +0800)]
Btrfs-progs: fsck: fix wrong index in pick_next_pending()

Though all tree blocks have same size, we'd better use right
index here.

Signed-off-by: Wang Shilong <wangsl.fnst@cn.fujitsu.com>
Signed-off-by: David Sterba <dsterba@suse.cz>
10 years agoBtrfs-progs: fsck: reduce memory usage of extent record struct
Wang Shilong [Tue, 18 Mar 2014 12:02:46 +0000 (20:02 +0800)]
Btrfs-progs: fsck: reduce memory usage of extent record struct

Two changes:
1.use bit filed for @found_rec
2.u32 is enough to calculate duplicate extent number.

Signed-off-by: Wang Shilong <wangsl.fnst@cn.fujitsu.com>
Signed-off-by: David Sterba <dsterba@suse.cz>
10 years agoBtrfs-progs: fsck: fix possible memory leaks in run_next_block()
Wang Shilong [Tue, 18 Mar 2014 12:02:43 +0000 (20:02 +0800)]
Btrfs-progs: fsck: fix possible memory leaks in run_next_block()

We still need free allocated cache memory in case error happens.

Signed-off-by: Wang Shilong <wangsl.fnst@cn.fujitsu.com>
Signed-off-by: David Sterba <dsterba@suse.cz>
10 years agoBtrfs-progs: fsck: don't free @seen cache until we finish searching
Wang Shilong [Tue, 18 Mar 2014 12:02:42 +0000 (20:02 +0800)]
Btrfs-progs: fsck: don't free @seen cache until we finish searching

@seen cache is used to avoid iterating same block more than once, and
we can not free them until we have finished searching.

Signed-off-by: Wang Shilong <wangsl.fnst@cn.fujitsu.com>
Signed-off-by: David Sterba <dsterba@suse.cz>
10 years agobtrfs-progs v3.14
Chris Mason [Sun, 6 Apr 2014 23:33:55 +0000 (19:33 -0400)]
btrfs-progs v3.14

Signed-off-by: Chris Mason <clm@fb.com>
10 years agobtrfs-progs: fix listing deleted subvolumes
David Sterba [Fri, 28 Mar 2014 12:39:57 +0000 (13:39 +0100)]
btrfs-progs: fix listing deleted subvolumes

The real check whether to show deleted or live subvolumes was skipped if
just '-d' was specified without other filters. The 'deleted' filter was
not accounted.

It is now handled as a normal filter, that additionally sets the only_delete
global status in order to be processed before any other filters in
filter_root().

Signed-off-by: David Sterba <dsterba@suse.cz>
Signed-off-by: Chris Mason <clm@fb.com>
10 years agobtrfs-progs: make device discard process interruptible
David Sterba [Thu, 27 Mar 2014 15:19:37 +0000 (16:19 +0100)]
btrfs-progs: make device discard process interruptible

The ioctl for the whole range is not interruptible, which can be
annoying when the discard is not wanted but user forgets to use the -K
option.

Signed-off-by: David Sterba <dsterba@suse.cz>
Signed-off-by: Chris Mason <clm@fb.com>
10 years agobtrfs-progs: avoid implicit scan for backup SB
Anand Jain [Mon, 17 Mar 2014 11:59:01 +0000 (19:59 +0800)]
btrfs-progs: avoid implicit scan for backup SB

When a disk containing btrfs is overwritten with other FS, ext4
for example it doesn't overwrite 2nd and 3rd copy of the btrfs SB.
And btrfs_read_dev_super() would look for backup SB when primary
SB isn't found. This causes the problem as in the reproducer below.

In kernel we avoid this by _not_ reading backup SB implicitly,
this patch would port the same to btrfs-progs.

reproducer:
mkfs.btrfs /dev/sde
mkfs.ext4 /dev/sde
mount /dev/sde /ext4
btrfs-convert /dev/sde (is successful (bug))

with this patch
::
btrfs-convert /dev/sde
/dev/sde is mounted

Signed-off-by: Anand Jain <Anand.Jain@oracle.com>
Signed-off-by: Chris Mason <clm@fb.com>
10 years agoBtrfs-progs: fsck: fix memory leak and unnecessary call to free
Rakesh Pandit [Sat, 15 Mar 2014 12:22:37 +0000 (14:22 +0200)]
Btrfs-progs: fsck: fix memory leak and unnecessary call to free

Free already allocated memory to item1_data if malloc fails for
item2_data in swap_values. Seems to be a typo from commit 70749a77.

Signed-off-by: Rakesh Pandit <rakesh@tuxera.com>
Signed-off-by: David Sterba <dsterba@suse.cz>
Signed-off-by: Chris Mason <clm@fb.com>
10 years agoBtrfs-progs: return with -ENOMEM if malloc fails
Rakesh Pandit [Sat, 15 Mar 2014 11:46:15 +0000 (13:46 +0200)]
Btrfs-progs: return with -ENOMEM if malloc fails

Prevent segfault if memory allocation fails for sargs in get_df
(cmds-filesystem.c).

Signed-off-by: Rakesh Pandit <rakesh@tuxera.com>
Signed-off-by: David Sterba <dsterba@suse.cz>
Signed-off-by: Chris Mason <clm@fb.com>
10 years agoBtrfs-progs: scrub: don't call unlock if pthread_mutex_lock fails
Rakesh Pandit [Fri, 14 Mar 2014 23:49:45 +0000 (01:49 +0200)]
Btrfs-progs: scrub: don't call unlock if pthread_mutex_lock fails

If pthread_mutex_lock fails (rare but fix it anyway), don't call
pthread_mutex_unlock on mutex.

Rationale being that if pthread_mutex_lock fails pthread_mutex_unlock
will always fail and overwrite actual error value in err.

Signed-off-by: Rakesh Pandit <rakesh@tuxera.com>
Signed-off-by: David Sterba <dsterba@suse.cz>
Signed-off-by: Chris Mason <clm@fb.com>
10 years agobtrfs-progs: Fix a memleak in btrfs_scan_lblkid().
Qu Wenruo [Fri, 14 Mar 2014 03:28:11 +0000 (03:28 +0000)]
btrfs-progs: Fix a memleak in btrfs_scan_lblkid().

In btrfs_scan_lblkid(), blkid_get_cache() is called but cache not freed.
This patch adds blkid_put_cache() to free it.

Signed-off-by: Qu Wenruo <quwenruo@cn.fujitsu.com>
Signed-off-by: David Sterba <dsterba@suse.cz>
Signed-off-by: Chris Mason <clm@fb.com>
10 years agobtrfs-progs: Fix a memleak in btrfs_scan_one_device.
Qu Wenruo [Fri, 14 Mar 2014 03:28:11 +0000 (03:28 +0000)]
btrfs-progs: Fix a memleak in btrfs_scan_one_device.

Valgrind reports memleak in btrfs_scan_one_device() about allocating
btrfs_device but on btrfs_close_devices() they are not reclaimed.

Although not a bug since after btrfs_close_devices() btrfs will exit so
memory will be reclaimed by system anyway, it's better to fix it anyway.

Signed-off-by: Qu Wenruo <quwenruo@cn.fujitsu.com>
Signed-off-by: David Sterba <dsterba@suse.cz>
Signed-off-by: Chris Mason <clm@fb.com>
10 years agobtrfs-progs: skip erroneous free before initialization
Gui Hecheng [Thu, 13 Mar 2014 05:01:31 +0000 (13:01 +0800)]
btrfs-progs: skip erroneous free before initialization

If the list is not initialized, don't try to free it.
Otherwise it will cause segmentfault.

Signed-off-by: Gui Hecheng <guihc.fnst@cn.fujitsu.com>
Signed-off-by: David Sterba <dsterba@suse.cz>
Signed-off-by: Chris Mason <clm@fb.com>
10 years agobtrfs-progs: fix bug on mkfs with relative path specified
Gui Hecheng [Thu, 13 Mar 2014 05:01:30 +0000 (13:01 +0800)]
btrfs-progs: fix bug on mkfs with relative path specified

The bug accurs when exec:
# mkfs.btrfs -r <a relative path> <device>
(note: the path should be 'valid' correspond to your `pwd`)
error msg:
$ scandir for <a relative path> failed: No such file...

o Replace strdup() with realpath() to get the correct scan path.
o fix memory leaks and adopt the "single return + goto out" pattern

Reported-by: Saul Wold <sgw@linux.intel.com>
Signed-off-by: Gui Hecheng <guihc.fnst@cn.fujitsu.com>
Signed-off-by: David Sterba <dsterba@suse.cz>
Signed-off-by: Chris Mason <clm@fb.com>
10 years agoBtrfs-progs: mkfs: make sure we can deal with hard links with -r option
Wang Shilong [Tue, 11 Mar 2014 10:29:09 +0000 (18:29 +0800)]
Btrfs-progs: mkfs: make sure we can deal with hard links with -r option

Steps to reproduce:
 # mkdir -p /tmp/test
 # touch /tmp/test/file
 # ln /tmp/test/file /tmp/test/hardlinks
 # mkfs.btrfs -f /dev/sda13 -r /tmp/test
 # btrfs check /dev/sda13

To deal with hard link, we must deal with inode with same inode id rather
than increase inode id by ourselves.

Signed-off-by: Wang Shilong <wangsl.fnst@cn.fujitsu.com>
Signed-off-by: David Sterba <dsterba@suse.cz>
Signed-off-by: Chris Mason <clm@fb.com>
10 years agoBtrfs-progs: mkfs: don't create extent for an empty file
Wang Shilong [Tue, 11 Mar 2014 10:29:08 +0000 (18:29 +0800)]
Btrfs-progs: mkfs: don't create extent for an empty file

Steps to reproduce:
 # mkdir -p /tmp/test
 # touch /tmp/test/file
 # mkfs.btrfs -f /dev/sda13 -r /tmp/test
 # btrfs check /dev/sda13

For an empty file, don't create extent data for it.

Signed-off-by: Wang Shilong <wangsl.fnst@cn.fujitsu.com>
Signed-off-by: David Sterba <dsterba@suse.cz>
Signed-off-by: Chris Mason <clm@fb.com>
10 years agobtrfs-progs: fix uninit variable in btrfs_scan_kernel
Chris Mason [Fri, 21 Mar 2014 13:36:08 +0000 (06:36 -0700)]
btrfs-progs: fix uninit variable in btrfs_scan_kernel

Signed-off-by: Chris Mason <clm@fb.com>
10 years agoBtrfs-progs: fsck: handle case that we can not lookup extent info
Wang Shilong [Thu, 6 Mar 2014 05:54:00 +0000 (13:54 +0800)]
Btrfs-progs: fsck: handle case that we can not lookup extent info

Previously, --init-extent-tree works just because btrfs_lookup_extent_info()
blindly return 0, and this make it work if there are not any *FULL BACKREF*
mode in broken filesystem.

It is just a coincidence that --init-extent-tree option works, let's
do it in the right way firstly.

For now, we have not supported to rebuild extent tree if there are
any *FULL BACKREF* mode which means if there are snapshots with broken
filesystem, avoid using --init-extent-tree option now.

Signed-off-by: Wang Shilong <wangsl.fnst@cn.fujitsu.com>
Signed-off-by: David Sterba <dsterba@suse.cz>
Signed-off-by: Chris Mason <clm@fb.com>
10 years agoBtrfs-progs: fsck: force to udate tree root for some cases
Wang Shilong [Thu, 6 Mar 2014 05:53:59 +0000 (13:53 +0800)]
Btrfs-progs: fsck: force to udate tree root for some cases

commit roots won't update root item in tree root if it finds
updated root's bytenr is same as before.

However, this is not right for fsck, we need update tree root in
the following case:

1.overwrite previous root node.

2.reinit reloc data tree, this is because we skip pin relo data
 tree before which means we can allocate same block as before.

Fix this by updating tree root ourselves for the above cases.

Signed-off-by: Wang Shilong <wangsl.fnst@cn.fujitsu.com>
Signed-off-by: David Sterba <dsterba@suse.cz>
Signed-off-by: Chris Mason <clm@fb.com>
10 years agoBtrfs-progs: fsck: insert root dir into reloc data tree when reiniting it
Wang Shilong [Thu, 6 Mar 2014 05:53:58 +0000 (13:53 +0800)]
Btrfs-progs: fsck: insert root dir into reloc data tree when reiniting it

There are two bugs when resetting balance:

 1.we will skip reinitting reloc data tree if no reloc root found, however
  this is not right because we don't pin reloc data tree before.

 2.we should insert root dir into reloc data tree,otherwise we will fail
  to fsck.

Fix problems by forcely reiniting reloc data root and inserting root dir.

Signed-off-by: Wang Shilong <wangsl.fnst@cn.fujitsu.com>
Signed-off-by: David Sterba <dsterba@suse.cz>
Signed-off-by: Chris Mason <clm@fb.com>
10 years agoBtrfs-progs: fsck: reset balance after reiniting extent root
Wang Shilong [Thu, 6 Mar 2014 05:53:57 +0000 (13:53 +0800)]
Btrfs-progs: fsck: reset balance after reiniting extent root

reset balance need cow block which will insert extent item into
extent tree. If we do this before reinitting extent root, we may
encounter EEIXST.

Signed-off-by: Wang Shilong <wangsl.fnst@cn.fujitsu.com>
Signed-off-by: David Sterba <dsterba@suse.cz>
Signed-off-by: Chris Mason <clm@fb.com>
10 years agoBtrfs-progs: fsck: deal with really corrupted extent tree
Wang Shilong [Thu, 6 Mar 2014 05:53:56 +0000 (13:53 +0800)]
Btrfs-progs: fsck: deal with really corrupted extent tree

To reinit extent root, we need find a free extent, however,
we may have a really corrupted extent tree, so we can't rely
on existed extent tree to cache block group any more.

During test, we fail to reinit extent tree which is because we
can not find a free extent so let's make block group cache ourselves
firstly.

Signed-off-by: Wang Shilong <wangsl.fnst@cn.fujitsu.com>
Signed-off-by: David Sterba <dsterba@suse.cz>
Signed-off-by: Chris Mason <clm@fb.com>
10 years agoBtrfs-progs: remove unused variable and update btrfs-image man page
Rakesh Pandit [Wed, 5 Mar 2014 00:12:23 +0000 (02:12 +0200)]
Btrfs-progs: remove unused variable and update btrfs-image man page

Remove unused variable in btrfs-image.c (update_super) and update man
page documentation about -r option. Running btrfsck on a restored
image produces missing chunk information. This is because by default,
btrfs-image fixes up chunk tree to use 1 stripe pointing to the
primary device. This in turns results in btrfsck making some noise.

$  ./mkfs.btrfs /dev/sdb2 -f
$  ./btrfs-image /dev/sdb2 btrfs_image_output
$  ./btrfs-image -r btrfs_image_output disk-image
$  ./btrfsck disk-image

Device extent[1, 29360128, 8388608] didn't find the relative chunk.
Device extent[1, 11114905601073741824] didn't find the relative chunk.

Ideally btfsck should be updated to reflect this default behavior and
not through these messages, but it isn't harmful and can be done
later.

Signed-off-by: Rakesh Pandit <rakesh@tuxera.com>
Signed-off-by: David Sterba <dsterba@suse.cz>
Signed-off-by: Chris Mason <clm@fb.com>
10 years agoBtrfs-progs: use the correct integer type for ioctl
Arvin Schnell [Mon, 10 Mar 2014 23:39:48 +0000 (00:39 +0100)]
Btrfs-progs: use the correct integer type for ioctl

Signed-off-by: Arvin Schnell <aschnell@suse.de>
Signed-off-by: David Sterba <dsterba@suse.cz>
Signed-off-by: Chris Mason <clm@fb.com>
10 years agobtrfs-progs: make the device scan logic more clear
Gui Hecheng [Thu, 6 Mar 2014 03:36:48 +0000 (11:36 +0800)]
btrfs-progs: make the device scan logic more clear

1. Use long option to replace the original strcmp() to parse
the "--all-devices".
2. the "int ret" is defined in 2 places, just define it once
and make the return pattern into "goto + single return".

This does not change the actual scan procedure and return values.
Just make it clear, the original seems a little confusing.

Signed-off-by: Gui Hecheng <guihc.fnst@cn.fujitsu.com>
Signed-off-by: David Sterba <dsterba@suse.cz>
Signed-off-by: Chris Mason <clm@fb.com>
10 years agobtrfs-progs: cleanup device stat usage prompt
Gui Hecheng [Thu, 6 Mar 2014 03:36:47 +0000 (11:36 +0800)]
btrfs-progs: cleanup device stat usage prompt

1. use usage() to replace the fprintf()
2. use check_argc_exact() to replace "argc != ..."

Signed-off-by: Gui Hecheng <guihc.fnst@cn.fujitsu.com>
Signed-off-by: David Sterba <dsterba@suse.cz>
Signed-off-by: Chris Mason <clm@fb.com>
10 years agoBtrfs-progs: free path if we don't find root item
Rakesh Pandit [Fri, 28 Feb 2014 17:27:06 +0000 (19:27 +0200)]
Btrfs-progs: free path if we don't find root item

In btrfs_find_last_root before returning with -ENOENT (if root item is
not found) free path and also remove btrfs_release_path before
btrfs_free_path because btrfs_free_path anyway calls it.

Signed-off-by: Rakesh Pandit <rakesh@tuxera.com>
Signed-off-by: David Sterba <dsterba@suse.cz>
Signed-off-by: Chris Mason <clm@fb.com>
10 years agobtrfs-progs: include <sys/xattr.h> instead of <attr/xattr.h>
Christophe Vu-Brugier [Sun, 2 Feb 2014 13:01:20 +0000 (14:01 +0100)]
btrfs-progs: include <sys/xattr.h> instead of <attr/xattr.h>

The `btrfs` and `mkfs.btrfs` binaries are not linked against libattr
so the correct header to include is <sys/xattr.h>.

This fixes the build when attr header files are not installed.

Signed-off-by: Christophe Vu-Brugier <cvubrugier@yahoo.fr>
Signed-off-by: David Sterba <dsterba@suse.cz>
Signed-off-by: Chris Mason <clm@fb.com>
10 years agoBtrfs-progs: make sure to save mirror_num only if it is set
Josef Bacik [Thu, 27 Feb 2014 15:25:49 +0000 (10:25 -0500)]
Btrfs-progs: make sure to save mirror_num only if it is set

If we are cycling through all of the mirrors trying to find the best one we need
to make sure we set best_mirror to an actual mirror number and not 0.  Otherwise
we could end up reading a mirror that wasn't the best and make everybody sad.
Thanks,

Signed-off-by: Josef Bacik <jbacik@fb.com>
Signed-off-by: David Sterba <dsterba@suse.cz>
Signed-off-by: Chris Mason <clm@fb.com>
10 years agoBtrfs-progs: record generation for tree blocks in fsck
Josef Bacik [Thu, 27 Feb 2014 15:18:41 +0000 (10:18 -0500)]
Btrfs-progs: record generation for tree blocks in fsck

When working with a user who had a broken file system I noticed that we were
reading a bad copy of a block when the other copy was perfectly fine.  This is
because we don't keep track of the parent generation for tree blocks, so we just
read whichever copy we damned well please with no regards for which is best.
This fixes this problem by recording the parent generation of the tree block so
we can be sure to read the most correct copy before we check it, which will give
us a better chance of fixing really broken filesystems.  Thanks,

Signed-off-by: Josef Bacik <jbacik@fb.com>
Signed-off-by: David Sterba <dsterba@suse.cz>
Signed-off-by: Chris Mason <clm@fb.com>
10 years agobtrfs-progs: Init root_item to avoid gcc 4.8.2 warning
Qu Wenruo [Wed, 26 Feb 2014 08:23:08 +0000 (16:23 +0800)]
btrfs-progs: Init root_item to avoid gcc 4.8.2 warning

When using gcc 4.8.2, -Wmaybe-uninitialized will report root_item may be
used uninitialized.
Since root_item_valid variant is used to determine the root_item valid,
it's a false alert and to avoid the warning, just init it on allocation.

Signed-off-by: Qu Wenruo <quwenruo@cn.fujitsu.com>
Signed-off-by: David Sterba <dsterba@suse.cz>
Signed-off-by: Chris Mason <clm@fb.com>
10 years agoBtrfs-progs: use bitfield instead of integer for some variants in fs_info
Wang Shilong [Tue, 25 Feb 2014 11:48:57 +0000 (19:48 +0800)]
Btrfs-progs: use bitfield instead of integer for some variants in fs_info

Signed-off-by: Wang Shilong <wangsl.fnst@cn.fujitsu.com>
Signed-off-by: David Sterba <dsterba@suse.cz>
Signed-off-by: Chris Mason <clm@fb.com>
10 years agoBtrfs-progs: fix restore of files with compressed extents
Filipe David Borba Manana [Tue, 25 Feb 2014 18:25:39 +0000 (18:25 +0000)]
Btrfs-progs: fix restore of files with compressed extents

The code was incorrectly adding the file extent items' data offset to the logical
disk address of the extent (bytenr) when the extent is compressed. The offset is
relative to the uncompressed data and not to what we store on disk (compressed).
Also it attempted to copy ram_bytes to destination, which is incorrect when the
data offset field is non-zero, it must use num_bytes instead.

A test case for xfstests follows.

Signed-off-by: Filipe David Borba Manana <fdmanana@gmail.com>
Signed-off-by: David Sterba <dsterba@suse.cz>
Signed-off-by: Chris Mason <clm@fb.com>
10 years agobtrfs-progs: Fix bug when scanned for devid which was missing and deleted
Anand Jain [Mon, 24 Feb 2014 11:43:39 +0000 (19:43 +0800)]
btrfs-progs: Fix bug when scanned for devid which was missing and deleted

get_fs_info() provides the info of the specific
device/devid, however when we delete the missing disk
the super-block on the disk isn't cleared, and since
btrfs-progs makes its decision by reading the disk super
block, so it doesn't know about the kernel previous action,
And now when we tried to probe kernel for the devid it fails.

reproducer:

$ mkfs.btrfs -d raid1 -m raid1 /dev/sde /dev/sdf
$ modprobe -r btrfs && modprobe btrfs
$ mount -o degraded /dev/sde /btrfs
$ btrfs dev add /dev/sdd /btrfs
$ btrfs dev del missing /btrfs
$ btrfs scrub start -B /dev/sdf
btrfs: utils.c:1741: get_fs_info: Assertion `!(ndevs == 0)' failed.
Aborted (core dumped)

Signed-off-by: Anand Jain <Anand.Jain@oracle.com>
Signed-off-by: David Sterba <dsterba@suse.cz>
Signed-off-by: Chris Mason <clm@fb.com>
10 years agobtrfs-progs: latest_devid is not always the probed devid
Anand Jain [Mon, 24 Feb 2014 11:43:38 +0000 (19:43 +0800)]
btrfs-progs: latest_devid is not always the probed devid

btrfs-progs picks the latest_dev based on first probed
greatest trans-id. However below test case proofs that
approach is wrong.

$ mkfs.btrfs -d raid1 -m raid1 /dev/sde /dev/sdf
$ modprobe -r btrfs && modprobe btrfs
$ mount -o degraded /dev/sde /btrfs
$ touch /btrfs/testfile && btrfs fi sync /btrfs

The above steps will make /dev/sdf not part of the btrfs.

and as below when you use /dev/sdf the btrfs dev stat
and dev scrub picks up wrong disk

$ btrfs dev stat /dev/sdf
[/dev/sde].write_io_errs   0
[/dev/sde].read_io_errs    0
[/dev/sde].flush_io_errs   0
[/dev/sde].corruption_errs 0
[/dev/sde].generation_errs 0

$ btrfs scrub start -B /dev/sdf
scrub done for 2e99c881-6abd-4f8a-8290-e2f8d0acc575
 scrub started at Mon Feb 24 14:45:06 2014 and finished after 0 seconds
 total bytes scrubbed: 256.00KiB with 0 errors

Signed-off-by: Anand Jain <Anand.Jain@oracle.com>
Signed-off-by: David Sterba <dsterba@suse.cz>
Signed-off-by: Chris Mason <clm@fb.com>
10 years agobtrfs-progs: there is devid 0 when replace is running
Anand Jain [Mon, 24 Feb 2014 11:43:37 +0000 (19:43 +0800)]
btrfs-progs: there is devid 0 when replace is running

as of now, when we replace a disk, it is added to the
dev list with devid 0. And we fail to obtain details
of devid 0 because we don't query devid 0 at all.

reproducer:

 btrfs rep start /dev/sdb /dev/sdf /btrfs
 btrfs fi show
 Label: none  uuid: f8fb9819-16c8-47b7-b62f-0ff90f8c56cd
        Total devices 3 FS bytes used 1.94GiB
        devid    1 size 1.10GiB used 1.10GiB path /dev/sdb
        devid    2 size 1.10GiB used 1.08GiB path /dev/sdc
        devid    0 size 0.00 used 0.00 path

  this patch will make it proper by querying devid 0.

 btrfs repl start /dev/sdb /dev/sdf /btrfs
 btrfs fi show /btrfs
 Label: none  uuid: f8fb9819-16c8-47b7-b62f-0ff90f8c56cd
        Total devices 3 FS bytes used 1.94GiB
        devid    0 size 1.10GiB used 1.10GiB path /dev/sdf
        devid    1 size 1.10GiB used 1.10GiB path /dev/sdb
        devid    2 size 1.10GiB used 1.08GiB path /dev/sdc

 Its fine to query devid 0 when there is no replace
 activity as well, because we just skip the error ENODEV

 btrfs fi show /btrfs
 Label: none  uuid: f8fb9819-16c8-47b7-b62f-0ff90f8c56cd
        Total devices 2 FS bytes used 1.94GiB
        devid    1 size 1.10GiB used 1.10GiB path /dev/sdf
        devid    2 size 1.10GiB used 1.08GiB path /dev/sdc

Signed-off-by: Anand Jain <Anand.Jain@oracle.com>
Signed-off-by: David Sterba <dsterba@suse.cz>
Signed-off-by: Chris Mason <clm@fb.com>
10 years agoBtrfs-progs: fsck: fix wrong return value in check_block()
Wang Shilong [Mon, 24 Feb 2014 11:55:14 +0000 (19:55 +0800)]
Btrfs-progs: fsck: fix wrong return value in check_block()

We found btrfsck will output backrefs mismatch while the filesystem
is defenitely ok.

The problem is that check_block() don't return right value,which
makes btrfsck won't walk all tree blocks thus we don't get a consistent
filesystem, we will fail to check extent refs etc.

Reported-by: Gui Hecheng <guihc.fnst@cn.fujitsu.com>
Signed-off-by: Wang Shilong <wangsl.fnst@cn.fujitsu.com>
Signed-off-by: David Sterba <dsterba@suse.cz>
Signed-off-by: Chris Mason <clm@fb.com>
10 years agoBtrfs-progs: fsck: avoid overwritting existed space when initting csum tree
Wang Shilong [Tue, 25 Feb 2014 11:48:56 +0000 (19:48 +0800)]
Btrfs-progs: fsck: avoid overwritting existed space when initting csum tree

Steps to reproduce:
 # mkfs.btrfs -f /dev/sda9
 # btrfs check /dev/sda9 --init-extent-tree --init-csum-tree
 # btrfs check /dev/sda9

During reinitting extent tree, we will pin all metadata blocks to
avoid overwritting existing metadata space. However, those space will
be unpinned after committing transaction.

If we try to reinit csum tree after reiniting extent tree, we may
overwrite existing space. Fix this problem by making reinit extent tree
and csum tree in same transaction.

Signed-off-by: Wang Shilong <wangsl.fnst@cn.fujitsu.com>
Signed-off-by: David Sterba <dsterba@suse.cz>
Signed-off-by: Chris Mason <clm@fb.com>
10 years agobtrfs-progs: Copyright string update
Hidetoshi Seto [Tue, 25 Feb 2014 07:42:29 +0000 (16:42 +0900)]
btrfs-progs: Copyright string update

Fix corporate name for copyright.

Signed-off-by: Hidetoshi Seto <seto.hidetoshi@jp.fujitsu.com>
Signed-off-by: David Sterba <dsterba@suse.cz>
Signed-off-by: Chris Mason <clm@fb.com>
10 years agobtrfs-progs: mkfs.btrfs man page: update default metadata blocksize
Rakesh Pandit [Mon, 24 Feb 2014 15:08:11 +0000 (17:08 +0200)]
btrfs-progs: mkfs.btrfs man page: update default metadata blocksize

Since commit c652e4ef changes default metadata blocksize, update
corresponding options in man page.

Signed-off-by: Rakesh Pandit <rakesh@tuxera.com>
Signed-off-by: David Sterba <dsterba@suse.cz>
Signed-off-by: Chris Mason <clm@fb.com>
10 years agobtrfs-progs: don't remove BTRFS_BLOCK_GROUP_DUP in chunk type
Rakesh Pandit [Thu, 20 Feb 2014 14:44:30 +0000 (16:44 +0200)]
btrfs-progs: don't remove BTRFS_BLOCK_GROUP_DUP in chunk type

During restoring of image (-r using btrfs-image) we zero out RAID
profile in chunk type but forget to save BTRFS_BLOCK_GROUP_DUP if
present. This results in some false messages being printed by btrfsck.

$  ./mkfs.btrfs /dev/sdb2 -f
$  ./btrfs-image /dev/sdb2 btrfs_image_output
$  ./btrfs-image -r btrfs_image_output disk-image
$  ./btrfsck disk-image
Checking filesystem on disk-image
UUID: e644be2d-7701-4bd4-8804-7487f560d2a7
checking extents
Chunk[256, 228, 20971520]: length(8388608), offset(20971520), type(2) mismatch with block group[20971520, 192, 8388608]: offset(8388608), objectid(20971520), flags(34)
Chunk[256, 228, 29360128]: length(1073741824), offset(29360128), type(4) mismatch with block group[29360128, 192, 1073741824]: offset(1073741824), objectid(29360128), flags(36)
Block group[20971520, 8388608] (flags = 34) didn't find the relative chunk.
Block group[293601281073741824] (flags = 36) didn't find the relative chunk.

Even though ./btrfsck on /dev/sdb2 seemed fine. This is due to type
mismatch above and type mismatch occured because we zero'ed out
BTRFS_BLOCK_GROUP_DUP while handling chunk trees.

Signed-off-by: Rakesh Pandit <rakesh@tuxera.com>
Signed-off-by: David Sterba <dsterba@suse.cz>
Signed-off-by: Chris Mason <clm@fb.com>
10 years agobtrfs-progs: Allow use of get_device_info()
Goffredo Baroncelli [Thu, 13 Feb 2014 19:19:44 +0000 (20:19 +0100)]
btrfs-progs: Allow use of get_device_info()

Allow the use of get_device_info() for different units.

Signed-off-by: Goffredo Baroncelli <kreijack@inwind.it>
Signed-off-by: David Sterba <dsterba@suse.cz>
Signed-off-by: Chris Mason <clm@fb.com>
10 years agobtrfs-progs: fix wrong error msg for exec btrfsck as non-root
Gui Hecheng [Thu, 20 Feb 2014 02:49:05 +0000 (10:49 +0800)]
btrfs-progs: fix wrong error msg for exec btrfsck as non-root

When exec btrfsck as non-root user on a disk, btrfsck will always
warn that "No such file or directory", despite that a directory
(e.g. /dev/vboxusb)actually exists. We just have no permission.
In this case, return the -errno set by the opendir call in
btrfs_scan_one_dir rather than blindly return -ENOENT.

Signed-off-by: Gui Hecheng <guihc.fnst@cn.fujitsu.com>
Signed-off-by: David Sterba <dsterba@suse.cz>
Signed-off-by: Chris Mason <clm@fb.com>
10 years agobtrfs-progs: judge the return value of check_mounted more accurately
Gui Hecheng [Thu, 20 Feb 2014 02:49:03 +0000 (10:49 +0800)]
btrfs-progs: judge the return value of check_mounted more accurately

For btrfs-convert, btrfstune, btrfs rescue, they report "device busy"
when given a device that does not actually exist e.g.

# btrfstune -x abcdefg (this device does not exist)
$ ...device busy...

We deal with this case by add "ret < 0" error check when
judging the return value of check_mounted.

Signed-off-by: Gui Hecheng <guihc.fnst@cn.fujitsu.com>
Signed-off-by: David Sterba <dsterba@suse.cz>
Signed-off-by: Chris Mason <clm@fb.com>
10 years agoBtrfs-progs: switch to arg_strtou64() part3
Wang Shilong [Thu, 20 Feb 2014 01:30:52 +0000 (09:30 +0800)]
Btrfs-progs: switch to arg_strtou64() part3

Switch to new helper arg_strtou64(), also check if user assign
a valid super copy.

Signed-off-by: Wang Shilong <wangsl.fnst@cn.fujitsu.com>
Signed-off-by: David Sterba <dsterba@suse.cz>
Signed-off-by: Chris Mason <clm@fb.com>
10 years agoBtrfs-progs: switch to arg_strtou64() part2
Wang Shilong [Thu, 20 Feb 2014 01:30:51 +0000 (09:30 +0800)]
Btrfs-progs: switch to arg_strtou64() part2

Signed-off-by: Wang Shilong <wangsl.fnst@cn.fujitsu.com>
Signed-off-by: David Sterba <dsterba@suse.cz>
Signed-off-by: Chris Mason <clm@fb.com>
10 years agoBtrfs-progs: switch to arg_strtou64() part1
Wang Shilong [Thu, 20 Feb 2014 01:30:50 +0000 (09:30 +0800)]
Btrfs-progs: switch to arg_strtou64() part1

switch to arg_strtou64 plus some cleanups to remove unnecessary
codes.

Signed-off-by: Wang Shilong <wangsl.fnst@cn.fujitsu.com>
Signed-off-by: David Sterba <dsterba@suse.cz>
Signed-off-by: Chris Mason <clm@fb.com>
10 years agoBtrfs-progs: new helper to parse string to u64 for btrfs
Wang Shilong [Fri, 21 Feb 2014 06:07:05 +0000 (14:07 +0800)]
Btrfs-progs: new helper to parse string to u64 for btrfs

There are many places that need parse string to u64 for btrfs commands,
in fact, we do such things *too casually*, using atoi/atol/atoll..is not
right at all, and even we don't check whether it is a valid string.

Let's do everything more gracefully, we introduce a new helper
arg_strtou64() which will do all the necessary checks.If we fail to
parse string to u64, we will output message and exit directly, this is
something like what usage() is doing. It is ok to not return erro to
it's caller, because this function should be called when parsing arg
(just like usage!)

Signed-off-by: Wang Shilong <wangsl.fnst@cn.fujitsu.com>
Reviewed-by: Eric Sandeen <sandeen@redhat.com>
Signed-off-by: David Sterba <dsterba@suse.cz>
Signed-off-by: Chris Mason <clm@fb.com>
10 years agobtrfs-progs: fix fsck leaks on error returns
Gui Hecheng [Mon, 17 Feb 2014 10:19:49 +0000 (18:19 +0800)]
btrfs-progs: fix fsck leaks on error returns

Add close_ctree()s before the "returns" on errors after open_ctree()
Also merge the err returns into the "goto + single return" pattern.

Signed-off-by: Gui Hecheng <guihc.fnst@cn.fujitsu.com>
Signed-off-by: David Sterba <dsterba@suse.cz>
Signed-off-by: Chris Mason <clm@fb.com>
10 years agobtrfs-progs: add dry-run option to restore command
Justin Maggard [Fri, 14 Feb 2014 18:40:47 +0000 (10:40 -0800)]
btrfs-progs: add dry-run option to restore command

Sometimes it is useful to see what btrfs restore is going to do
before provisioning enough external storage to restore onto.
Add a dry-run option so we can see what files and paths are found
by restore, without actually restoring any data.

Signed-off-by: Justin Maggard <jmaggard10@gmail.com>
Signed-off-by: David Sterba <dsterba@suse.cz>
Signed-off-by: Chris Mason <clm@fb.com>
10 years agobtrfs-progs: cleanup nonsense ret value assignment
Gui Hecheng [Thu, 13 Feb 2014 03:16:37 +0000 (11:16 +0800)]
btrfs-progs: cleanup nonsense ret value assignment

The "ret" will be soon used to hold the return value of another function,
assign -1 to it before is nonsense.

Signed-off-by: Gui Hecheng <guihc.fnst@cn.fujitsu.com>
Signed-off-by: David Sterba <dsterba@suse.cz>
Signed-off-by: Chris Mason <clm@fb.com>
10 years agobtrfs-progs: remove a dead break before usage()
Gui Hecheng [Thu, 13 Feb 2014 03:16:36 +0000 (11:16 +0800)]
btrfs-progs: remove a dead break before usage()

The usage() in help.c calls exit(1), so the break behind is nonsense
and should be removed.

Signed-off-by: Gui Hecheng <guihc.fnst@cn.fujitsu.com>
Signed-off-by: David Sterba <dsterba@suse.cz>
Signed-off-by: Chris Mason <clm@fb.com>
10 years agobtrfs-progs: use usage() to replace the warning msg on no-arg usage
Gui Hecheng [Thu, 13 Feb 2014 03:16:35 +0000 (11:16 +0800)]
btrfs-progs: use usage() to replace the warning msg on no-arg usage

To be consistent with the other cmds, replace the warning msg
with usage() when send/receive are used without any args.

Signed-off-by: Gui Hecheng <guihc.fnst@cn.fujitsu.com>
Signed-off-by: David Sterba <dsterba@suse.cz>
Signed-off-by: Chris Mason <clm@fb.com>
10 years agobtrfs-progs: Remove superfluous BUG_ON check.
Mitch Harder [Tue, 11 Feb 2014 13:00:12 +0000 (07:00 -0600)]
btrfs-progs: Remove superfluous BUG_ON check.

The function call that set the ret parameter evaluated in this
BUG_ON was removed in a previous commit:
11be10f71e1af5256f221feb9e91300b3e28bbef
Btrfs-progs: make fsck fix certain file extent inconsistencies

Signed-off-by: Mitch Harder <mitch.harder@sabayonlinux.org>
Signed-off-by: David Sterba <dsterba@suse.cz>
Signed-off-by: Chris Mason <clm@fb.com>
10 years agobtrfs-progs: Fix check_arg_type() which doesn't use realpath() result.
Qu Wenruo [Wed, 12 Feb 2014 05:44:37 +0000 (13:44 +0800)]
btrfs-progs: Fix check_arg_type() which doesn't use realpath() result.

Fix a problem that does not use the result of realpath(), which caused
check_arg_type() can't handle mount point which ends with a final '/'.

Signed-off-by: Qu Wenruo <quwenruo@cn.fujitsu.com>
Cc: Anand Jain <anand.jain@oracle.com>
Signed-off-by: David Sterba <dsterba@suse.cz>
Signed-off-by: Chris Mason <clm@fb.com>
10 years agobtrfs-progs: Preserve process_one_leaf return value.
Mitch Harder [Fri, 7 Feb 2014 18:53:50 +0000 (12:53 -0600)]
btrfs-progs: Preserve process_one_leaf return value.

The return value in process_one_leaf could be over-written while
looping over the items in the leaf.

This patch will preserve a non-zero return value to the calling
function if a non-zero return value is encountered in the loop.

The return value of one (1) is consistent with non-zero values
that could be returned while processing the leaf.

The only caller of this function (walk_down_tree) would ignore
the return value anyway.  But this patch will correct the
behaviour in case future changes intend to utilize the return
value.

Signed-off-by: Mitch Harder <mitch.harder@sabayonlinux.org>
Signed-off-by: David Sterba <dsterba@suse.cz>
Signed-off-by: Chris Mason <clm@fb.com>
10 years agoBtrfs-progs: receive: don't output normal message into stderr
Wang Shilong [Mon, 10 Feb 2014 12:36:37 +0000 (20:36 +0800)]
Btrfs-progs: receive: don't output normal message into stderr

Don't output normal messages into stderr, this make xfstests
filter output easier.

Signed-off-by: Wang Shilong <wangsl.fnst@cn.fujitsu.com>
Signed-off-by: David Sterba <dsterba@suse.cz>
Signed-off-by: Chris Mason <clm@fb.com>
10 years agobtrfs-progs: move find_mount_root to utils.[ch]
Qu Wenruo [Mon, 10 Feb 2014 07:28:28 +0000 (15:28 +0800)]
btrfs-progs: move find_mount_root to utils.[ch]

Move find_mount_root to utils.[ch] for general use.

Signed-off-by: Qu Wenruo <quwenruo@cn.fuijitsu.com>
Signed-off-by: David Sterba <dsterba@suse.cz>
Signed-off-by: Chris Mason <clm@fb.com>
10 years agobtrfs-progs: Change BUG() to use assert.
Mitch Harder [Fri, 7 Feb 2014 15:21:00 +0000 (09:21 -0600)]
btrfs-progs: Change BUG() to use assert.

Change the definition of BUG() to use assert instead of abort to
provide information about the location of the issue.

Signed-off-by: Mitch Harder <mitch.harder@sabayonlinux.org>
Signed-off-by: David Sterba <dsterba@suse.cz>
Signed-off-by: Chris Mason <clm@fb.com>
10 years agobtrfs-progs: Add missing devices check for mounted btrfs.
Qu Wenruo [Fri, 7 Feb 2014 07:07:19 +0000 (15:07 +0800)]
btrfs-progs: Add missing devices check for mounted btrfs.

In btrfs/003 of xfstest, it will check whether btrfs fi show can find
missing devices.

But before the patch, btrfs-progs will not check whether device missing
if given a mounted btrfs mountpoint/block device.
This patch fixes the bug and will pass btrfs/003.

Signed-off-by: Qu Wenruo <quwenruo@cn.fujitsu.com>
Cc: Anand Jain <anand.jain@oracle.com>
Signed-off-by: David Sterba <dsterba@suse.cz>
Signed-off-by: Chris Mason <clm@fb.com>
10 years agoioctl: add note regarding CLONE_RANGE(len=0) behaviour
David Disseldorp [Thu, 6 Feb 2014 14:29:18 +0000 (15:29 +0100)]
ioctl: add note regarding CLONE_RANGE(len=0) behaviour

A BTRFS_IOC_CLONE_RANGE request with a src_length value of zero has the
effect of cloning all data from src_offset through to end-of-file.

Document this behaviour in the header file for those who (like me)
incorrectly assume that no data is cloned in such a case.

Signed-off-by: David Disseldorp <ddiss@suse.de>
Signed-off-by: David Sterba <dsterba@suse.cz>
Signed-off-by: Chris Mason <clm@fb.com>
10 years agobtrfs-progs: fix typo in reported error
Anand Jain [Wed, 5 Feb 2014 12:57:51 +0000 (20:57 +0800)]
btrfs-progs: fix typo in reported error

Signed-off-by: Anand Jain <anand.jain@oracle.com>
Signed-off-by: David Sterba <dsterba@suse.cz>
Signed-off-by: Chris Mason <clm@fb.com>
10 years agobtrfs-progs: enclose uuid tree compat code with ifdefs
David Sterba [Tue, 21 Jan 2014 15:32:44 +0000 (16:32 +0100)]
btrfs-progs: enclose uuid tree compat code with ifdefs

Commit "Btrfs-progs: make send/receive compatible with older kernels"
adds code that will become deprecated, let's clearly mark it in the
sources.

CC: Stefan Behrens <sbehrens@giantdisaster.de>
CC: Wang Shilong <wangsl.fnst@cn.fujitsu.com>
Signed-off-by: David Sterba <dsterba@suse.cz>
Signed-off-by: Chris Mason <clm@fb.com>
10 years agobtrfs-progs: return non zero when label is not found
Anand Jain [Tue, 14 Jan 2014 11:17:07 +0000 (19:17 +0800)]
btrfs-progs: return non zero when label is not found

btrfs filesystem show <not-found-label> should return non zero

Signed-off-by: Anand Jain <anand.jain@oracle.com>
Signed-off-by: David Sterba <dsterba@suse.cz>
Signed-off-by: Chris Mason <clm@fb.com>
10 years agobtrfs-progs: lblkid wouldn't find non mapper path input
Anand Jain [Fri, 15 Nov 2013 11:25:35 +0000 (19:25 +0800)]
btrfs-progs: lblkid wouldn't find non mapper path input

A new test case when disk is unmounted and if the non mapper
disk path is given as the argument to the btrfs filesystem show <arg>
we still need this to work but lblkid will pull only mapper disks,
it won't match. So this will normalize the input to find btrfs
by fsid and pass it to the search.

Signed-off-by: Anand Jain <anand.jain@oracle.com>
Signed-off-by: David Sterba <dsterba@suse.cz>
Signed-off-by: Chris Mason <clm@fb.com>
10 years agoBtrfs-progs: add support for the compression property
Filipe David Borba Manana [Wed, 13 Nov 2013 01:22:09 +0000 (01:22 +0000)]
Btrfs-progs: add support for the compression property

With this property, one can enable compression for individual files
without the need to mount the filesystem with the compress or
compress-force options, and specify the compression algorithm.

When applied against a directory, files created under that directory
will inherit the compression property.

This requires the corresponding kernel patch, which adds the support
for setting and getting properties and implements the compression
property.

Signed-off-by: Filipe David Borba Manana <fdmanana@gmail.com>
Signed-off-by: David Sterba <dsterba@suse.cz>
Signed-off-by: Chris Mason <clm@fb.com>
10 years agoBtrfs-progs: add type root to label property
Filipe David Borba Manana [Tue, 12 Nov 2013 13:41:45 +0000 (13:41 +0000)]
Btrfs-progs: add type root to label property

So that we can get the label of a mounted filesystem.

Before this change:

        $ btrfs prop get /mnt/btrfs label
        ERROR: object is not compatible with property

        $ btrfs prop get /dev/sdb3 label
        ERROR: dev /dev/sdb3 is mounted, use mount point
        ERROR: failed to set/get property for object.

After this change:

        $ btrfs prop get /mnt/btrfs label
        label=foobar

Signed-off-by: Filipe David Borba Manana <fdmanana@gmail.com>
Signed-off-by: David Sterba <dsterba@suse.cz>
Signed-off-by: Chris Mason <clm@fb.com>
10 years agoBtrfs-progs: fix detection of root objects in cmds-property.c
Filipe David Borba Manana [Tue, 12 Nov 2013 13:41:44 +0000 (13:41 +0000)]
Btrfs-progs: fix detection of root objects in cmds-property.c

Several fixes:

1) The function check_is_root() returns 0 if the object is root;

2) Don't treat any error from get fsid ioctl as meaning the target
   is root. Only -ENOTTY means it's a root (parent directory is
   not a btrfs fs) and a -ENOTDIR means our target object is not a
   directory, therefore it can be the root;

3) Fix the comparison of the target and target's parent fs ids. If
   they are different, it means the target is a mount point in a
   btrfs fs, therefore it's a root, otherwise it isn't.

Signed-off-by: Filipe David Borba Manana <fdmanana@gmail.com>
Signed-off-by: David Sterba <dsterba@suse.cz>
Signed-off-by: Chris Mason <clm@fb.com>
10 years agoBtrfs-progs: introduce btrfs property subgroup
Alexander Block [Tue, 12 Nov 2013 13:41:43 +0000 (13:41 +0000)]
Btrfs-progs: introduce btrfs property subgroup

"btrfs filesystem property" is a generic interface to set/get
properties on filesystem objects (inodes/subvolumes/filesystems
/devs).

This patch adds the generic framework for properties and also
implements two properties. The first is the read-only property
for subvolumes and the second is the label property for devices.

Signed-off-by: Alexander Block <ablock84@googlemail.com>
Signed-off-by: Filipe David Borba Manana <fdmanana@gmail.com>
Signed-off-by: David Sterba <dsterba@suse.cz>
Signed-off-by: Chris Mason <clm@fb.com>
10 years agoBtrfs-progs: make send/receive compatible with older kernels
Wang Shilong [Thu, 9 Jan 2014 10:52:38 +0000 (18:52 +0800)]
Btrfs-progs: make send/receive compatible with older kernels

Some users complaint that with latest btrfs-progs, they will
fail to use send/receive. The problem is new tool will try
to use uuid tree while it dosen't work on older kernel.

Now we first check if we support uuid tree, if not we fall into
normal search as previous way.i copy most of codes from Alexander
Block's previous codes and did some adjustments to make it work.

Signed-off-by: Alexander Block <ablock84@googlemail.com>
Signed-off-by: Wang Shilong <wangsl.fnst@cn.fujitsu.com>
Signed-off-by: David Sterba <dsterba@suse.cz>
Signed-off-by: Chris Mason <clm@fb.com>
10 years agoBtrfs-progs: fix double free when deleting subvolumes
Wang Shilong [Mon, 20 Jan 2014 08:44:21 +0000 (16:44 +0800)]
Btrfs-progs: fix double free when deleting subvolumes

Steps to reproduce:
# mkfs.btrfs -f /dev/sda8
# mount /dev/sda8 /mnt
# btrfs sub create /mnt/a
# touch /mnt/b
# btrfs sub create /mnt/c
# btrfs sub delete /mnt/*

Above steps will trigger following abortion:

ERROR: 'b' is not a subvolume
*** Error in `btrfs': double free or corruption (out): 0x0000000002116060 ***
======= Backtrace: =========
/lib64/libc.so.6[0x3fa467cef8]
/lib64/libc.so.6(closedir+0xd)[0x3fa46b846d]
btrfs[0x43e608]
btrfs[0x40622f]
btrfs[0x403d19]
btrfs[0x4062c6]
btrfs[0x403f68]

We try to fix it by resetting @fd && @dirstream before trying next
subvolume deletion.

Signed-off-by: Wang Shilong <wangsl.fnst@cn.fujitsu.com>
Signed-off-by: David Sterba <dsterba@suse.cz>
Signed-off-by: Chris Mason <clm@fb.com>
10 years agobtrfs-progs: Fix bus error on sparc
Ivan Jager [Fri, 17 Jan 2014 14:00:43 +0000 (15:00 +0100)]
btrfs-progs: Fix bus error on sparc

Currently, as of 8cae1840afb3ea44dcc298f32983e577480dfee4 when running
btrfs-convert I get a bus error.

The problem is that struct btrfs_key has __attribute__ ((__packed__))
so it is not aligned. Then, a pointer to it's objectid field is taken,
cast to a  void*, then eventually cast back to a u64* and
dereferenced. The problem is that the dereferenced u64* is not
necessarily aligned (ie, not necessarily a valid u64*), resulting in
undefined behavior.

This patch adds a local u64 variable which would of course be properly
aligned and then uses a pointer to that.

I did not modify the call from btrfs_fs_roots_compare_roots as that
uses struct btrfs_root which is a regular struct and would thus have
it's members correctly aligned to begin with.

After patching this I realized Liu Bo had already written a similar
patch, but I think mine is cleaner, so I'm sending it anyway.

Signed-off-by: Ivan Jager <aij+@mrph.org>
Signed-off-by: David Sterba <dsterba@suse.cz>
Signed-off-by: Chris Mason <clm@fb.com>
10 years agobtrfs-progs: fix minor grammar issues
Mitchel Humpherys [Tue, 14 Jan 2014 21:44:03 +0000 (13:44 -0800)]
btrfs-progs: fix minor grammar issues

Remove the extraneous `to' from `Can't access to X'.

Signed-off-by: Mitchel Humpherys <mitch.special@gmail.com>
Signed-off-by: David Sterba <dsterba@suse.cz>
Signed-off-by: Chris Mason <clm@fb.com>
10 years agobtrfs-progs: btrfsck operations should be exclusive
Anand Jain [Mon, 13 Jan 2014 13:14:55 +0000 (21:14 +0800)]
btrfs-progs: btrfsck operations should be exclusive

this patch will make btrfsck operations to open disk in exclusive mode,
so that mount will fail when btrfsck is running

Signed-off-by: Anand Jain <Anand.Jain@oracle.com>
Signed-off-by: David Sterba <dsterba@suse.cz>
Signed-off-by: Chris Mason <clm@fb.com>
10 years agoBtrfs-progs: check return value of read_tree_block() in check_chunks_and_extents()
Eryu Guan [Fri, 10 Jan 2014 14:50:02 +0000 (22:50 +0800)]
Btrfs-progs: check return value of read_tree_block() in check_chunks_and_extents()

The following steps could trigger btrfs segfault:

mkfs -t btrfs -m raid5 -d raid5 /dev/loop{0..3}
losetup -d /dev/loop2
btrfs check /dev/loop0

The reason is that read_tree_block() returns NULL and
add_root_to_pending() dereferences it without checking it first.

Also replace a BUG_ON with proper error checking.

Signed-off-by: Eryu Guan <guaneryu@gmail.com>
Signed-off-by: David Sterba <dsterba@suse.cz>
Signed-off-by: Chris Mason <clm@fb.com>
10 years agobtrfs-progs: sync-up with newly introduced ioctl number
Anand Jain [Thu, 19 Dec 2013 04:08:56 +0000 (12:08 +0800)]
btrfs-progs: sync-up with newly introduced ioctl number

for now the manual sync up of new ioctls introduced in the btrfs
kernel. For which there wasn't any btrfs-progs patch.
however we might have better idea for the long run.

Signed-off-by: Anand Jain <anand.jain@oracle.com>
Signed-off-by: David Sterba <dsterba@suse.cz>
Signed-off-by: Chris Mason <clm@fb.com>
10 years agoBtrfs-progs: add support for the no holes incompat flag
Josef Bacik [Tue, 22 Oct 2013 16:22:41 +0000 (12:22 -0400)]
Btrfs-progs: add support for the no holes incompat flag

This adds the flag to ctree.h, adds the feature option to mkfs to turn it on and
fixes fsck so it doesn't complain about missing hole extents in files when this
flag is set.

Signed-off-by: Josef Bacik <jbacik@fusionio.com>
Signed-off-by: David Sterba <dsterba@suse.cz>
Signed-off-by: Chris Mason <clm@fb.com>
10 years agobtrfs-progs: skip non-regular files while defragmenting
Pascal VITOUX [Thu, 9 Jan 2014 22:47:14 +0000 (23:47 +0100)]
btrfs-progs: skip non-regular files while defragmenting

Skip non-regular files to avoid ioctl errors while defragmenting.

They are silently ignored in recursive mode but reported as errors when
used as command-line arguments.

Signed-off-by: Pascal VITOUX <vitoux.pascal@gmail.com>
Signed-off-by: David Sterba <dsterba@suse.cz>
Signed-off-by: Chris Mason <clm@fb.com>
10 years agoBtrfs-progs: fix to make list specified directory's subvolumes work
Wang Shilong [Thu, 9 Jan 2014 12:42:12 +0000 (20:42 +0800)]
Btrfs-progs: fix to make list specified directory's subvolumes work

Steps to reproduce:
 # mkfs.btrfs -f /dev/sda8
 # mount /dev/sda8 /mnt
 # mkdir /mnt/subvolumes
 # btrfs sub create /mnt/subvolumes/subv1
 # btrfs sub create /mnt/subvolumes/subv1/subv1.1
 # btrfs sub list -o /mnt/subvolumes/subv1   <----we did not list anything

The problem is that we don't set @top_id right, fix it.

Reported-by: Alex <alex@bpmit.com>
Signed-off-by: Wang Shilong <wangsl.fnst@cn.fujitsu.com>
Signed-off-by: David Sterba <dsterba@suse.cz>
Signed-off-by: Chris Mason <clm@fb.com>
10 years agobtrfs-progs: test_skip_this_disk() isn't needed anymore
Anand Jain [Fri, 27 Dec 2013 05:56:29 +0000 (13:56 +0800)]
btrfs-progs: test_skip_this_disk() isn't needed anymore

add_seen_fsid() which was introduced lately will eliminate
the mounted disks, so we don't need test_skip_this_disk()
anymore

Signed-off-by: Anand Jain <anand.jain@oracle.com>
Signed-off-by: David Sterba <dsterba@suse.cz>
Signed-off-by: Chris Mason <clm@fb.com>
10 years agobtrfs-progs: handle error in the btrfs_prepare_device
Anand Jain [Wed, 18 Dec 2013 04:07:55 +0000 (12:07 +0800)]
btrfs-progs: handle error in the btrfs_prepare_device

this patch will handle the strerror reporting of the error instead of
printing errno,  and also replaced the BUG_ON with the error handling

Signed-off-by: Anand Jain <anand.jain@oracle.com>
Signed-off-by: David Sterba <dsterba@suse.cz>
Signed-off-by: Chris Mason <clm@fb.com>
10 years agoBtrfs-progs: receive: fix the case that we can not find the subvolume
Wang Shilong [Wed, 18 Dec 2013 09:56:33 +0000 (17:56 +0800)]
Btrfs-progs: receive: fix the case that we can not find the subvolume

If we change our default subvolume, btrfs receive will fail to find
subvolume. To fix this problem, we have three ideas:

 1.make btrfs snapshot ioctl support passing source subvolume's objectid.
 2.when we want to using interval subvolume path, we mount it other place
 that use subvolume 5 as its default subvolume.
 3.tell the user to mount the toplevel subvol by himself and run
 receive

We's better use the third approach because first patch will bother kernel
change and the second approach is not very good for power users. So give this
option to users.

Reported-by: Michael Welsh Duggan <mwd@md5i.com>
Signed-off-by: Wang Shilong <wangsl.fnst@cn.fujitsu.com>
Signed-off-by: Miao Xie <miaox@cn.fujitsu.com>
Signed-off-by: David Sterba <dsterba@suse.cz>
Signed-off-by: Chris Mason <clm@fb.com>
10 years agobtrfs-progs: fix btrfstune silence on failure
Gui Hecheng [Wed, 18 Dec 2013 03:52:45 +0000 (11:52 +0800)]
btrfs-progs: fix btrfstune silence on failure

Originally, btrfstune will fail without any options, like this:

# btrfstune /dev/sdb

An error prompt & usage should show up upon this condition.

Signed-off-by: Gui Hecheng <guihc.fnst@cn.fujitsu.com>
Signed-off-by: David Sterba <dsterba@suse.cz>
Signed-off-by: Chris Mason <clm@fb.com>
10 years agobtrfs-progs: update send help strings and manpage
David Sterba [Mon, 16 Dec 2013 15:47:10 +0000 (16:47 +0100)]
btrfs-progs: update send help strings and manpage

- send accepts multiple subvolumes
- add missing option -e to man
- minor man formatting fix

Signed-off-by: David Sterba <dsterba@suse.cz>
Signed-off-by: Chris Mason <clm@fb.com>
10 years agobtrfs-progs: add options to set commit mode after subvol delete
David Sterba [Thu, 12 Dec 2013 18:11:26 +0000 (19:11 +0100)]
btrfs-progs: add options to set commit mode after subvol delete

Subvolume deletion does not do a full transaction commit. This can lead
to an unexpected result when the system crashes between deletion and
commit, the subvolume directory will appear again. Add options to request
filesystem sync after each deleted subvolume or after the last one.

If the command with --commit option finishes succesfully, the
subvolume(s) deletion status is safely stored on the media.

Userspace approach is more flexible than in-kernel. Related discussions:
http://www.spinics.net/lists/linux-btrfs/msg22088.html
http://www.spinics.net/lists/linux-btrfs/msg27240.html

CC: Alex Lyakas <alex.btrfs@zadarastorage.com>
Signed-off-by: David Sterba <dsterba@suse.cz>
Signed-off-by: Chris Mason <clm@fb.com>
10 years agobtrfs-progs: use stripe_len define here
Anand Jain [Mon, 16 Dec 2013 12:33:58 +0000 (20:33 +0800)]
btrfs-progs: use stripe_len define here

Signed-off-by: Anand Jain <anand.jain@oracle.com>
Signed-off-by: David Sterba <dsterba@suse.cz>
Signed-off-by: Chris Mason <clm@fb.com>
10 years agobtrfs-progs: don't replicate the stripe_len defines
Anand Jain [Mon, 16 Dec 2013 12:33:57 +0000 (20:33 +0800)]
btrfs-progs: don't replicate the stripe_len defines

a clean up patch, the BTRFS_STRIPE_LEN is been duplicated across
btrfs-progs, the kernel defines it in volume.h so do the same
for progs.

Signed-off-by: Anand Jain <anand.jain@oracle.com>
Signed-off-by: David Sterba <dsterba@suse.cz>
Signed-off-by: Chris Mason <clm@fb.com>
10 years agobtrfs-progs: remove NULL-ptr judge before free for btrfs-progs
Gui Hecheng [Thu, 12 Dec 2013 10:41:07 +0000 (18:41 +0800)]
btrfs-progs: remove NULL-ptr judge before free for btrfs-progs

free(3) already checks the pointer for NULL, no need to do it
on your own. This patch make the change globally.

Signed-off-by: Gui Hecheng <guihc.fnst@cn.fujitsu.com>
Signed-off-by: David Sterba <dsterba@suse.cz>
Signed-off-by: Chris Mason <clm@fb.com>
10 years agoBtrfs-progs: add sanity checks for btrfs device operations
Wang Shilong [Thu, 12 Dec 2013 07:47:00 +0000 (15:47 +0800)]
Btrfs-progs: add sanity checks for btrfs device operations

Make sure we are a block device firstly, this can avoid some
unnecessary ioctls operations.

Signed-off-by: Wang Shilong <wangsl.fnst@cn.fujitsu.com>
Signed-off-by: David Sterba <dsterba@suse.cz>
Signed-off-by: Chris Mason <clm@fb.com>
10 years agobtrfs-progs: fix resource leak in scrub_start()
Eric Sandeen [Thu, 12 Dec 2013 07:34:16 +0000 (15:34 +0800)]
btrfs-progs: fix resource leak in scrub_start()

Resolves-Coverity-CID: 1125934
Resolves-Coverity-CID: 1125935
Resolves-Coverity-CID: 1125936
Signed-off-by: Eric Sandeen <sandeen@redhat.com>
Signed-off-by: Wang Shilong <wangsl.fnst@cn.fujitsu.com>
Signed-off-by: David Sterba <dsterba@suse.cz>
Signed-off-by: Chris Mason <clm@fb.com>
10 years agoBtrfs-progs: deal with invalid key orderings and bad orphan items V2
Josef Bacik [Tue, 7 Jan 2014 20:19:35 +0000 (15:19 -0500)]
Btrfs-progs: deal with invalid key orderings and bad orphan items V2

A user had a fs where the objectid of an orphan item was not the actual orphan
item objectid.  This screwed up fsck because the block has keys in the wrong
order, also the fs scanning stuff will freak out because we have an inode with
nlink 0 and no orphan item.  So this patch is pretty big but is all related.

1) Deal with bad key ordering.  We can easily fix this up, so fix the checking
stuff to tell us exactly what it found when it said there was a problem.  Then
if it's bad key ordering we can reorder the keys and restart the scan.

2) Deal with bad keys.  If we find an orphan item with the wrong objectid it's
likely to screw with stuff, so keep track of these sort of things with a
bad_item list and just run through and delete any objects that don't make sense.
So far we just do this for orphan items but we could extend this as new stuff
pops up.

3) Deal with missing orphan items.  This is easy, if we have a file with i_nlink
set to 0 and no orphan item we can just add an orphan item.

4) Add the infrastructure to corrupt actual key values.  Needed this to create a
test image to verify I was fixing things properly.

This patch fixes the corrupt image I'm adding and passes the other make test
tests.  Thanks,

Signed-off-by: Josef Bacik <jbacik@fb.com>
Signed-off-by: David Sterba <dsterba@suse.cz>
Signed-off-by: Chris Mason <clm@fb.com>