platform/upstream/btrfs-progs.git
9 years agobtrfs-progs: drop unused parameter from make_btrfs
David Sterba [Wed, 1 Jul 2015 15:54:43 +0000 (17:54 +0200)]
btrfs-progs: drop unused parameter from make_btrfs

Signed-off-by: David Sterba <dsterba@suse.com>
9 years agobtrfs-progs: move make_btrfs arguments to a struct
David Sterba [Wed, 1 Jul 2015 15:49:21 +0000 (17:49 +0200)]
btrfs-progs: move make_btrfs arguments to a struct

No functional change, just introduce the structure and switch current
users.

Signed-off-by: David Sterba <dsterba@suse.com>
9 years agobtrfs-progs: add 'device remove' alias to completion
David Sterba [Wed, 1 Jul 2015 13:39:59 +0000 (15:39 +0200)]
btrfs-progs: add 'device remove' alias to completion

Signed-off-by: David Sterba <dsterba@suse.com>
9 years agobtrfs-progs: doc: fix short explanation of restore in btrfs
Tsutomu Itoh [Tue, 30 Jun 2015 23:56:52 +0000 (08:56 +0900)]
btrfs-progs: doc: fix short explanation of restore in btrfs

Short explanation of restore is wrong. Fix it.

Signed-off-by: Tsutomu Itoh <t-itoh@jp.fujitsu.com>
Signed-off-by: David Sterba <dsterba@suse.com>
9 years agobtrfs-progs: check for item end outside of leaf
David Sterba [Wed, 1 Jul 2015 13:20:23 +0000 (15:20 +0200)]
btrfs-progs: check for item end outside of leaf

Enhance leaf check to verify item ends that looks otherwise fine but
would exceed leaf. Same check is done in kernel.

Reported-by: Robert Marklund <robbelibobban@gmail.com>
Signed-off-by: David Sterba <dsterba@suse.com>
9 years agobtrfs-progs: drop argument from attribute deprecated
David Sterba [Tue, 30 Jun 2015 13:05:07 +0000 (15:05 +0200)]
btrfs-progs: drop argument from attribute deprecated

The optional argument to attribute 'deprecated' has been introduced in
gcc 4.5, and does not build on 4.4 which is still in use. The
recommended replacements are mentioned in the comment, not absolutely
necessary to repeat it via the attribute.

Reported-by: Amr El-Sharnoby <amr.elsharnoby@horizontechs.com>
Signed-off-by: David Sterba <dsterba@suse.cz>
9 years agobtrfs-progs: Add nbytes output for print-tree and reformat inode output
Qu Wenruo [Fri, 19 Jun 2015 03:49:19 +0000 (11:49 +0800)]
btrfs-progs: Add nbytes output for print-tree and reformat inode output

The original implementation doesn't output the nbytes for an inode.
Add the output and since the output is too long, reformat it to multi
lines.

This is very handy to debug related bugs.

Signed-off-by: Qu Wenruo <quwenruo@cn.fujitsu.com>
Signed-off-by: David Sterba <dsterba@suse.cz>
9 years agobtrfs-progs: no extra newline between aliased commands in help text
David Sterba [Fri, 26 Jun 2015 14:44:29 +0000 (16:44 +0200)]
btrfs-progs: no extra newline between aliased commands in help text

Signed-off-by: David Sterba <dsterba@suse.cz>
9 years agobtrfs-progs: alias btrfs device delete to btrfs device remove
Omar Sandoval [Wed, 24 Jun 2015 16:09:17 +0000 (09:09 -0700)]
btrfs-progs: alias btrfs device delete to btrfs device remove

There's an awkward asymmetry between btrfs device add and btrfs device
delete. Resolve this by aliasing delete to remove.

Signed-off-by: Omar Sandoval <osandov@fb.com>
Signed-off-by: David Sterba <dsterba@suse.cz>
9 years agobtrfs-progs: replace struct cmd_group->hidden with flags
Omar Sandoval [Wed, 24 Jun 2015 16:09:16 +0000 (09:09 -0700)]
btrfs-progs: replace struct cmd_group->hidden with flags

We're also going to want to support aliases, so rather than adding
another member, replace "hidden" with a "flags" member.

Signed-off-by: Omar Sandoval <osandov@fb.com>
Signed-off-by: David Sterba <dsterba@suse.cz>
9 years agobtrfs-progs: inspect: Fix out of bounds string termination.
Patrik Lundquist [Fri, 26 Jun 2015 08:43:56 +0000 (10:43 +0200)]
btrfs-progs: inspect: Fix out of bounds string termination.

Signed-off-by: Patrik Lundquist <patrik.lundquist@gmail.com>
Signed-off-by: David Sterba <dsterba@suse.cz>
9 years agobtrfs-progs: doc: update defrag page
David Sterba [Fri, 26 Jun 2015 14:23:00 +0000 (16:23 +0200)]
btrfs-progs: doc: update defrag page

- update wording for -t
- add optional argument to -c

Signed-off-by: David Sterba <dsterba@suse.cz>
9 years agobtrfs-progs: defrag, check target extent earlier
David Sterba [Thu, 25 Jun 2015 17:36:06 +0000 (19:36 +0200)]
btrfs-progs: defrag, check target extent earlier

Print a warning if the target extent size (option -t) is larger than 4G.

Signed-off-by: David Sterba <dsterba@suse.cz>
9 years agobtrfs-progs: fix defrag threshold overflow
Patrik Lundquist [Wed, 24 Jun 2015 14:21:06 +0000 (16:21 +0200)]
btrfs-progs: fix defrag threshold overflow

btrfs fi defrag -t 1T overflows the u32 thresh variable and default,
instead of max, threshold is used.

Signed-off-by: Patrik Lundquist <patrik.lundquist@gmail.com>
Signed-off-by: David Sterba <dsterba@suse.cz>
9 years agobtrfs-progs: doc: mkfs.btrfs: document -O^
Adam Borowski [Tue, 23 Jun 2015 22:46:13 +0000 (00:46 +0200)]
btrfs-progs: doc: mkfs.btrfs: document -O^

Signed-off-by: Adam Borowski <kilobyte@angband.pl>
Signed-off-by: David Sterba <dsterba@suse.cz>
9 years agoBtrfs progs v4.1
David Sterba [Mon, 22 Jun 2015 14:48:41 +0000 (16:48 +0200)]
Btrfs progs v4.1

Signed-off-by: David Sterba <dsterba@suse.cz>
9 years agobtrfs-progs: docs: new size options for fi show
Qu Wenruo [Mon, 22 Jun 2015 14:13:14 +0000 (16:13 +0200)]
btrfs-progs: docs: new size options for fi show

Signed-off-by: Qu Wenruo <quwenruo@cn.fujitsu.com>
Signed-off-by: David Sterba <dsterba@suse.cz>
9 years agobtrfs-progs: Allow "filesystem show" command to handle different units
Qu Wenruo [Thu, 18 Jun 2015 06:46:11 +0000 (14:46 +0800)]
btrfs-progs: Allow "filesystem show" command to handle different units

Now "filesystem show" command can handle different units now.

This is handy for higher level programs to get accurate output from "fi
show" command.

Signed-off-by: Qu Wenruo <quwenruo@cn.fujitsu.com>
Signed-off-by: David Sterba <dsterba@suse.cz>
9 years agobtrfs-progs: INSTALL: fix typos
David Sterba [Sun, 21 Jun 2015 23:39:27 +0000 (01:39 +0200)]
btrfs-progs: INSTALL: fix typos

Signed-off-by: David Sterba <dsterba@suse.cz>
9 years agobtrfs-progs: configure: fix typo in summary
David Sterba [Sun, 21 Jun 2015 23:13:48 +0000 (01:13 +0200)]
btrfs-progs: configure: fix typo in summary

Signed-off-by: David Sterba <dsterba@suse.cz>
9 years agobtrfs-progs: btrfstune: print correct current uuid during rewrite
David Sterba [Thu, 18 Jun 2015 17:47:28 +0000 (19:47 +0200)]
btrfs-progs: btrfstune: print correct current uuid during rewrite

uuid_unparse is supposed to take the ASCII representation of a UUID, so
we have to pass the raw fsid buffer.

Reported-by: Mike Fleetwood <mike.fleetwood@googlemail.com>
Signed-off-by: David Sterba <dsterba@suse.cz>
9 years agobtrfs-progs: btrfstune: print lowercase uuid during uuid rewrite
David Sterba [Thu, 18 Jun 2015 17:40:01 +0000 (19:40 +0200)]
btrfs-progs: btrfstune: print lowercase uuid during uuid rewrite

We're using lowercase everywhere else.

Reported-by: Mike Fleetwood <mike.fleetwood@googlemail.com>
Signed-off-by: David Sterba <dsterba@suse.cz>
9 years agobtrfs-progs: tests: verify btrfstune output during uuid-rewrite
David Sterba [Thu, 18 Jun 2015 17:35:58 +0000 (19:35 +0200)]
btrfs-progs: tests: verify btrfstune output during uuid-rewrite

The 'Current fsid:' value does not match the real fsid.

Reported-by: Mike Fleetwood <mike.fleetwood@googlemail.com>
Signed-off-by: David Sterba <dsterba@suse.cz>
9 years agobtrfs-progs: map-logical: Rework map-logical logics
Qu Wenruo [Wed, 17 Jun 2015 07:49:04 +0000 (15:49 +0800)]
btrfs-progs: map-logical: Rework map-logical logics

[BUG]
The original map-logical has the following problems:
1) Assert if we pass any tree root bytenr.
The problem is easy to trigger, here the number 29622272 is the bytenr of tree root:

 # btrfs-map-logical -l 29622272 /dev/sda6
 mirror 1 logical 29622272 physical 38010880 device /dev/sda6
 mirror 2 logical 29622272 physical 1111752704 device /dev/sda6
 extent_io.c:582: free_extent_buffer: Assertion `eb->refs < 0` failed.
 btrfs-map-logical[0x41c464]
 btrfs-map-logical(free_extent_buffer+0xc0)[0x41cf10]
 btrfs-map-logical(btrfs_release_all_roots+0x59)[0x40e649]
 btrfs-map-logical(close_ctree+0x1aa)[0x40f51a]
 btrfs-map-logical(main+0x387)[0x4077c7]
 /usr/lib/libc.so.6(__libc_start_main+0xf0)[0x7f80a5562790]
 btrfs-map-logical(_start+0x29)[0x4078f9]

The problem is that, btrfs-map-logical always use sectorsize as default
block size to call alloc_extent_buffer.
And when it failes to find the block with the same size, it will free
the extent buffer in a incorrect method(Free and create a new one with
refs == 1).

2) Will return map result for non-exist extent.

 # btrfs-map-logical -l 1 -b 123456 /dev/sda6
 mirror 1 logical 1 physical 1 device /dev/sda6
 mirror 1 logical 4097 physical 4097 device /dev/sda6
 mirror 1 logical 8193 physical 8193 device /dev/sda6
 ...

Normally, before bytenr 12582912, there should be no extent as that's
the mkfs time temp metadata/system chunk.

But map-logical will still map them out.

Not to mention the 1 offset among all results.

[FIX]
This patch will rework the whole map logical by the following methods:
1) Always do things inside a extent
Even under the following case, map logical will only return covered
range in existing extents.

|<------ range given ------->|
|<-Extent A->| |<-Extent B->| |<---Extent C->|
Result:
|<-->| |<---------->| |<-->|

So with this patch, we will search extent tree to ensure all operation
are inside a extent before we do some stupid things.

2) No direct call on alloc_extent_buffer function.

That low-level function shouldn't be called at such high level.
It's only designed for low-level tree operation.

So in this patch we will only use safe high level functions avoid such
problem.

[RESULT]
With this patch, no assert will be triggered and better handle on
non-exist extents.

 # btrfs-map-logical -l 29622272 /dev/sda6
 mirror 1 logical 29622272 physical 38010880 device /dev/sda6
 mirror 2 logical 29622272 physical 1111752704 device /dev/sda6

 # btrfs-map-logical -l 1 -b 123456 /dev/sda6
 No extent found at range [1,123457)

Signed-off-by: Qu Wenruo <quwenruo@cn.fujitsu.com>
Signed-off-by: David Sterba <dsterba@suse.cz>
9 years agoBtrfs-progs: map-logical: introduce write_extent_content function
Qu Wenruo [Wed, 17 Jun 2015 07:49:03 +0000 (15:49 +0800)]
Btrfs-progs: map-logical: introduce write_extent_content function

This function will write extent content info desired file.

Signed-off-by: Qu Wenruo <quwenruo@cn.fujitsu.com>
Signed-off-by: David Sterba <dsterba@suse.cz>
9 years agoBtrfs-progs: map-logical: introduce print_mapping_info function
Qu Wenruo [Wed, 17 Jun 2015 07:49:02 +0000 (15:49 +0800)]
Btrfs-progs: map-logical: introduce print_mapping_info function

The new function will print the mapping info of given range
[logical, logical+len).

Note, caller must ensure the ranges are completely inside an extent.
Or btrfs_map_block can return -ENOENT.

Signed-off-by: Qu Wenruo <quwenruo@cn.fujitsu.com>
Signed-off-by: David Sterba <dsterba@suse.cz>
9 years agobtrfs-progs: map-logical: introduce map_one_extent function
Qu Wenruo [Wed, 17 Jun 2015 07:49:01 +0000 (15:49 +0800)]
btrfs-progs: map-logical: introduce map_one_extent function

Introduce the function to get accurate extent length based on extent
tree search.

Signed-off-by: Qu Wenruo <quwenruo@cn.fujitsu.com>
Signed-off-by: David Sterba <dsterba@suse.cz>
9 years agobtrfs-progs: export read_extent_data function
Qu Wenruo [Wed, 17 Jun 2015 07:49:00 +0000 (15:49 +0800)]
btrfs-progs: export read_extent_data function

Export it for later btrfs-map-logical cleanup.

Signed-off-by: Qu Wenruo <quwenruo@cn.fujitsu.com>
Signed-off-by: David Sterba <dsterba@suse.cz>
9 years agoBtrfs progs v4.1-rc1
David Sterba [Wed, 17 Jun 2015 10:44:16 +0000 (12:44 +0200)]
Btrfs progs v4.1-rc1

Signed-off-by: David Sterba <dsterba@suse.cz>
9 years agobtrfs-progs: Makefile: fix typo, dependencies for cmds-* files
David Sterba [Tue, 16 Jun 2015 15:01:06 +0000 (17:01 +0200)]
btrfs-progs: Makefile: fix typo, dependencies for cmds-* files

The dependency generation skipped all cmds-*.c files due to a typo
in variable name, since day one.

Signed-off-by: David Sterba <dsterba@suse.cz>
9 years agobtrfs-progs: send utils: deprecate path_cat and path_cat3
David Sterba [Tue, 16 Jun 2015 14:37:18 +0000 (16:37 +0200)]
btrfs-progs: send utils: deprecate path_cat and path_cat3

The functios do no allocation error handling, use _out variants instead.

Signed-off-by: David Sterba <dsterba@suse.cz>
9 years agobtrfs-progs: receive: use static buffer for cur_subvol path
David Sterba [Tue, 16 Jun 2015 13:56:37 +0000 (15:56 +0200)]
btrfs-progs: receive: use static buffer for cur_subvol path

The embedded 'path' is a pointera and we can't make it a path buffer due
to API constraints. Use a separate buffer and sto using the unsafe
path_cat interface.

Signed-off-by: David Sterba <dsterba@suse.cz>
9 years agobtrfs-progs: send utils: switch callbacks to patch_cat3_out
David Sterba [Tue, 16 Jun 2015 13:36:42 +0000 (15:36 +0200)]
btrfs-progs: send utils: switch callbacks to patch_cat3_out

Also switch full_subvol_path to a static buffer as the interface
semantics change.

Signed-off-by: David Sterba <dsterba@suse.cz>
9 years agobtrfs-progs: receive: use static buffer for write_path
David Sterba [Tue, 16 Jun 2015 13:28:44 +0000 (15:28 +0200)]
btrfs-progs: receive: use static buffer for write_path

Signed-off-by: David Sterba <dsterba@suse.cz>
9 years agobtrfs-progs: receive: use static buffer for root_subvol_path
David Sterba [Tue, 16 Jun 2015 13:15:51 +0000 (15:15 +0200)]
btrfs-progs: receive: use static buffer for root_subvol_path

Signed-off-by: David Sterba <dsterba@suse.cz>
9 years agobtrfs-progs: unify naming of key types in print-tree
David Sterba [Mon, 15 Jun 2015 12:40:42 +0000 (14:40 +0200)]
btrfs-progs: unify naming of key types in print-tree

Drop the BTRFS_ prefix and _KEY suffix where applicable.

Signed-off-by: David Sterba <dsterba@suse.cz>
9 years agobtrfs-progs: send utils: switch callbacks to new helpers
David Sterba [Fri, 12 Jun 2015 16:18:40 +0000 (18:18 +0200)]
btrfs-progs: send utils: switch callbacks to new helpers

Use a local buffer for full path(s) and avoid dynamic allocations that
happend to be unchecked.

Signed-off-by: David Sterba <dsterba@suse.cz>
9 years agobtrfs-progs: and new path_cat helpers to send utils
David Sterba [Fri, 12 Jun 2015 15:06:48 +0000 (17:06 +0200)]
btrfs-progs: and new path_cat helpers to send utils

Add versions of path_cat and path_cat3 that do not allocate the memory.
The unhandled memory allocations are still there.

Signed-off-by: David Sterba <dsterba@suse.cz>
9 years agobtrfs-progs: send: use static buffer for output file name
David Sterba [Fri, 12 Jun 2015 14:42:41 +0000 (16:42 +0200)]
btrfs-progs: send: use static buffer for output file name

Signed-off-by: David Sterba <dsterba@suse.cz>
9 years agobtrfs-progs: receive: use static buffer for source file
David Sterba [Fri, 12 Jun 2015 14:37:31 +0000 (16:37 +0200)]
btrfs-progs: receive: use static buffer for source file

We should copy the optarg anyway.

Signed-off-by: David Sterba <dsterba@suse.cz>
9 years agobtrfs-progs: receive: use static buffer for mount point option argument
David Sterba [Fri, 12 Jun 2015 13:58:55 +0000 (15:58 +0200)]
btrfs-progs: receive: use static buffer for mount point option argument

Signed-off-by: David Sterba <dsterba@suse.cz>
9 years agobtrfs-progs: add helper for copying paths
David Sterba [Fri, 12 Jun 2015 14:09:33 +0000 (16:09 +0200)]
btrfs-progs: add helper for copying paths

Check the source path length and do the copy.

Signed-off-by: David Sterba <dsterba@suse.cz>
9 years agobtrfs-progs: receive: use static buffer for cur_subvol
David Sterba [Fri, 12 Jun 2015 13:40:07 +0000 (15:40 +0200)]
btrfs-progs: receive: use static buffer for cur_subvol

Get rid of the allocation. The logic is changed so that a NULL
cur_subvol::path means that no subvolume/snapshot has been found so far.

Signed-off-by: David Sterba <dsterba@suse.cz>
9 years agobtrfs-progs: properly set up ioctl arguments
David Sterba [Fri, 12 Jun 2015 12:36:51 +0000 (14:36 +0200)]
btrfs-progs: properly set up ioctl arguments

At some places we do not clear the whole ioctl structure and could
pass garbage to kernel. Zero the ioctl vol_args and use a helper for
copying the path.

Signed-off-by: David Sterba <dsterba@suse.cz>
9 years agobtrfs-progs: use PATH_MAX instead of BTRFS_PATH_NAME_MAX
David Sterba [Fri, 12 Jun 2015 11:18:44 +0000 (13:18 +0200)]
btrfs-progs: use PATH_MAX instead of BTRFS_PATH_NAME_MAX

The path bufferes should be PATH_MAX but BTRFS_PATH_NAME_MAX is shorter
due to embedding in 4k aligned structures.

The only reason to use BTRFS_PATH_NAME_MAX is for the respective
structures btrfs_ioctl_vol_args::name.

Signed-off-by: David Sterba <dsterba@suse.cz>
9 years agobtrfs-progs: send: add option to for the no-data mode
David Sterba [Fri, 12 Jun 2015 11:15:41 +0000 (13:15 +0200)]
btrfs-progs: send: add option to for the no-data mode

Signed-off-by: David Sterba <dsterba@suse.cz>
9 years agobtrfs-progs: receive: implement the update_extent callback
David Sterba [Thu, 11 Jun 2015 17:31:01 +0000 (19:31 +0200)]
btrfs-progs: receive: implement the update_extent callback

The callback for the NO_FILE_DATA send flag is missing and would crash
if such stream is received.

Signed-off-by: David Sterba <dsterba@suse.cz>
9 years agobtrfs-progs: make receive work inside of subvolumes
Josef Bacik [Wed, 10 Jun 2015 19:05:51 +0000 (15:05 -0400)]
btrfs-progs: make receive work inside of subvolumes

Kind of a big feature of btrfs is being able to have a default subvol.  However
the receive code generates the paths to the subvols from the root of the fs,
even in the case of a default subvol.  So instead figure out if we're inside of
a subvol, either because we have a different default or we've chroot'ed and are
using -m.  Then strip this extra path off of the subvol we find so we can look
up our parent properly.  Thanks

Reported-by: Neil Horman <nhorman@redhat.com>
Signed-off-by: Josef Bacik <jbacik@fb.com>
Signed-off-by: David Sterba <dsterba@suse.cz>
9 years agobtrfs-progs: use less memory for pretty_size_mode buffers
David Sterba [Fri, 27 Feb 2015 18:37:24 +0000 (19:37 +0100)]
btrfs-progs: use less memory for pretty_size_mode buffers

Anand reports that the static buffers used for pertty size strings cause
a stack overflow on SPARC. Zach proposed to change the printf format to
wrap the number and the suffix into a macro. This would require to
change all callsites of pretty_size* and is not very convienient to
write.

This patch replaces the per-call-site static buffers with a limited
number for slots that would be used on each invokation of pretty_size
and wrap around. The number of array slots shall be 10 for now, in
current codebase there are no more than 2 calls to pretty_size in a
single argument list.

Reported-by: Anand Jain <Anand.Jain@oracle.com>
CC: Zach Brown <zab@zabbo.net>
Signed-off-by: David Sterba <dsterba@suse.cz>
9 years agobtrfs-progs: print error within test_num_disk_vs_raid
David Sterba [Wed, 10 Jun 2015 22:51:15 +0000 (00:51 +0200)]
btrfs-progs: print error within test_num_disk_vs_raid

The error string buffer passed as an argument is of a fixed size, though
we could print up to PATH_MAX + something bytes. Print the error message
directly.

Signed-off-by: David Sterba <dsterba@suse.cz>
9 years agobtrfs-progs: print error within test_dev_for_mkfs
David Sterba [Wed, 10 Jun 2015 22:46:30 +0000 (00:46 +0200)]
btrfs-progs: print error within test_dev_for_mkfs

The error string buffer passed as an argument is of a fixed size, though
we could print up to PATH_MAX + something bytes. Print the error message
directly.

Signed-off-by: David Sterba <dsterba@suse.cz>
9 years agobtrfs-progs: accept --help as option in the standalone utilities
David Sterba [Wed, 10 Jun 2015 22:04:19 +0000 (00:04 +0200)]
btrfs-progs: accept --help as option in the standalone utilities

Signed-off-by: David Sterba <dsterba@suse.cz>
9 years agobtrfs-progs: add missing includes to header files
David Sterba [Wed, 10 Jun 2015 00:21:42 +0000 (02:21 +0200)]
btrfs-progs: add missing includes to header files

Add includes that let the header files compile or add explicit include
of kerncompat if the uXX types are used.

Signed-off-by: David Sterba <dsterba@suse.cz>
9 years agobtrfs-progs: add helper to wait for subvolume cleaning
David Sterba [Wed, 8 Apr 2015 16:15:57 +0000 (18:15 +0200)]
btrfs-progs: add helper to wait for subvolume cleaning

Signed-off-by: David Sterba <dsterba@suse.cz>
9 years agobtrfs-progs: subvol: let sync check only current deletions
David Sterba [Tue, 7 Apr 2015 22:28:48 +0000 (00:28 +0200)]
btrfs-progs: subvol: let sync check only current deletions

So far the subvol sync command takes a shortcut and looks if there are
any deleted subvols at all. It does not print the deleted subvolumes as
they get cleaned. Arguably this is what the user would like to see and
has to do

 $ btrfs subvol sync /path $(btrfs subvol list -d /path | "extract the ids")

to see the progress.

Make it look for all currently deleted subvolumes automatically and
print the progress as if the ids were listed manually.

This is a slight change in the semantics of the command. Previously, any
new subvol deletion would prevent subvol sync to return. To simulate the
old behaviour, run 'subvol sync' in a loop until it returns 0.

Signed-off-by: David Sterba <dsterba@suse.cz>
9 years agobtrfs-progs: cleanup after errors in open_file_or_dir3
David Sterba [Tue, 9 Jun 2015 13:24:51 +0000 (15:24 +0200)]
btrfs-progs: cleanup after errors in open_file_or_dir3

We should zero the dirstream in case we close it ourselves, so the
caller does not do it again. Most current callers do not do that and
exit immediatelly.

Signed-off-by: David Sterba <dsterba@suse.cz>
9 years agobtrfs-progs: receive: fix minor resource leak
David Sterba [Tue, 9 Jun 2015 12:58:43 +0000 (14:58 +0200)]
btrfs-progs: receive: fix minor resource leak

Resolves-coverity-id: 1302985
Signed-off-by: David Sterba <dsterba@suse.cz>
9 years agobtrfs-progs: print compact help for btrfs
David Sterba [Mon, 8 Jun 2015 16:54:04 +0000 (18:54 +0200)]
btrfs-progs: print compact help for btrfs

Running 'btrfs' without arguments will print complete help that spans
a lot of lines and is really helpful. Print only subcommand group
names with short descriptions, similar to what 'git' does.

Signed-off-by: David Sterba <dsterba@suse.cz>
9 years agobtrfs-progs: add command group info strings
David Sterba [Tue, 9 Jun 2015 12:22:05 +0000 (14:22 +0200)]
btrfs-progs: add command group info strings

They're printed in the 'btrfs' command group summary.

Signed-off-by: David Sterba <dsterba@suse.cz>
9 years agobtrfs-progs: fix argv0_buf handling
David Sterba [Mon, 8 Jun 2015 21:30:21 +0000 (23:30 +0200)]
btrfs-progs: fix argv0_buf handling

The variable argv0_buf was duplicated and the changes done in utils.c
were not propagated to help.c. So if an unknown commandline token was
found, the error message did not contain the known part:

 $ btrfs scrub test
 : unknown token 'test'

instead of

 $ btrfs scrub test
 btrfs scrub: uknown token 'test'

Signed-off-by: David Sterba <dsterba@suse.cz>
9 years agobtrfs-progs: remove stray deprecation notice
David Sterba [Mon, 8 Jun 2015 16:36:58 +0000 (18:36 +0200)]
btrfs-progs: remove stray deprecation notice

The 1st level balance subcommand is the right one but it accidentally
inherited the notice about 'filesystem balance' deprecation.

Signed-off-by: David Sterba <dsterba@suse.cz>
9 years agobtrfs-progs: mkfs: make the summary more compact
David Sterba [Mon, 8 Jun 2015 14:26:54 +0000 (16:26 +0200)]
btrfs-progs: mkfs: make the summary more compact

Single device example:

btrfs-progs v4.0.1-39
See http://btrfs.wiki.kernel.org for more information.

Label:              (null)
UUID:               a88bfc85-b454-4a32-8de7-276c01f04d58
Node size:          16384
Sector size:        4096
Filesystem size:    2.00GiB
Block group profiles:
  Data:             single            8.00MiB
  Metadata:         single            8.00MiB
  System:           single            4.00MiB
SSD detected:       no
Incompat features:  extref, skinny-metadata
Number of devices:  1
Devices:
   ID        SIZE  PATH
    1     2.00GiB  /dev/sda

Multiple devices:

btrfs-progs v4.0.1-39
See http://btrfs.wiki.kernel.org for more information.

Label:              (null)
UUID:               9db282ef-55f3-4070-a59f-012a654614b2
Node size:          16384
Sector size:        4096
Filesystem size:    8.00GiB
Block group profiles:
  Data:             RAID6           417.50MiB
  Metadata:         RAID6           417.50MiB
  System:           RAID6            20.00MiB
SSD detected:       no
Incompat features:  extref, raid56, skinny-metadata
Number of devices:  4
Devices:
   ID        SIZE  PATH
    1     2.00GiB  /dev/sda
    2     2.00GiB  /dev/sdb
    3     2.00GiB  /dev/sdc
    4     2.00GiB  /dev/sdd

Signed-off-by: David Sterba <dsterba@suse.cz>
9 years agobtrfs-progs: mkfs: drop mixed from summary
David Sterba [Mon, 8 Jun 2015 13:06:17 +0000 (15:06 +0200)]
btrfs-progs: mkfs: drop mixed from summary

The mixed-bg incompat feature should be enough.

Signed-off-by: David Sterba <dsterba@suse.cz>
9 years agobtrfs-progs: mkfs, drop UUID from device summary
David Sterba [Mon, 2 Feb 2015 15:11:23 +0000 (16:11 +0100)]
btrfs-progs: mkfs, drop UUID from device summary

Signed-off-by: David Sterba <dsterba@suse.cz>
9 years agobtrfs-progs: mkfs, move uuid to the end of device summary
David Sterba [Mon, 2 Feb 2015 15:10:10 +0000 (16:10 +0100)]
btrfs-progs: mkfs, move uuid to the end of device summary

Signed-off-by: David Sterba <dsterba@suse.cz>
9 years agobtrfs-progs: mkfs: print the summary
Goffredo Baroncelli [Mon, 8 Jun 2015 11:00:50 +0000 (13:00 +0200)]
btrfs-progs: mkfs: print the summary

This patch prints the summary of the filesystem after the creation.
The main fileds printed are:
- devices list with their uuid, devid, path and size
- raid profile (dup,single,raid0...)
- leafsize/nodesize/sectorsize
- filesystem features (raid56, extref, mixed-bg)
- chunk size and type

If the '-v' switched is passed, the output is more verbose; if the '-q'
switched is passed, only the errors are printed.

Below an example:

BTRFS filesystem summary:
  Label:                btrfs-test
  UUID:                 14ae8a88-98ac-4f22-8441-79f76ec622f7

  Node size:            4096
  Leaf size:            4096
  Sector size:          4096
  Initial chunks:
    Data+Metadata:      9.01GiB
    System:             18.06MiB
  Metadata profile:     RAID5
  Data profile:         RAID5
  Mixed mode:           YES
  SSD detected:         NO
  Incompat features:    mixed-bg, extref, raid56
  Number of devices:    10
    UUID                                  ID    SIZE    PATH
    ------------------------------------  --  --------- -----------
    df1c7f50-1980-4da2-8bc9-7ee6ffb0b554   1   50.00GiB /dev/vdb
    32c808a0-cd7b-4497-a2c0-1d77a9854af9   2   50.00GiB /dev/vdc
    3159782e-d108-40bc-9e15-090ecac160b4   3   50.00GiB /dev/vdd
    db7eaf0c-beb8-4093-a9d0-b9c25c146305   4   50.00GiB /dev/vde
    c367ca04-1f71-49c0-a331-11fc0b87e9fc   5   50.00GiB /dev/vdf
    e9b73c86-4058-4b3a-90ac-18741a276e70   6   50.00GiB /dev/vdg
    c4298b7a-ad41-4690-bf10-bf748b319413   7   50.00GiB /dev/vdh
    1cf048c8-af8a-4225-b09a-5d12e9b217fa   8    2.00GiB /dev/vdi
    7e157869-768a-4725-bad5-82e6bd05fd17   9    2.00GiB /dev/vdj
    2c9431ac-c7f0-45a5-8529-cef8cf6e4033  10    2.00GiB /dev/vdk

  Total devices size:                         356.01GiB

Signed-off-by: Goffredo Baroncelli <kreijack@inwind.it>
Signed-off-by: David Sterba <dsterba@suse.cz>
9 years agobtrfs-progs: mkfs: track sizes of created block groups
Goffredo Baroncelli [Mon, 8 Jun 2015 10:54:54 +0000 (12:54 +0200)]
btrfs-progs: mkfs: track sizes of created block groups

Signed-off-by: Goffredo Baroncelli <kreijack@inwind.it>
Signed-off-by: David Sterba <dsterba@suse.cz>
9 years agobtrfs-progs: return the fsid from make_btrfs()
Goffredo Baroncelli [Wed, 17 Dec 2014 20:14:09 +0000 (21:14 +0100)]
btrfs-progs: return the fsid from make_btrfs()

The function make_btrfs() has as argument the fsid of the filesystem.
If this fsid is empty or null make_btrfs() generates a new fsid. However
If the buffer is valid (but the string is empty) the generated fsid is
copied back to the caller.

Signed-off-by: Goffredo Baroncelli <kreijack@inwind.it>
Reviewed-by: Satoru Takeuchi <takeuchi_satoru@jp.fujitsu.com>
Signed-off-by: David Sterba <dsterba@suse.cz>
9 years agobtrfs-progs: add strdup in btrfs_add_to_fsid() to track the device path
Goffredo Baroncelli [Wed, 17 Dec 2014 20:14:08 +0000 (21:14 +0100)]
btrfs-progs: add strdup in btrfs_add_to_fsid() to track the device path

When creating a new btrfs_device, copy the path to track it.  This path
is then used by mkfs.btrfs to list all devices.

Signed-off-by: Goffredo Baroncelli <kreijack@inwind.it>
Reviewed-by: Satoru Takeuchi <takeuchi_satoru@jp.fujitsu.com>
Signed-off-by: David Sterba <dsterba@suse.cz>
9 years agobtrfs-progs: mkfs: do not try to register non-block-devices
David Sterba [Sat, 6 Jun 2015 00:17:13 +0000 (02:17 +0200)]
btrfs-progs: mkfs: do not try to register non-block-devices

A mkfs on a regular file will try to call the DEV_SCAN ioctl that will
take the loop through the kernel and fail:

 ERROR: device scan failed './test.img' - Block device required

If a user without permission to open the control device tries to mkfs a
regular file, an error message is printed:

 failed to open /dev/btrfs-control skipping device registration: Permission denied

So we should not try to pass a non-block-device besides that this makes
the --quiet option more quiet.

Signed-off-by: David Sterba <dsterba@suse.cz>
9 years agobtrfs-progs: mkfs: move info message out of btrfs_add_to_fsid
David Sterba [Fri, 5 Jun 2015 23:39:26 +0000 (01:39 +0200)]
btrfs-progs: mkfs: move info message out of btrfs_add_to_fsid

Signed-off-by: David Sterba <dsterba@suse.cz>
9 years agobtrfs-progs: mkfs: accept mixed case for profile names
David Sterba [Fri, 5 Jun 2015 23:03:48 +0000 (01:03 +0200)]
btrfs-progs: mkfs: accept mixed case for profile names

Signed-off-by: David Sterba <dsterba@suse.cz>
9 years agobtrfs-progs: mkfs: add option to make it quiet
David Sterba [Wed, 17 Dec 2014 20:14:05 +0000 (21:14 +0100)]
btrfs-progs: mkfs: add option to make it quiet

Add option to silecne mkfs and print only errors, warnings or info on
user request like features or help.

Based on patch from Goffredo Baroncelli <kreijack@inwind.it>
Signed-off-by: David Sterba <dsterba@suse.cz>
9 years agobtrfs-progs: convert: factor out block iteration callback
Jeff Mahoney [Fri, 5 Jun 2015 21:41:09 +0000 (23:41 +0200)]
btrfs-progs: convert: factor out block iteration callback

block_iterate_proc uses the libext2fs error return codes when it doesn't
need them to return the error. We can push this out to __block_iterate_proc
and allow the reiserfs converter to share the code.

Signed-off-by: Jeff Mahoney <jeffm@suse.com>
Signed-off-by: David Sterba <dsterba@suse.cz>
9 years agobtrfs-progs: convert: factor out adding dirent into convert_insert_dirent
Jeff Mahoney [Fri, 5 Jun 2015 21:37:11 +0000 (23:37 +0200)]
btrfs-progs: convert: factor out adding dirent into convert_insert_dirent

Adding a dirent consists of multiple steps that will need to be taken by
any converter.

Signed-off-by: Jeff Mahoney <jeffm@suse.com>
Signed-off-by: David Sterba <dsterba@suse.cz>
9 years agobtrfs-progs: convert: fix typo in btrfs_insert_dir_item call
Jeff Mahoney [Fri, 5 Jun 2015 21:34:29 +0000 (23:34 +0200)]
btrfs-progs: convert: fix typo in btrfs_insert_dir_item call

EXT2_FT_REG_FILE and BTRFS_FT_REG_FILE happen to share the same value, but
btrfs_insert_dir_item expects the btrfs version.

Signed-off-by: Jeff Mahoney <jeffm@suse.com>
Signed-off-by: David Sterba <dsterba@suse.cz>
9 years agobtrfs-progs: compat: define DIV_ROUND_UP if not already defined
Jeff Mahoney [Wed, 14 Aug 2013 18:21:54 +0000 (14:21 -0400)]
btrfs-progs: compat: define DIV_ROUND_UP if not already defined

DIV_ROUND_UP may not be defined, so define it if it's not already.

Signed-off-by: Jeff Mahoney <jeffm@suse.com>
Signed-off-by: David Sterba <dsterba@suse.cz>
9 years agobtrfs-progs: convert: rename ext2_root to image_root
Jeff Mahoney [Wed, 14 Aug 2013 17:44:21 +0000 (13:44 -0400)]
btrfs-progs: convert: rename ext2_root to image_root

In preparation to extend to other file systems, rename ext2_root to
image_root.

Signed-off-by: Jeff Mahoney <jeffm@suse.com>
Signed-off-by: David Sterba <dsterba@suse.cz>
9 years agobtrfs-progs: convert: remove unused inode_key in copy_single_inode
Jeff Mahoney [Fri, 16 Aug 2013 14:39:27 +0000 (10:39 -0400)]
btrfs-progs: convert: remove unused inode_key in copy_single_inode

Signed-off-by: Jeff Mahoney <jeffm@suse.com>
Signed-off-by: David Sterba <dsterba@suse.cz>
9 years agobtrfs-progs: convert: remove unused fs argument from block_iterate_proc
Jeff Mahoney [Fri, 16 Aug 2013 01:30:05 +0000 (21:30 -0400)]
btrfs-progs: convert: remove unused fs argument from block_iterate_proc

The fs argument is unused, so let's not pass it.

Signed-off-by: Jeff Mahoney <jeffm@suse.com>
Signed-off-by: David Sterba <dsterba@suse.cz>
9 years agobtrfs-progs: convert: clean up blk_iterate_data handling wrt record_file_blocks
Jeff Mahoney [Wed, 14 Aug 2013 04:25:59 +0000 (00:25 -0400)]
btrfs-progs: convert: clean up blk_iterate_data handling wrt record_file_blocks

Hand off initialization of blk_iterate_data to init_blk_iterate_data and
pass the structure when the elements are the only values passed anyway.

Signed-off-by: Jeff Mahoney <jeffm@suse.com>
Signed-off-by: David Sterba <dsterba@suse.cz>
9 years agobtrfs-progs: qgroup limit: add a check for invalid input of 'T/G/M/K'
Dongsheng Yang [Wed, 3 Jun 2015 09:27:04 +0000 (17:27 +0800)]
btrfs-progs: qgroup limit: add a check for invalid input of 'T/G/M/K'

Add a check to error out in the following case:

 # ./btrfs qgroup limit  T /mnt/
Invalid size argument given

Without this patch, btrfs-progs would parse the input as 0
and continue.

Signed-off-by: Dongsheng Yang <yangds.fnst@cn.fujitsu.com>
Signed-off-by: David Sterba <dsterba@suse.cz>
9 years agobtrfs-progs: qgroup limit: error out if input value is negative
Dongsheng Yang [Wed, 3 Jun 2015 09:27:03 +0000 (17:27 +0800)]
btrfs-progs: qgroup limit: error out if input value is negative

If we pass a negative value to command qgroup limit, btrfs-progs
would convert it to unsigned long long silently. That's a little
confusing to user, why I can limit my quota to a negative value.

This patch add a check in parse_limit, if the input value is negative,
error out to user.

Reported-by: Tsutomu Itoh <t-itoh@jp.fujitsu.com>
Signed-off-by: Dongsheng Yang <yangds.fnst@cn.fujitsu.com>
Signed-off-by: David Sterba <dsterba@suse.cz>
9 years agobtrfs-progs: qgroup: allow user to clear some limitation on qgroup.
Dongsheng Yang [Wed, 3 Jun 2015 06:57:33 +0000 (14:57 +0800)]
btrfs-progs: qgroup: allow user to clear some limitation on qgroup.

Currently, we can not clear a limitation on a qgroup. Although
there is a 'none' choice provided to user to do it, it does not
work well.

It does not set the flag which user want to clear, then kernel
will never know what the user want to do at all.

*Without this commit*
 # ./btrfs qgroup show -re /mnt
qgroupid         rfer         excl     max_rfer     max_excl
--------         ----         ----     --------     --------
0/5           2.19GiB      2.19GiB      5.00GiB         none
0/257       100.02MiB    100.02MiB         none         none
 # ./btrfs qgroup limit none /mnt
 # ./btrfs qgroup show -re /mnt
qgroupid         rfer         excl     max_rfer     max_excl
--------         ----         ----     --------     --------
0/5           2.19GiB      2.19GiB      5.00GiB         none
0/257       100.02MiB    100.02MiB         none         none

This patch will set the flag user want to clear and pass a
size=-1 to kernel. Then kernel will clear it correctly.

*With this commit*
 # ./btrfs qgroup show -re /mnt
qgroupid         rfer         excl     max_rfer     max_excl
--------         ----         ----     --------     --------
0/5           2.19GiB      2.19GiB      5.00GiB         none
0/257       100.02MiB    100.02MiB         none         none
 # ./btrfs qgroup limit none /mnt
 # ./btrfs qgroup show -re /mnt
qgroupid         rfer         excl     max_rfer     max_excl
--------         ----         ----     --------     --------
0/5           2.19GiB      2.19GiB         none         none
0/257       100.02MiB    100.02MiB         none         none

Reported-by: Tsutomu Itoh <t-itoh@jp.fujitsu.com>
Signed-off-by: Dongsheng Yang <yangds.fnst@cn.fujitsu.com>
Tested-by: Tsutomu Itoh <t-itoh@jp.fujitsu.com>
Signed-off-by: David Sterba <dsterba@suse.cz>
9 years agobtrfs-progs: qgroup: show 'none' when we did not limit it on this qgroup
Dongsheng Yang [Wed, 3 Jun 2015 06:57:31 +0000 (14:57 +0800)]
btrfs-progs: qgroup: show 'none' when we did not limit it on this qgroup

There are two understanding of the '0' value in btrfs qgroup show.
(1) is no-limitation on this qgroup. (2) is the max-limitation is 0.

This patch make it showing in different way.

(1) max-limitation for 0 is still showing '0'.
(2) no-limitation will show 'none'.

qgroupid         rfer         excl     max_rfer     max_excl parent
--------         ----         ----     --------     -------- ------
0/5           2.19GiB      2.19GiB         none         none ---
0/257       100.02MiB    100.02MiB         none         none ---

Signed-off-by: Dongsheng Yang <yangds.fnst@cn.fujitsu.com>
Tested-by: Tsutomu Itoh <t-itoh@jp.fujitsu.com>
Signed-off-by: David Sterba <dsterba@suse.cz>
9 years agobtrfs-progs: tests: add test for zero-log
David Sterba [Fri, 5 Jun 2015 16:26:32 +0000 (18:26 +0200)]
btrfs-progs: tests: add test for zero-log

Simple test to verify that the log_root is reset after the command, but
we yet need to provide a testing image with log_root set to something
sensible or crafted images with borked log_root pointer.

Signed-off-by: David Sterba <dsterba@suse.cz>
9 years agobtrfs-progs: cleanup and deprecate btrfs-zero-log
David Sterba [Fri, 5 Jun 2015 16:02:08 +0000 (18:02 +0200)]
btrfs-progs: cleanup and deprecate btrfs-zero-log

Sync with the 'rescue zero-log' code, add a warning about deprecation.

Signed-off-by: David Sterba <dsterba@suse.cz>
9 years agobtrfs-progs: tests: update convert tests to set fs features
David Sterba [Thu, 4 Jun 2015 17:09:52 +0000 (19:09 +0200)]
btrfs-progs: tests: update convert tests to set fs features

Signed-off-by: David Sterba <dsterba@suse.cz>
9 years agobtrfs-progs: convert: allow to set filesystem features
David Sterba [Mon, 23 Mar 2015 18:31:31 +0000 (19:31 +0100)]
btrfs-progs: convert: allow to set filesystem features

Curretnly there are no features set for the converted filesystem and
it's not possible to request it like in mkfs.

Add new option -O|--features, use -O list-all to show all that are
supported for convert.

Note: from now on, convert without any -O option will use the same
defaults as mkfs. The original behaviour was rather confusing.

Convert is now more verbose about the parameters of the btrfs filesytem.

Signed-off-by: David Sterba <dsterba@suse.cz>
9 years agobtrfs-progs: add function to stringify filesystem features
David Sterba [Thu, 4 Jun 2015 17:08:15 +0000 (19:08 +0200)]
btrfs-progs: add function to stringify filesystem features

Signed-off-by: David Sterba <dsterba@suse.cz>
9 years agobtrfs-progs: scrub: more friendly duration format in status
David Sterba [Thu, 4 Jun 2015 14:49:00 +0000 (16:49 +0200)]
btrfs-progs: scrub: more friendly duration format in status

scrub status for d4dc0da9-e8cc-4bfe-9b6f-2dcf8e0754f5
scrub started at Sat Jan  1 00:00:01 UTC 2000 and finished after 00:43:05
total bytes scrubbed: 111.17GiB with 0 errors

Signed-off-by: David Sterba <dsterba@suse.cz>
9 years agobtrfs-progs: doc: update btrfs-rescue page and drop btrfs-zero-log
David Sterba [Thu, 4 Jun 2015 13:54:22 +0000 (15:54 +0200)]
btrfs-progs: doc: update btrfs-rescue page and drop btrfs-zero-log

- fix page title
- update zero-log text
- delete btrfs-zero-log.asciidoc as page is not shipped anymore

Signed-off-by: David Sterba <dsterba@suse.cz>
9 years agobtrfs-progs: ioctl.h: add btrfs_ioctl_feature_flags struct
David Sterba [Wed, 3 Jun 2015 17:36:36 +0000 (19:36 +0200)]
btrfs-progs: ioctl.h: add btrfs_ioctl_feature_flags struct

Copied from uapi/linux/btrfs.h.

Signed-off-by: David Sterba <dsterba@suse.cz>
9 years agobtrfs-progs: ioctl.h: update btrfs_ioctl_fs_info_args
David Sterba [Wed, 3 Jun 2015 17:35:54 +0000 (19:35 +0200)]
btrfs-progs: ioctl.h: update btrfs_ioctl_fs_info_args

Copied from uapi/linux/btrfs.h.

Signed-off-by: David Sterba <dsterba@suse.cz>
9 years agobtrfs-progs: ioctl.h: update type annotations
David Sterba [Wed, 3 Jun 2015 14:52:05 +0000 (16:52 +0200)]
btrfs-progs: ioctl.h: update type annotations

Add the __user annotations to pointers in structures.

Signed-off-by: David Sterba <dsterba@suse.cz>
9 years agobtrfs-progs: ioctl.h: add send flag mask
David Sterba [Wed, 3 Jun 2015 14:51:34 +0000 (16:51 +0200)]
btrfs-progs: ioctl.h: add send flag mask

Copied from uapi/linux/btrfs.h.

Signed-off-by: David Sterba <dsterba@suse.cz>
9 years agobtrfs-progs: ioctl.h: add EXTENT_SAME ioctl and structures
David Sterba [Wed, 3 Jun 2015 14:42:51 +0000 (16:42 +0200)]
btrfs-progs: ioctl.h: add EXTENT_SAME ioctl and structures

Copied from uapi/linux/btrfs.h.

Signed-off-by: David Sterba <dsterba@suse.cz>
9 years agobtrfs-progs: ioctl.h: copy commented version of balance structures
David Sterba [Wed, 3 Jun 2015 14:40:34 +0000 (16:40 +0200)]
btrfs-progs: ioctl.h: copy commented version of balance structures

Copied from uapi/linux/btrfs.h, no-op change.

Signed-off-by: David Sterba <dsterba@suse.cz>
9 years agobtrfs-progs: ioctl.h: copy commented version of scrub_progress structure
David Sterba [Wed, 3 Jun 2015 14:37:50 +0000 (16:37 +0200)]
btrfs-progs: ioctl.h: copy commented version of scrub_progress structure

Copied from uapi/linux/btrfs.h, no-op change.

Signed-off-by: David Sterba <dsterba@suse.cz>
9 years agobtrfs-progs: ioctl.h: reorder to match kernel uapi header
David Sterba [Wed, 3 Jun 2015 14:35:51 +0000 (16:35 +0200)]
btrfs-progs: ioctl.h: reorder to match kernel uapi header

This is a no-op change, move the code that also exists in the
uapi/linux/btrfs.h header.

Signed-off-by: David Sterba <dsterba@suse.cz>