platform/upstream/btrfs-progs.git
9 years agobtrfs-progs: move check_arg_type() to util.c
Gui Hecheng [Thu, 25 Dec 2014 01:16:34 +0000 (09:16 +0800)]
btrfs-progs: move check_arg_type() to util.c

The check_arg_type() function does quite generic thing, move it to
utils.c.

Signed-off-by: Gui Hecheng <guihc.fnst@cn.fujitsu.com>
Reviewed-by: Satoru Takeuchi <takeuchi_satoru@jp.fujitsu.com>
Signed-off-by: David Sterba <dsterba@suse.cz>
9 years agobtrfs-progs: Fix btrfs fi show by uuid and label
Justin Maggard [Tue, 23 Dec 2014 19:34:52 +0000 (11:34 -0800)]
btrfs-progs: Fix btrfs fi show by uuid and label

Commit 8be2fff (btrfs-progs: apply realpath for btrfs fi
show when mount point is given) changed the behavior of
btrfs fi show to return an error if the call to realpath()
failed.  This broke the ability to specify a filesystem by
uuid or label.

So let's not consider a failed call to realpath() as an
error.  If the user really specified a bad device, just
return nothing like we did before.

Signed-off-by: Justin Maggard <jmaggard10@gmail.com>
Reviewed-by: Gui Hecheng <guihc.fnst@cn.fujitsu.com>
Signed-off-by: David Sterba <dsterba@suse.cz>
9 years agobtrfs-progs: Fix a bug in reset_nlink() which may deletes the recovered file
Qu Wenruo [Tue, 23 Dec 2014 01:29:44 +0000 (09:29 +0800)]
btrfs-progs: Fix a bug in reset_nlink() which may deletes the recovered file

In reset_nlink(), we believe rec->found_link as accurate number of the
valid links. However it only records the number of found DIR_ITEM, so we
can't use it as reliable value.

Before this patch, in some case, leaf corruption recovery will believe
there is a valid backref but don't add_link() since it can't find any
valid one and don't put it into the lost+found dir.
So the recovered inode will be considered as an orphan item without
orphan item and repair_inode_orphan_item() will add orphan item for it,
causing all the filename/filetype we recovered being a waste of time.

Signed-off-by: Qu Wenruo <quwenruo@cn.fujitsu.com>
Signed-off-by: David Sterba <dsterba@suse.cz>
9 years agobtrfs-progs fix wrong memory free on check_is_root
Satoru Takeuchi [Thu, 18 Dec 2014 07:39:26 +0000 (16:39 +0900)]
btrfs-progs fix wrong memory free on check_is_root

When "/" is Btrfs, "btrfs property <subcommand> /" regards it
as non-root by mistake.

check_is_root() regards @object as a file system root if
the following two conditions are satisfied.

 a) Both @object and its parent directory are Btrfs object
    (file system root, subvolume, inode, and device
    used for Btrfs).
 b) fsid of the above mentioned two objects are different.

It doesn't work if @object is "/" because, in this case,
fsid of "/" and its parent (it's also "/"), are the same.

* Test environment

Two Btrfs file system (not subvolume) "/" and "/home/sat/mnt".

* How to reproduce

Submit "btrfs prop get" against the above mentioned file systems.

* Test Result

** Actual result (without my patch)

==========================
ro=false
label=                 # label is displayed because it's a file system root
ro=false               # label is not displayed even if it's a file system root
==========================
** Expected result (with my patch)

==========================
ro=false
label=
ro=false
label=foo            # label is displayed
===========================

Signed-off-by: Satoru Takeuchi <takeuchi_satoru@jp.fujitsu.com>
Reported-by: Naohiro Aota <naota@elisp.net>
Reviewed-by: Gui Hecheng <guihc.fnst@cn.fujitsu.com>
Signed-off-by: David Sterba <dsterba@suse.cz>
9 years agobtrfs-progs: let btrfs_free_path accept NULL
David Sterba [Fri, 19 Dec 2014 16:01:40 +0000 (17:01 +0100)]
btrfs-progs: let btrfs_free_path accept NULL

Same in kernel and matches semantics of free().

Resolves-Coverity-CID: 1054881
Reviewed-by: Eric Sandeen <sandeen@redhat.com>
Signed-off-by: David Sterba <dsterba@suse.cz>
9 years agobtrfs-progs: check allocation result in add_clone_source
David Sterba [Fri, 19 Dec 2014 15:55:32 +0000 (16:55 +0100)]
btrfs-progs: check allocation result in add_clone_source

Resolves-Coverity-CID: 1054894
Reviewed-by: Eric Sandeen <sandeen@redhat.com>
Signed-off-by: David Sterba <dsterba@suse.cz>
9 years agobtrfs-progs: check result of first_cache_extent
David Sterba [Fri, 19 Dec 2014 15:22:59 +0000 (16:22 +0100)]
btrfs-progs: check result of first_cache_extent

If the tree's empty, we'll get NULL and dereference it.

Resolves-Coverity-CID: 1248828
Reviewed-by: Eric Sandeen <sandeen@redhat.com>
Signed-off-by: David Sterba <dsterba@suse.cz>
9 years agobtrfs-progs: fragments, close output file on error
David Sterba [Fri, 19 Dec 2014 15:15:39 +0000 (16:15 +0100)]
btrfs-progs: fragments, close output file on error

Resolves-Coverity-CID: 1258794
Reviewed-by: Eric Sandeen <sandeen@redhat.com>
Signed-off-by: David Sterba <dsterba@suse.cz>
9 years agobtrfs-progs: corrupt block, add break after option U
David Sterba [Fri, 19 Dec 2014 15:11:59 +0000 (16:11 +0100)]
btrfs-progs: corrupt block, add break after option U

Resolves-Coverity-CID: 1258793
Reviewed-by: Eric Sandeen <sandeen@redhat.com>
Signed-off-by: David Sterba <dsterba@suse.cz>
9 years agobtrfs-progs: corrupt block, add missing break to option I
David Sterba [Fri, 19 Dec 2014 15:08:48 +0000 (16:08 +0100)]
btrfs-progs: corrupt block, add missing break to option I

Using -I would imply -d.

Resolves-Coverity-CID: 1258792
Reviewed-by: Eric Sandeen <sandeen@redhat.com>
Signed-off-by: David Sterba <dsterba@suse.cz>
9 years agobtrfs-progs: move contents of math.h to utils.h and delete
David Sterba [Fri, 19 Dec 2014 14:31:00 +0000 (15:31 +0100)]
btrfs-progs: move contents of math.h to utils.h and delete

Signed-off-by: David Sterba <dsterba@suse.cz>
9 years agobtrfs-progs: cleanup: avoid to use literal for getopt val
Satoru Takeuchi [Fri, 19 Dec 2014 05:31:54 +0000 (14:31 +0900)]
btrfs-progs: cleanup: avoid to use literal for getopt val

Signed-off-by: David Sterba <dsterba@suse.cz>
9 years agobtrfs-progs: Enhance the document of btrfs property
Satoru Takeuchi [Fri, 19 Dec 2014 07:22:49 +0000 (16:22 +0900)]
btrfs-progs: Enhance the document of btrfs property

Enhance the document of btrfs property as follows.

- Add the description about the candidates of <name>.
- Enrich the description of <object>.
- Fix typos and some redundancy.

Signed-off-by: Satoru Takeuchi <takeuchi_satoru@jp.fujitsu.com>
Reported-by: Naohiro Aota <naota@elisp.net>
Signed-off-by: David Sterba <dsterba@suse.cz>
9 years agobtrfs-progs: Remove deprecated _BSD_SOURCE macro.
Qu Wenruo [Fri, 19 Dec 2014 06:13:12 +0000 (14:13 +0800)]
btrfs-progs: Remove deprecated _BSD_SOURCE macro.

Fix the following gcc(>4.9) and clang warning:

In file included from cmds-receive.c:24:
In file included from ./kerncompat.h:22:
In file included from /usr/include/stdio.h:27:
/usr/include/features.h:148:3: warning: "_BSD_SOURCE and _SVID_SOURCE
are deprecated, use _DEFAULT_SOURCE" [-W#warnings]
  ^
1 warning generated.

Signed-off-by: Qu Wenruo <quwenruo@cn.fujitsu.com>
Reviewed-by: Satoru Takeuchi <takeuchi_satoru@jp.fujitsu.com>
Signed-off-by: David Sterba <dsterba@suse.cz>
9 years agobtrfs-progs: Remove a unused function offset_to_bitmap()
Qu Wenruo [Fri, 19 Dec 2014 06:13:11 +0000 (14:13 +0800)]
btrfs-progs: Remove a unused function offset_to_bitmap()

Fix the following clang warning:

free-space-cache.c:464:19: warning: unused function 'offset_to_bitmap'
[-Wunused-function]
static inline u64 offset_to_bitmap(struct btrfs_free_space_ctl *ctl,
                  ^
1 warning generated.

Signed-off-by: Qu Wenruo <quwenruo@cn.fujitsu.com>
Reviewed-by: Satoru Takeuchi <takeuchi_satoru@jp.fujitsu.com>
Signed-off-by: David Sterba <dsterba@suse.cz>
9 years agobtrfs-progs: Remove a unused function root_gtp_mask().
Qu Wenruo [Fri, 19 Dec 2014 06:13:10 +0000 (14:13 +0800)]
btrfs-progs: Remove a unused function root_gtp_mask().

Fix the following clang warning when compiling btrfs-progs:

radix-tree.c:78:21: warning: unused function 'root_gfp_mask'
[-Wunused-function]
static inline gfp_t root_gfp_mask(struct radix_tree_root *root)
                    ^
1 warning generated.

Signed-off-by: Qu Wenruo <quwenruo@cn.fujitsu.com>
Reviewed-by: Satoru Takeuchi <takeuchi_satoru@jp.fujitsu.com>
Signed-off-by: David Sterba <dsterba@suse.cz>
9 years agobtrfs-progs: Fix a clang dead-judgement warning in disk-io.c.
Qu Wenruo [Fri, 19 Dec 2014 06:13:09 +0000 (14:13 +0800)]
btrfs-progs: Fix a clang dead-judgement warning in disk-io.c.

When compiled with clang, the following warning is outputted.

disk-io.c:1017:15: warning: comparison of unsigned expression < 0 is
always false [-Wtautological-compare]
        if (dev_size < 0)
            ~~~~~~~~ ^ ~
1 warning generated.

This is because dev_size is defined as unsigned type, but lseek() will
return singed valued.
So the judgement will always to false.

Use temporary off_t return value to solve it.

Signed-off-by: Qu Wenruo <quwenruo@cn.fujitsu.com>
Reviewed-by: Satoru Takeuchi <takeuchi_satoru@jp.fujitsu.com>
Signed-off-by: David Sterba <dsterba@suse.cz>
9 years agobtrfs-progs: Makefile: Move linker only option to LDFLAGS
Qu Wenruo [Fri, 19 Dec 2014 06:13:08 +0000 (14:13 +0800)]
btrfs-progs: Makefile: Move linker only option to LDFLAGS

Move the linker only option -rdynamic to LDFLAGS.
This resolve lots of the following warning if using clang as CC:
clang: warning: argument unused during compilation: '-rdynamic'

Signed-off-by: Qu Wenruo <quwenruo@cn.fujitsu.com>
Reviewed-by: Satoru Takeuchi <takeuchi_satoru@jp.fujitsu.com>
Signed-off-by: David Sterba <dsterba@suse.cz>
9 years agobtrfs-progs: remove false dependency on libm
David Sterba [Fri, 19 Dec 2014 13:59:22 +0000 (14:59 +0100)]
btrfs-progs: remove false dependency on libm

It ends up in the final binary, but there are not math functions used.

Signed-off-by: David Sterba <dsterba@suse.cz>
9 years agobtrfs-progs: disable backtrace and define __always_inline
Merlijn Wajer [Sat, 13 Dec 2014 14:08:43 +0000 (15:08 +0100)]
btrfs-progs: disable backtrace and define __always_inline

Disable backtrace and define __always_inline when glibc is not used as
libc. This, together with some header changes allows btrfs-progs to
compile with musl-libc.

Signed-off-by: Merlijn Wajer <merlijn@wizzup.org>
Signed-off-by: David Sterba <dsterba@suse.cz>
9 years agobtrfs-progs: include headers required for musl-libc
Merlijn Wajer [Sat, 13 Dec 2014 14:07:25 +0000 (15:07 +0100)]
btrfs-progs: include headers required for musl-libc

This fixes various compilation errors where PATH_MAX and XATTR_SIZE_MAX
were missing. To my knowledge, this should have no bad side effects.

Signed-off-by: Merlijn Wajer <merlijn@wizzup.org>
Signed-off-by: David Sterba <dsterba@suse.cz>
9 years agobtrfs-progs: Add testcase for leaf-corrupted btrfsck repairing.
Qu Wenruo [Mon, 15 Dec 2014 03:16:29 +0000 (11:16 +0800)]
btrfs-progs: Add testcase for leaf-corrupted btrfsck repairing.

Add testcase for leaf-corrupted btrfsck repairing using the new
generate_image.sh method.

Signed-off-by: Qu Wenruo <quwenruo@cn.fujitsu.com>
9 years agoBtrfs-progs: add two new test images
Josef Bacik [Fri, 10 Oct 2014 20:50:42 +0000 (16:50 -0400)]
Btrfs-progs: add two new test images

This adds two new test images

1) 008-bad-offset-snapshots.  This has a corrupt item with multiple snapshots
pointing to it, to make sure the bad block repair stuff doesn't loop and
actually repairs stuff.  It also requires the dir index repair stuff to pass our
built in tests which is why it's not tied to the same commit.

2) 009-bad-dir-index-name.img. This has a corrupt name in a dir index to make
sure our dir index repair stuff is working properly.

Thanks,

Signed-off-by: Josef Bacik <jbacik@fb.com>
9 years agobtrfs-progs: check, update documentation
David Sterba [Thu, 18 Dec 2014 15:04:10 +0000 (16:04 +0100)]
btrfs-progs: check, update documentation

Add recently added options to manpage, a few other rewordings.

Signed-off-by: David Sterba <dsterba@suse.cz>
9 years agobtrfs-progs: unify unit mode parameters and variables
David Sterba [Thu, 18 Dec 2014 13:52:36 +0000 (14:52 +0100)]
btrfs-progs: unify unit mode parameters and variables

Use unsigned type and a common name everywhere.

Signed-off-by: David Sterba <dsterba@suse.cz>
9 years agobtrfs-progs: dev usage, update manpage
David Sterba [Thu, 18 Dec 2014 14:23:08 +0000 (15:23 +0100)]
btrfs-progs: dev usage, update manpage

Signed-off-by: David Sterba <dsterba@suse.cz>
9 years agobtrfs-progs: dev usage, add switches to set output units
David Sterba [Wed, 17 Dec 2014 17:16:18 +0000 (18:16 +0100)]
btrfs-progs: dev usage, add switches to set output units

Same set of options as 'fi df': binary and decimal bases, human readable
options etc.

Signed-off-by: David Sterba <dsterba@suse.cz>
9 years agobtrfs-progs: fi usage, update manpage
David Sterba [Thu, 18 Dec 2014 14:20:11 +0000 (15:20 +0100)]
btrfs-progs: fi usage, update manpage

Signed-off-by: David Sterba <dsterba@suse.cz>
9 years agobtrfs-progs: fi usage, add switches to set output units
David Sterba [Wed, 17 Dec 2014 17:11:58 +0000 (18:11 +0100)]
btrfs-progs: fi usage, add switches to set output units

Same set of options as 'fi df': binary and decimal bases, human readable
options etc.

Signed-off-by: David Sterba <dsterba@suse.cz>
9 years agobtrfs-progs: fi usage, change option for tabular output to T
David Sterba [Wed, 17 Dec 2014 17:05:48 +0000 (18:05 +0100)]
btrfs-progs: fi usage, change option for tabular output to T

We're going to use -t for tera- units prefix, same as 'fi df' does.

Signed-off-by: David Sterba <dsterba@suse.cz>
9 years agobtrfs-progs: Add a brief explanation of btrfs property in man 8 btrfs
Satoru Takeuchi [Tue, 16 Dec 2014 09:42:38 +0000 (18:42 +0900)]
btrfs-progs: Add a brief explanation of btrfs property in man 8 btrfs

As Chris reported at the following mail, although
btrfs property has its own manpage, man 8 btrfs-property,
there is no explanation about it in man 8 btrfs.

https://www.mail-archive.com/linux-btrfs@vger.kernel.org/msg40134.html

Signed-off-by: Satoru Takeuchi <takeuchi_satoru@jp.fujitsu.com>
Reported-by: Chris Murphy <lists@colorremedies.com>
Signed-off-by: David Sterba <dsterba@suse.cz>
9 years agobtrfs-progs: fix typedef
Karel Zak [Fri, 12 Dec 2014 10:58:04 +0000 (11:58 +0100)]
btrfs-progs: fix typedef

Signed-off-by: Karel Zak <kzak@redhat.com>
Signed-off-by: David Sterba <dsterba@suse.cz>
9 years agobtrfs-progs: tests: build prerequisities, btrfs-image and btrfs
David Sterba [Fri, 12 Dec 2014 14:49:26 +0000 (15:49 +0100)]
btrfs-progs: tests: build prerequisities, btrfs-image and btrfs

Build required utilities from the main Makefile and just check in the
test scripts.

Signed-off-by: David Sterba <dsterba@suse.cz>
9 years agobtrfs-progs: tests: use 'btrfs check' instead of btrfsck
David Sterba [Fri, 12 Dec 2014 14:50:41 +0000 (15:50 +0100)]
btrfs-progs: tests: use 'btrfs check' instead of btrfsck

Signed-off-by: David Sterba <dsterba@suse.cz>
9 years agobtrfs-progs: subvol delete: rename variable to match the option name
David Sterba [Thu, 27 Nov 2014 18:34:22 +0000 (19:34 +0100)]
btrfs-progs: subvol delete: rename variable to match the option name

Signed-off-by: David Sterba <dsterba@suse.cz>
9 years agobtrfs-progs: subvol delete: add verbosity option
David Sterba [Thu, 27 Nov 2014 18:26:35 +0000 (19:26 +0100)]
btrfs-progs: subvol delete: add verbosity option

Add an the option -v and use it for the transaction commit mode message.

Signed-off-by: David Sterba <dsterba@suse.cz>
9 years agobtrfs-progs: let subvol delete print commit mode inline
David Sterba [Thu, 27 Nov 2014 18:15:06 +0000 (19:15 +0100)]
btrfs-progs: let subvol delete print commit mode inline

There are options to specify if the subvolume deletion should wait for
commit after each subvol or at the end. This is reported at the
beginning and considered as a noise. We'd like to report the mode for
each subvolume instead.

http://www.mail-archive.com/linux-btrfs%40vger.kernel.org/msg34617.html

Reported-by: Marc MERLIN <marc@merlins.org
Signed-off-by: David Sterba <dsterba@suse.cz>
9 years agoBtrfs-progs, fsck: move root items repair after root rebuilding
Wang Shilong [Wed, 26 Nov 2014 02:58:52 +0000 (10:58 +0800)]
Btrfs-progs, fsck: move root items repair after root rebuilding

If some critical roots are corrupt, reapr_root_items() will fail,
this is detected by fsck_tests.sh's extent rebuilding tests.

Signed-off-by: Wang Shilong <wangshilong1991@gmail.com>
Signed-off-by: David Sterba <dsterba@suse.cz>
9 years agoBtrfs-progs: fsck: add ability to rebuild extent tree with snapshots
Wang Shilong [Wed, 26 Nov 2014 02:58:51 +0000 (10:58 +0800)]
Btrfs-progs: fsck: add ability to rebuild extent tree with snapshots

This patch makes us to rebuild a really corrupt extent tree with snapshots.
To implement this, we have to verify whether a block is FULL BACKREF.

This idea come from Josef Bacik:

1) We walk down the original tree, every eb we encounter has
btrfs_header_owner(eb) == root->objectid.  We add normal references
for this root (BTRFS_TREE_BLOCK_REF_KEY) for this root.  World peace
is achieved.

2) We walk down the snapshotted tree.  Say we didn't change anything
at all, it was just a clean snapshot and then boom.  So the
btrfs_header_owner(root->node) == root->objectid, so normal backref.
We walk down to the next level, where btrfs_header_owner(eb) !=
root->objectid, but the level above did, so we add normal refs for all
of these blocks.  We go down the next level, now our
btrfs_header_owner(parent) != root->objectid and
btrfs_header_owner(eb) != root->objectid.  This is where we need to
now go back and see if btrfs_header_owner(eb) currently has a ref on
eb.  If it does we are done, move on to the next block in this same
level, we don't have to go further down.

3) Harder case, we snapshotted and then changed things in the original
root.  Do the same thing as in step 2, but now we get down to
btrfs_header_owner(eb) != root->objectid && btrfs_header_owner(parent)
!= root->objectid.  We lookup the references we have for eb and notice
that btrfs_header_owner(eb) no longer refers to eb.  So now we must
set FULL_BACKREF on this extent reference and add a
SHARED_BLOCK_REF_KEY for this eb using the parent->start as the
offset.  And we need to keep walking down and doing the same thing
until we either hit level 0 or btrfs_header_owner(eb) has a ref on the
block.

Signed-off-by: Wang Shilong <wangsl.fnst@cn.fujitsu.com>
Signed-off-by: Wang Shilong <wangshilong1991@gmail.com>
Signed-off-by: David Sterba <dsterba@suse.cz>
9 years agoBtrfs-progs: fsck: deal with snapshot one by one when rebuilding extent tree
Wang Shilong [Wed, 26 Nov 2014 02:58:50 +0000 (10:58 +0800)]
Btrfs-progs: fsck: deal with snapshot one by one when rebuilding extent tree

Previously, we deal with node block firstly and then leaf block which can
maximize readahead. However, to rebuild extent tree, we need deal with snapshot
one by one.

This patch makes us deal with snapshot one by one if we need rebuild extent
tree otherwise we drop into previous way.

Signed-off-by: Wang Shilong <wangsl.fnst@cn.fujitsu.com>
Signed-off-by: Wang Shilong <wangshilong1991@gmail.com>
Signed-off-by: David Sterba <dsterba@suse.cz>
9 years agobtrfs-progs: basic support for TREE_SEARCH_V2 ioctl
David Sterba [Tue, 25 Nov 2014 17:46:16 +0000 (18:46 +0100)]
btrfs-progs: basic support for TREE_SEARCH_V2 ioctl

Add the interface and helper that checks if the v2 ioctl is supported.

Signed-off-by: David Sterba <dsterba@suse.cz>
9 years agobtrfs-progs: mkfs: make skinny-metadata default
David Sterba [Thu, 4 Dec 2014 18:16:30 +0000 (19:16 +0100)]
btrfs-progs: mkfs: make skinny-metadata default

According to public poll, this is desired and deemed to be safe. Feature
introduced in kernel 3.10 (Jun 2013).

Signed-off-by: David Sterba <dsterba@suse.cz>
9 years agobtrfs-progs: Add inode item rebuild function.
Qu Wenruo [Tue, 9 Dec 2014 08:27:32 +0000 (16:27 +0800)]
btrfs-progs: Add inode item rebuild function.

Add a basic inode item rebuild function for I_ERR_NO_INODE_ITEM.
The main use case is to repair btrfs which fs root has corrupted leaf,
but it is already working for case if the corrupteed fs root leaf/node
contains no inode extent_data.

The repair needs 3 elements for inode rebuild:
1. inode number
   This is quite easy, existing inode_record codes will detect it quite
   well.

2. inode type
   This is the trick part. The only reliable method is to recovery it from
   parent's dir_index/item.
   The remaining method will search for regular file extent for FILE
   type or child's backref for DIR(todo).
   Fallback will be FILE.

Inode name(inode_ref) will be recoverd by nlink repair function.

This is just a fundamental implement, some advanced recovery can be
improved later with btrfs-progs infrastructure change.

Signed-off-by: Qu Wenruo <quwenruo@cn.fujitsu.com>
Signed-off-by: David Sterba <dsterba@suse.cz>
9 years agobtrfs-progs: Recover btree by dropping corrupted leaf/node.
Qu Wenruo [Tue, 9 Dec 2014 08:27:31 +0000 (16:27 +0800)]
btrfs-progs: Recover btree by dropping corrupted leaf/node.

Current btrfsck can skip corrupted leaf and even repair some corrupted
one if their bytenr or key order is wrong.

However when it comes to csum error leaf, btrfsck can only skip them,
which is OK for read-only iteration, but is bad for write.

This patch introduce the new repair_btree() function to recover the
btree, deleting all the corrupted leaf/node including corresponding
extent, allowing later write into the btree.

This patch provides the basis for later recovery with corrupted leaves.

Signed-off-by: Qu Wenruo <quwenruo@cn.fujitsu.com>
Signed-off-by: David Sterba <dsterba@suse.cz>
9 years agobtrfs-progs: record and report leaf/node corruption in fs/subvol tree
Qu Wenruo [Tue, 9 Dec 2014 08:27:30 +0000 (16:27 +0800)]
btrfs-progs: record and report leaf/node corruption in fs/subvol tree

When leaf/node is corrupted in fs/subvolume root, btrfsck can ignore it
without much pain except some stderr messages complaining about it.
But this works fine doing read-only works, if we want to do deeper
recovery like rebuild missing inodes in the b+tree, it will cause
problem.

At least, info user that there is something wrong in the btree,
and this patch provides the base for later btree repair.

Signed-off-by: Qu Wenruo <quwenruo@cn.fujitsu.com>
Signed-off-by: David Sterba <dsterba@suse.cz>
9 years agobtrfs-progs: Add fixing function for inodes whose nlink dismatch
Qu Wenruo [Tue, 9 Dec 2014 08:27:29 +0000 (16:27 +0800)]
btrfs-progs: Add fixing function for inodes whose nlink dismatch

[BUG]
At least two users have already hit a bug in btrfs causing file
missing(Chromium config file).
The missing file's nlink is still 1 but its backref points to non-exist
parent inode.

This should be a kernel bug, but btrfsck fix is needed anyway.

[FIX]
For such nlink mismatch inode, we will reset all the inode_ref with its
dir_index/item (including valid one), and re-add the valids.
If there is no valid backref for it, create 'lost+found' under the root
of the subvolume and add link to the directory.

Reported-by: Mike Gavrilov <mikhail.v.gavrilov@gmail.com>
Reported-by: Ed Tomlinson <edt@aei.ca>
Signed-off-by: Qu Wenruo <quwenruo@cn.fujitsu.com>
Signed-off-by: David Sterba <dsterba@suse.cz>
9 years agobtrfs-progs: Add helper function find_file_name/type for nlink and inode_item repair.
Qu Wenruo [Tue, 9 Dec 2014 08:27:28 +0000 (16:27 +0800)]
btrfs-progs: Add helper function find_file_name/type for nlink and inode_item repair.

Add find_file_name() and find_file_type() function for later nlink and
inode_item repair.

Later nlink repair will use both function and and inode_item repair will
use find_file_type().

They are done by searching the backref list, dir_item/index for type
search and dir_item/index or inode_ref for name search.

Signed-off-by: Qu Wenruo <quwenruo@cn.fujitsu.com>
Signed-off-by: David Sterba <dsterba@suse.cz>
9 years agobtrfs-progs: Add count_digits() function to help calculate filename len.
Qu Wenruo [Tue, 9 Dec 2014 08:27:27 +0000 (16:27 +0800)]
btrfs-progs: Add count_digits() function to help calculate filename len.

Add count_digits() function in utils.h to help calculate filename with
ino suffix.

Signed-off-by: Qu Wenruo <quwenruo@cn.fujitsu.com>
Signed-off-by: David Sterba <dsterba@suse.cz>
9 years agobtrfs-progs: Add btrfs_mkdir() function for the incoming 'lost+found' fsck mechanism.
Qu Wenruo [Tue, 9 Dec 2014 08:27:26 +0000 (16:27 +0800)]
btrfs-progs: Add btrfs_mkdir() function for the incoming 'lost+found' fsck mechanism.

With the previous btrfs inode operations patches, now we can use
btrfs_mkdir() to create the 'lost+found' dir to do some data salvage in
btrfsck.

This patch along with previous ones will make data salvage easier.

Signed-off-by: Qu Wenruo <quwenruo@cn.fujitsu.com>
Signed-off-by: David Sterba <dsterba@suse.cz>
9 years agobtrfs-progs: Add btrfs_unlink() and btrfs_add_link() functions.
Qu Wenruo [Wed, 3 Dec 2014 04:18:30 +0000 (12:18 +0800)]
btrfs-progs: Add btrfs_unlink() and btrfs_add_link() functions.

Add btrfs_unlink() and btrfs_add_link() functions in inode.c,
for the incoming btrfs_mkdir() and later inode operations functions.

Signed-off-by: Qu Wenruo <quwenruo@cn.fujitsu.com>
Signed-off-by: David Sterba <dsterba@suse.cz>
9 years agobtrfs-progs: Record highest inode number before repair.
Qu Wenruo [Tue, 9 Dec 2014 08:27:24 +0000 (16:27 +0800)]
btrfs-progs: Record highest inode number before repair.

Record highest inode number before inode repair.

This is especially important for corrupted leaf case.
Under that case, if use btrfs_find_free_objectid, it may find a ino
existing in corrupted leaf but dropped by btree_recover.
If that happens, created dir will be referenced incorrectly since there
may be inode_ref or dir_index/item refers to it.

So we must record the highest inode number according to the inode_cache.
Inode_cache is OK since when a inode_ref or dir_index/item is found even
the referenced source is not found, it will be created.
If we record the highest inode number of inode_cache, and use
highest_inode + 1 as 'lost+found' dir, it will ensure the newly created
dir not conflicting with any possible inode.

This provides the basis for nlink or inode rebuild for repairing btrfs
with leaf/node corruption.

Signed-off-by: Qu Wenruo <quwenruo@cn.fujitsu.com>
Signed-off-by: David Sterba <dsterba@suse.cz>
9 years agobtrfs-progs: Add last_cache_extent() for extent-cache.
Qu Wenruo [Tue, 9 Dec 2014 08:27:23 +0000 (16:27 +0800)]
btrfs-progs: Add last_cache_extent() for extent-cache.

Allow direct search for the last cache extent.
Provide the basis for finding the last ino in inode_cache.

Signed-off-by: Qu Wenruo <quwenruo@cn.fujitsu.com>
Signed-off-by: David Sterba <dsterba@suse.cz>
9 years agobtrfs-progs: Import lookup/del_inode_ref() function.
Qu Wenruo [Wed, 3 Dec 2014 04:18:29 +0000 (12:18 +0800)]
btrfs-progs: Import lookup/del_inode_ref() function.

Import lookup/del_inode_ref() function in inode-item.c, as base functions
for the incoming btrfs_add_link() and btrfs_unlink() functions.

Also modify btrfs_insert_inode_ref() and split_leaf() making them able
to deal with EXTENT_IREF incompat flag.

Signed-off-by: Qu Wenruo <quwenruo@cn.fujitsu.com>
Signed-off-by: David Sterba <dsterba@suse.cz>
9 years agobtrfs-progs: Import btrfs_insert/del/lookup_extref() functions.
Qu Wenruo [Wed, 3 Dec 2014 04:18:28 +0000 (12:18 +0800)]
btrfs-progs: Import btrfs_insert/del/lookup_extref() functions.

Import btrfs_insert/del/lookup_extref() functions form kernel for the
incoming btrfs_add_link() and btrfs_unlink() functions.

Signed-off-by: Qu Wenruo <quwenruo@cn.fujitsu.com>
Signed-off-by: David Sterba <dsterba@suse.cz>
9 years agobtrfs-progs: convert: fix unable to rollback case with removed empty block groups
Gui Hecheng [Wed, 26 Nov 2014 02:43:41 +0000 (10:43 +0800)]
btrfs-progs: convert: fix unable to rollback case with removed empty block groups

Run fstests: btrfs/012 will fail with message:
unable to do rollback

It is because the rollback function checks sequentially each piece of space
to map to a certain block group. If some piece doesn't, rollback refuses to continue.

After kernel commit:
commit 47ab2a6c689913db23ccae38349714edf8365e0a
Btrfs: remove empty block groups automatically

Empty block groups are removed, so there are possible gaps:

|--block group 1--| |--block group 2--|
     ^
     |
    gap

So the piece of space of the gap belongs to a removed empty block group,
and rollback should detect this case, and feel free to continue.

Signed-off-by: Gui Hecheng <guihc.fnst@cn.fujitsu.com>
Signed-off-by: David Sterba <dsterba@suse.cz>
9 years agobtrfs-progs: remove dead condition for btrfs_map_block
Gui Hecheng [Wed, 26 Nov 2014 02:43:40 +0000 (10:43 +0800)]
btrfs-progs: remove dead condition for btrfs_map_block

The @search_cache_extent() only returns the next cache_extent or NULL,
it will never return the previous cache_extent.
So just remove the dead condition for previous cache_extent handle.

Signed-off-by: Gui Hecheng <guihc.fnst@cn.fujitsu.com>
Signed-off-by: David Sterba <dsterba@suse.cz>
9 years agobtrfs-progs: cleanup duplicate assignment of variable leaf for btrfs-restore
Gui Hecheng [Thu, 21 Aug 2014 02:56:52 +0000 (10:56 +0800)]
btrfs-progs: cleanup duplicate assignment of variable leaf for btrfs-restore

The value of variable leaf in while loop don't have to be set
for every round. Just move it outside.

Signed-off-by: Gui Hecheng <guihc.fnst@cn.fujitsu.com>
Signed-off-by: David Sterba <dsterba@suse.cz>
9 years agobtrfs-progs: remove duplicate pthread libs from build
David Sterba [Thu, 4 Dec 2014 16:17:56 +0000 (17:17 +0100)]
btrfs-progs: remove duplicate pthread libs from build

With the task-utils it's in the default LIBS flags now. We want to use
-pthread as it also sets flags for the preprocessor.

Signed-off-by: David Sterba <dsterba@suse.cz>
9 years agobtrfs-progs: convert: use task for progress indication of metadata creation
Silvio Fricke [Sun, 9 Nov 2014 22:16:56 +0000 (23:16 +0100)]
btrfs-progs: convert: use task for progress indication of metadata creation

Signed-off-by: Silvio Fricke <silvio.fricke@gmail.com>
Signed-off-by: David Sterba <dsterba@suse.cz>
9 years agobtrfs-progs: add task-utils
Silvio Fricke [Sun, 9 Nov 2014 22:16:55 +0000 (23:16 +0100)]
btrfs-progs: add task-utils

Support for monitoring progress of running tasks, based on timerfd and
pthreads.

Signed-off-by: Silvio Fricke <silvio.fricke@gmail.com>
Signed-off-by: David Sterba <dsterba@suse.cz>
9 years agoBtrfs-progs: allow fsck to take the tree bytenr
Josef Bacik [Fri, 31 Oct 2014 18:01:21 +0000 (14:01 -0400)]
Btrfs-progs: allow fsck to take the tree bytenr

Sometimes we have a pretty corrupted fs but have an old tree bytenr that we
could use, add the ability to specify the tree root bytenr.  Thanks,

Signed-off-by: Josef Bacik <jbacik@fb.com>
Tested-by: Ansgar Hockmann-Stolle <ansgar.hockmann-stolle@uni-osnabrueck.de>
Signed-off-by: David Sterba <dsterba@suse.cz>
9 years agobtrfs-progs: Add simple python front end to the search ioctl
Chris Mason [Tue, 23 Sep 2014 16:39:23 +0000 (12:39 -0400)]
btrfs-progs: Add simple python front end to the search ioctl

This is a starting point for a debugfs style python interface using
the search ioctl.  For now it can only do one thing, which is to
print out all the extents in a file and calculate the compression ratio.

Over time it will grow more features, especially for the kinds of things
we might run btrfs-debug-tree to find out.  Expect the usage and output
to change dramatically over time (don't hard code to it).

Signed-off-by: Chris Mason <clm@fb.com>
Signed-off-by: David Sterba <dsterba@suse.cz>
9 years agobtrfs-progs: fix wrong num_devices for btrfs fi show with seed devices
Gui Hecheng [Thu, 13 Nov 2014 01:19:29 +0000 (09:19 +0800)]
btrfs-progs: fix wrong num_devices for btrfs fi show with seed devices

The @fi_args->num_devices in @get_fs_info() does not include seed devices.
We could just correct it by searching the chunk tree and count how
many dev_items there are in total which includes seed devices.

Signed-off-by: Gui Hecheng <guihc.fnst@cn.fujitsu.com>
Signed-off-by: David Sterba <dsterba@suse.cz>
9 years agobtrfs-progs: remove BUG_ON on num of devices for btrfs fi show
Gui Hecheng [Fri, 7 Nov 2014 02:07:42 +0000 (10:07 +0800)]
btrfs-progs: remove BUG_ON on num of devices for btrfs fi show

The following BUG_ON:
BUG_ON(ndevs >= fi_args->num_devices)
is not needed, because it always fails with seed devices present.

Signed-off-by: Gui Hecheng <guihc.fnst@cn.fujitsu.com>
Signed-off-by: David Sterba <dsterba@suse.cz>
9 years agobtrfs-progs: skip fs with no seed when build seed/sprout mapping for fi show
Gui Hecheng [Tue, 11 Nov 2014 06:39:14 +0000 (14:39 +0800)]
btrfs-progs: skip fs with no seed when build seed/sprout mapping for fi show

There is no need to try to build seed/sprout mapping for those btrfs
without seed devices, so just skip such fs.
We could get the total number of devices from the disk super block, if it
equals the number of items in list @fs_devices->devices, then there shouldn't
be any seed devices.

Signed-off-by: Gui Hecheng <guihc.fnst@cn.fujitsu.com>
Signed-off-by: David Sterba <dsterba@suse.cz>
9 years agobtrfs-progs: rebuild missing block group during chunk recovery if possible
Qu Wenruo [Thu, 30 Oct 2014 02:54:03 +0000 (10:54 +0800)]
btrfs-progs: rebuild missing block group during chunk recovery if possible

Before the patch, chunk will be considered bad if the corresponding
block group is missing, even the only uncertain data is the 'used'
member of the block group.

This patch will try to recalculate the 'used' value of the block group
and rebuild it.
So even only chunk item and dev extent item is found, the chunk can be
recovered.
Although if extent tree is damanged and needed extent item can't be
read, the block group's 'used' value will be the block group length, to
prevent any later write/block reserve damaging the block group.
In that case, we will prompt user and recommend them to use
'--init-extent-tree' to rebuild extent tree if possible.

Signed-off-by: Qu Wenruo <quwenruo@cn.fujitsu.com>
Signed-off-by: David Sterba <dsterba@suse.cz>
9 years agobtrfs-progs: make the search target device routine more clear for fi show
Gui Hecheng [Thu, 30 Oct 2014 02:44:49 +0000 (10:44 +0800)]
btrfs-progs: make the search target device routine more clear for fi show

Extract the procedure of searching for a target device for fi show
from the @map_seed_devices() function to make it more clear.

Signed-off-by: Gui Hecheng <guihc.fnst@cn.fujitsu.com>
Signed-off-by: David Sterba <dsterba@suse.cz>
9 years agobtrfs-progs: rework calculations of fi usage
David Sterba [Thu, 26 Jun 2014 13:42:24 +0000 (15:42 +0200)]
btrfs-progs: rework calculations of fi usage

This patch reworks the basic calculations of 'fi usage'. It does not address
all problems but should make the code more prepared to do so.

The original code tries to estimate the free space that could lead to negative
numbers for some raid profiles:

Data, RAID1: total=147.00GiB, used=141.92GiB
System, RAID1: total=32.00MiB, used=36.00KiB
Metadata, RAID1: total=2.00GiB, used=1.17GiB
GlobalReserve, single: total=404.00MiB, used=0.00B

Overall:
    Device size:                 279.46GiB
    Device allocated:            298.06GiB
    Device unallocated:           16.00EiB
    Used:                        286.18GiB
    Free (estimated):              8.00EiB      (min: 8.00EiB)
    Data ratio:                       2.00
    Metadata ratio:                   2.00
    Global reserve:              404.00MiB      (used: 0.00B)

Eg. "Device size" - "Device allocated" = negative number or a very large
positive, hence the EiB values.

There are logical and raw numbers multiplied by ratios mixed together,
so the new code makes it explicit which kind is being used. The data and
metadata ratios are calculated separately.

Output after this patch will look like:

Overall:
    Device size:                 558.92GiB
    Device allocated:            298.06GiB
    Device unallocated:          260.86GiB
    Used:                        286.18GiB
    Free (estimated):            135.51GiB      (min: 135.51GiB)
    Data ratio:                       2.00
    Metadata ratio:                   2.00
    Global reserve:              404.00MiB      (used: 0.00B)

Data,RAID1: Size:147.00GiB, Used:141.92GiB
   /dev/sdc      147.00GiB
   /dev/sdd      147.00GiB

Metadata,RAID1: Size:2.00GiB, Used:1.17GiB
   /dev/sdc        2.00GiB
   /dev/sdd        2.00GiB

System,RAID1: Size:32.00MiB, Used:36.00KiB
   /dev/sdc       32.00MiB
   /dev/sdd       32.00MiB

Unallocated:
   /dev/sdc      130.43GiB
   /dev/sdd      130.43GiB

Changes:
* Device size is now the raw size, same for the following three
* Free is the logical size
* Max/min were reduced to just min

Filesystem      Size  Used Avail Use% Mounted on
/dev/sdc        280G  144G  141G  51% /mnt/sdc

The difference between Avail and Free is there because userspace tool does a
different guesswork than kernel.

Issues not addressed by this patch:
* RAID56 profiles are not handled
* mixed profiles are not handled

Signed-off-by: David Sterba <dsterba@suse.cz>
9 years agobtrfs-progs: fix improper output msg for btrfs-fi-usage
Gui Hecheng [Thu, 24 Jul 2014 03:21:54 +0000 (11:21 +0800)]
btrfs-progs: fix improper output msg for btrfs-fi-usage

Even if run as root:
# su
# btrfs file usage <path> <== path exits outside the mnt point
We get the output:
WARNING: ..., run as root
WARNING: ..., run as root
ERROR:...

It is because in load_chunk_info, the errno of ioctl is not judged
but rather the ret value of ioctl is judged. And the ret value of
ioctl is -1 which happens to match -EPERM exactly.
So the outer warning is printed.

Just judge the errno of ioctl and prevent the ret value of load_chunk_info
to be -1 in other error conditions.

For load_device_info, the problem and fix is the same.
After the fix, the 'run as root' WARNINGs will not show up in this condition.

Signed-off-by: Gui Hecheng <guihc.fnst@cn.fujitsu.com>
Signed-off-by: David Sterba <dsterba@suse.cz>
9 years agobtrfs-progs: output the correct path when fi-usage failed
Gui Hecheng [Thu, 24 Jul 2014 03:27:28 +0000 (11:27 +0800)]
btrfs-progs: output the correct path when fi-usage failed

When we exec the following cmd:
# btrfs file usage -t <path>  <-- an invalid path
output:
# ERROR: can't access '-t'
should be:
# ERROR: can't access 'path'

Just replace the static 'argv[1]' with 'argv[i]'.

Signed-off-by: Gui Hecheng <guihc.fnst@cn.fujitsu.com>
Signed-off-by: David Sterba <dsterba@suse.cz>
9 years agobtrfs-progs: fix wrong data ratio for raid56 in btrfs-file-usage
Gui Hecheng [Thu, 24 Jul 2014 03:21:52 +0000 (11:21 +0800)]
btrfs-progs: fix wrong data ratio for raid56 in btrfs-file-usage

When run btrfs-file-usage on a btrfs with data profile raid5/6,
the output message for "Free" & "Data to device ratio" seems wrong
as follows:
    ...
    Device size:  100.00GiB
    Device allocated:    2.04GiB
    Device unallocated:   97.96GiB
    Used:    1.12MiB
    Free (Estimated):  197.89GiB <== Free > Device size
    Data to device ratio:      198 % <== > 100%
    Global reserve:      0.00B
    ...

It is because the function get_raid56_used() is not iterating the
chunk_info array correctly, it is just repeating adding the first
chunk_info statistics.
Just add a ptr to iterate over the array.

Signed-off-by: Gui Hecheng <guihc.fnst@cn.fujitsu.com>
Signed-off-by: David Sterba <dsterba@suse.cz>
9 years agobtrfs-progs: provide better error message for raid profile mismatch
Hidetoshi Seto [Fri, 16 May 2014 08:20:56 +0000 (17:20 +0900)]
btrfs-progs: provide better error message for raid profile mismatch

Current error messages are like following:
  Error: unable to create FS with metadata profile 32 (have 2 devices)
  Error: unable to create FS with metadata profile 256 (have 2 devices)

Obviously it is hard for users to interpret "profile XX" to proper
meaning, such as "raidN". So use recongizable string instead of
internal numerical value. In case of "DUP", use an explicit message.

Plus this patch fix a bug that message mistake metadata profile
for data profile.

After applying this patch, messages will be like:
  Error: DUP is not allowed when FS have multiple devices
  Error: unable to create FS with metadata profile RAID6 (have 2
  devices but 3 devices are required)

Signed-off-by: Hidetoshi Seto <seto.hidetoshi@jp.fujitsu.com>
Signed-off-by: David Sterba <dsterba@suse.cz>
9 years agobtrfs-progs: hide FS occupied from device usage output
David Sterba [Wed, 14 May 2014 18:06:47 +0000 (20:06 +0200)]
btrfs-progs: hide FS occupied from device usage output

The term has not seen an agreement and we don't want to change it once
it's in non-development branches or even released.

Discussion under the patch:
http://thread.gmane.org/gmane.comp.file-systems.btrfs/34627

Signed-off-by: David Sterba <dsterba@suse.cz>
9 years agobtrfs-progs: move global reserve to overall summary
David Sterba [Tue, 29 Apr 2014 15:32:22 +0000 (17:32 +0200)]
btrfs-progs: move global reserve to overall summary

It looks confusing among the chunks, it is not in fact a chunk type.

Sample:
Overall:
    Device size:                  35.00GiB
    Device allocated:              8.07GiB
    Device unallocated:           26.93GiB
    Used:                          1.12MiB
    Free (Estimated):             17.57GiB      (Max: 30.98GiB, min: 17.52GiB)
    Data to device ratio:             50 %
    Global reserve:               16.00MiB      (used: 0.00B)
...

Signed-off-by: David Sterba <dsterba@suse.cz>
9 years agobtrfs-progs: clean up return codes and paths
David Sterba [Mon, 28 Apr 2014 16:55:05 +0000 (18:55 +0200)]
btrfs-progs: clean up return codes and paths

Use the common patterns with one return statement at the end, pass down error

Signed-off-by: David Sterba <dsterba@suse.cz>
9 years agobtrfs-progs: replace df_pretty_sizes with pretty_size_mode
David Sterba [Mon, 28 Apr 2014 16:13:16 +0000 (18:13 +0200)]
btrfs-progs: replace df_pretty_sizes with pretty_size_mode

Signed-off-by: David Sterba <dsterba@suse.cz>
9 years agobtrfs-progs: cleanup filesystem/device usage code
David Sterba [Fri, 25 Apr 2014 17:39:11 +0000 (19:39 +0200)]
btrfs-progs: cleanup filesystem/device usage code

The main point of this is to load the device and chunk infos at one
place and pass down to the printers. The EPERM is handled separately, in
case kernel does not give us all the information about chunks or
devices, but we want to warn and print at least something.

For non-root users, 'filesystem usage' prints only the overall stats and
warns about RAID5/6.

The sole cleanup changes affect mostly the modified code and the related
functions, should be reasonably small.

Signed-off-by: David Sterba <dsterba@suse.cz>
9 years agobtrfs-progs: add section of overall filesystem usage
David Sterba [Fri, 25 Apr 2014 15:24:40 +0000 (17:24 +0200)]
btrfs-progs: add section of overall filesystem usage

The 'fi usage' lacks an overall report, this used to be in the enhanced
df command. Add it back.

Sample:
Overall:
    Device size:                  35.00GiB
    Device allocated:              8.07GiB
    Device unallocated:           26.93GiB
    Used:                          1.12MiB
    Free (Estimated):             17.57GiB      (Max: 30.98GiB, min: 17.52GiB)
    Data to device ratio:             50 %
...

Signed-off-by: David Sterba <dsterba@suse.cz>
9 years agobtrfs-progs: compare unallocated space against the correct value
David Sterba [Thu, 24 Apr 2014 16:57:12 +0000 (18:57 +0200)]
btrfs-progs: compare unallocated space against the correct value

The device may not be fully occupied by the filesystem, the value of
Unallocated should not be calculated against the device size but the
size provided by DEV_INFO.

Signed-off-by: David Sterba <dsterba@suse.cz>
9 years agobtrfs-progs: Print more info about device sizes
David Sterba [Thu, 24 Apr 2014 16:32:27 +0000 (18:32 +0200)]
btrfs-progs: Print more info about device sizes

The entire device size may not be available to the filesystem, eg. if
it's modified via resize. Print this information if it can be obtained
from the DEV_INFO ioctl.

Print the device ID on the same line as the device name and move size to
the next line.

Sample:
/dev/sda7, ID: 3
   Device size:            10.00GiB
   FS occupied:             5.00GiB
   Data,RAID10:           512.00MiB
   Metadata,RAID10:       512.00MiB
   System,RAID10:           4.00MiB
   Unallocated:             9.00GiB

Signed-off-by: David Sterba <dsterba@suse.cz>
9 years agobtrfs-progs: zero out structures before calling ioctl
David Sterba [Thu, 24 Apr 2014 16:37:50 +0000 (18:37 +0200)]
btrfs-progs: zero out structures before calling ioctl

Signed-off-by: David Sterba <dsterba@suse.cz>
9 years agobtrfs-progs: check if we can't get info from ioctls due to permissions
David Sterba [Thu, 24 Apr 2014 13:21:16 +0000 (15:21 +0200)]
btrfs-progs: check if we can't get info from ioctls due to permissions

The TREE_SEARCH ioctl is root-only, FS_INFO will be available for
non-root users with an updated kernel, let the user know.

Signed-off-by: David Sterba <dsterba@suse.cz>
9 years agobtrfs-progs: move device usage to cmds-device, more cleanups
David Sterba [Wed, 23 Apr 2014 17:00:22 +0000 (19:00 +0200)]
btrfs-progs: move device usage to cmds-device, more cleanups

Move the command definitions where they belong, keep common 'usage'
functions in cmds-fi-disk_usage.c and add exports.

Rename structures containing 'disk' to 'device'.

Fix whitespace in the modified code.

Signed-off-by: David Sterba <dsterba@suse.cz>
9 years agobtrfs-progs: add original 'df' and rename 'disk_usage' to 'usage'
David Sterba [Wed, 23 Apr 2014 16:47:52 +0000 (18:47 +0200)]
btrfs-progs: add original 'df' and rename 'disk_usage' to 'usage'

Add back the original output of the 'btrfs fi df' command for backward
compatibility. The rich output is moved from 'disk_usage' to 'usage'.

Agreed in http://www.spinics.net/lists/linux-btrfs/msg31698.html

Signed-off-by: David Sterba <dsterba@suse.cz>
9 years agoBtrfs-progs: fi usage: free memory if realloc fails
Rakesh Pandit [Sat, 19 Apr 2014 11:12:03 +0000 (14:12 +0300)]
Btrfs-progs: fi usage: free memory if realloc fails

Lets not assign *info_ptr to 0 before calling free on it and lose
track of already allocated memory if realloc fails in
add_info_to_list. Lets call free first.

Signed-off-by: Rakesh Pandit <rakesh@tuxera.com>
Signed-off-by: David Sterba <dsterba@suse.cz>
9 years agobtrfs-progs: Fix memleak in get_raid56_used()
Qu Wenruo [Wed, 19 Mar 2014 06:10:02 +0000 (06:10 +0000)]
btrfs-progs: Fix memleak in get_raid56_used()

Fix memleak in get_raid56_used().

Signed-off-by: Qu Wenruo <quwenruo@cn.fujitsu.com>
Signed-off-by: David Sterba <dsterba@suse.cz>
9 years agobtrfs-progs: cleanup dead return after usage() for fi-disk_usage
Gui Hecheng [Thu, 6 Mar 2014 03:36:46 +0000 (11:36 +0800)]
btrfs-progs: cleanup dead return after usage() for fi-disk_usage

The usage() calls exit() internally, so remove the return after it.

Signed-off-by: Gui Hecheng <guihc.fnst@cn.fujitsu.com>
Signed-off-by: David Sterba <dsterba@suse.cz>
9 years agobtrfs-progs: Add btrfs device disk-usage command
Goffredo Baroncelli [Thu, 13 Feb 2014 19:20:12 +0000 (20:20 +0100)]
btrfs-progs: Add btrfs device disk-usage command

Signed-off-by: Goffredo Baroncelli <kreijack@inwind.it>
Signed-off-by: David Sterba <dsterba@suse.cz>
9 years agobtrfs-progs: Add command btrfs filesystem disk-usage
Goffredo Baroncelli [Thu, 13 Feb 2014 19:19:50 +0000 (20:19 +0100)]
btrfs-progs: Add command btrfs filesystem disk-usage

Signed-off-by: Goffredo Baroncelli <kreijack@inwind.it>
Signed-off-by: David Sterba <dsterba@suse.cz>
9 years agobtrfs-progs: Add helpers functions to handle the printing of data in tabular format
Goffredo Baroncelli [Thu, 13 Feb 2014 19:19:21 +0000 (20:19 +0100)]
btrfs-progs: Add helpers functions to handle the printing of data in tabular format

This patch adds some functions to manage the printing of the data in
tabular format.

The function
struct string_table *table_create(int columns, int rows)
creates an (empty) table.

The functions
char *table_printf(struct string_table *tab, int column,
int row, char *fmt, ...)
char *table_vprintf(struct string_table *tab, int column,
int row, char *fmt, va_list ap)
populate the table with text. To align the text to the left, the text
shall be prefixed with '<', otherwise the text shall be prefixed by a
'>'. If the first character is a '=', the the text is replace by a
sequence of '=' to fill the column width.

The function
void table_free(struct string_table *)
frees all the data associated to the table.

The function
void table_dump(struct string_table *tab)
prints the table on stdout.

Signed-off-by: Goffredo Baroncelli <kreijack@inwind.it>
Signed-off-by: David Sterba <dsterba@suse.cz>
9 years agobtrfs-progs: Enhance the command btrfs filesystem df
Goffredo Baroncelli [Thu, 13 Feb 2014 19:19:01 +0000 (20:19 +0100)]
btrfs-progs: Enhance the command btrfs filesystem df

Enhance the command "btrfs filesystem df" to show space usage information
for a mount point(s). It shows also an estimation of the space available,
on the basis of the current one used.

Signed-off-by: Goffredo Baroncelli <kreijack@inwind.it>
[code moved under #if 0 instead of deletion]
Signed-off-by: David Sterba <dsterba@suse.cz>
9 years agobtrfs-progs: move group type and profile pretty printers to utils
David Sterba [Thu, 23 Oct 2014 17:05:31 +0000 (19:05 +0200)]
btrfs-progs: move group type and profile pretty printers to utils

Move and add the btrfs_ prefix.

Signed-off-by: David Sterba <dsterba@suse.cz>
9 years agoBtrfs progs 3.17.3
David Sterba [Thu, 4 Dec 2014 13:47:18 +0000 (14:47 +0100)]
Btrfs progs 3.17.3

Signed-off-by: David Sterba <dsterba@suse.cz>
9 years agobtrfs-progs: print root dir verbose error in fsck
Qu Wenruo [Wed, 3 Dec 2014 04:18:27 +0000 (12:18 +0800)]
btrfs-progs: print root dir verbose error in fsck

Before this patch, when btrfsck found an error in root dir, it will only
output the following message "root %llu root dir %llu error" without any
detailed error.

Just add print_inode_error() to print out the whole error.

Signed-off-by: Qu Wenruo <quwenruo@cn.fujitsu.com>
Signed-off-by: David Sterba <dsterba@suse.cz>
9 years agoBtrfs-progs: add_refs_for_implied: Use root_id instead of root_bytenr.
Chandan Rajendra [Thu, 27 Nov 2014 04:56:45 +0000 (10:26 +0530)]
Btrfs-progs: add_refs_for_implied: Use root_id instead of root_bytenr.

resolve_one_root() returns the objectid of a tree rather than the logical
address of the root node. Hence using root_bytenr is misleading. Fix this.

Signed-off-by: Chandan Rajendra <chandan@linux.vnet.ibm.com>
Signed-off-by: David Sterba <dsterba@suse.cz>
9 years agobtrfs-progs: apply realpath for btrfs fi show when mount point is given
Gui Hecheng [Thu, 27 Nov 2014 02:01:35 +0000 (10:01 +0800)]
btrfs-progs: apply realpath for btrfs fi show when mount point is given

For now,
# btrfs fi show /mnt/btrfs
gives info correctly, while
# btrfs fi show /mnt/btrfs/
gives nothing.

This implies that the @realpath() function should be applied to
unify the behavior.

Made a more clear comment right above the call as well.

Signed-off-by: Gui Hecheng <guihc.fnst@cn.fujitsu.com>
Signed-off-by: David Sterba <dsterba@suse.cz>
9 years agobtrfs-progs: fix return value problem for btrfs sub show
Gui Hecheng [Thu, 27 Nov 2014 02:01:34 +0000 (10:01 +0800)]
btrfs-progs: fix return value problem for btrfs sub show

If you exec:
# btrfs sub show <dir> <== non-subvolume dir
The cmd print error messages as expected, but returns 0.
By convetion, it should return non-zero and we should explicitly
set it before it goto out.

With other pieces adopted:
1) removed a unnecessary return value set -EINVAL
2) fixed another code branch which may return 0 upon error.
3) with 2) applied, the ret = 0 follows can be removed

Signed-off-by: Gui Hecheng <guihc.fnst@cn.fujitsu.com>
Signed-off-by: David Sterba <dsterba@suse.cz>
9 years agobtrfs-progs: fix spacing in error messages
David Sterba [Tue, 25 Nov 2014 18:50:12 +0000 (19:50 +0100)]
btrfs-progs: fix spacing in error messages

Signed-off-by: David Sterba <dsterba@suse.cz>
9 years agoBtrfs-progs: fix a bug of converting sparse ext2/3/4
Liu Bo [Tue, 25 Nov 2014 09:35:52 +0000 (17:35 +0800)]
Btrfs-progs: fix a bug of converting sparse ext2/3/4

When converting a sparse ext* filesystem, btrfs-convert adds checksum extents
for empty extents, whose disk_bytenr = 0, and this can end up with some weird
problems, one of them is the failure of reading free space cache inode on
mounting converted btrfs.

The fix is simple, just to skip making checksum on empty extents.

Signed-off-by: Liu Bo <bo.li.liu@oracle.com>
Signed-off-by: David Sterba <dsterba@suse.cz>
9 years agobtrfs-progs: add new dev replace result
Eryu Guan [Mon, 13 Oct 2014 04:42:13 +0000 (12:42 +0800)]
btrfs-progs: add new dev replace result

A new dev replace result was introduced by kernel commit

Btrfs: return failure if btrfs_dev_replace_finishing() failed

Make the userspace know about the new result too.

Signed-off-by: Eryu Guan <guaneryu@gmail.com>
Signed-off-by: David Sterba <dsterba@suse.cz>