platform/upstream/btrfs-progs.git
7 years agobtrfs-progs: check: introduce function to check tree block backref in extent tree
Lu Fengqi [Sat, 23 Apr 2016 06:40:37 +0000 (14:40 +0800)]
btrfs-progs: check: introduce function to check tree block backref in extent tree

Introduce function check_tree_block_ref() to check whether a tree block
has correct backref in extent tree.

Unlike old extent tree check method, we only use search_slot() to search
reference, no extra structure will be allocated in heap to record what we
have checked.

This method may cause a little more IO, but should work for super large
fs without triggering OOM.

Signed-off-by: Lu Fengqi <lufq.fnst@cn.fujitsu.com>
Signed-off-by: Qu Wenruo <quwenruo@cn.fujitsu.com>
Reviewed-by: Josef Bacik <jbacik@fb.com>
Signed-off-by: David Sterba <dsterba@suse.com>
7 years agobtrfs-progs: eliminate some unnecessary btrfs_lookup_extent_info() calls in walk_down...
Wang Xiaoguang [Tue, 16 Aug 2016 06:17:57 +0000 (14:17 +0800)]
btrfs-progs: eliminate some unnecessary btrfs_lookup_extent_info() calls in walk_down_tree()

In walk_down_tree(), we may call btrfs_lookup_extent_info() for same tree
block many times, obviously unnecessary. Here we define a simple struct to
record whether we already have gotten tree block's refs:
        struct node_refs {
                u64 bytenr[BTRFS_MAX_LEVEL];
                u64 refs[BTRFS_MAX_LEVEL];
        };

I fill a disk partition with linux kernel source codes and use below
test script to have performance test.
#!/bin/bash

echo 3 > /proc/sys/vm/drop_caches
for ((i = 0; i < 20; i++)); do
time ./btrfsck  /dev/sdc5
done 2>&1 | grep real | awk -F "[ms]" '{run_time += $2} END{print run_time / 20}'

Before this patch, it averagely took 0.8447s for every btrfsck execution,
and with this patch, it averagely took 0.7807s.

Signed-off-by: Wang Xiaoguang <wangxg.fnst@cn.fujitsu.com>
Signed-off-by: David Sterba <dsterba@suse.com>
7 years agoBtrfs progs v4.7
David Sterba [Fri, 29 Jul 2016 13:06:42 +0000 (15:06 +0200)]
Btrfs progs v4.7

Signed-off-by: David Sterba <dsterba@suse.com>
7 years agobtrfs-progs: update CHANGES for 4.7
David Sterba [Thu, 28 Jul 2016 12:18:59 +0000 (14:18 +0200)]
btrfs-progs: update CHANGES for 4.7

Signed-off-by: David Sterba <dsterba@suse.com>
7 years agobtrfs-progs: fix memory leak with missing device
Justin Maggard [Thu, 28 Jul 2016 17:44:11 +0000 (10:44 -0700)]
btrfs-progs: fix memory leak with missing device

In read_one_chunk(), we may add an empty entry for a missing device.
However, this entry wasn't being added to the dev_list, and so it never
got freed.

Signed-off-by: Justin Maggard <jmaggard@netgear.com>
Signed-off-by: David Sterba <dsterba@suse.com>
7 years agobtrfs-progs: fix unaligned access in raid6 calculations
David Sterba [Thu, 28 Jul 2016 17:56:20 +0000 (19:56 +0200)]
btrfs-progs: fix unaligned access in raid6 calculations

The raid6 code matches kernel implementation that also does the
unaligned access. So to keep the code close, add helpers for unaligned
native access and use them. The helpers are local as we don't plan to
use them elsewhere.

Reported-by: Anatoly Pugachev <matorola@gmail.com>
Signed-off-by: David Sterba <dsterba@suse.com>
7 years agobtrfs-progs: use proper unaligned helper in btrfs_csum_final
David Sterba [Thu, 28 Jul 2016 17:36:50 +0000 (19:36 +0200)]
btrfs-progs: use proper unaligned helper in btrfs_csum_final

This will not cause unaligned access as the checksum is at the beginning
of btrfs_header and thus aligned to a page, but for clarity use the
helper.

Signed-off-by: David Sterba <dsterba@suse.com>
7 years agobtrfs-progs: fi defrag: change default extent target size to 32 MiB
David Sterba [Thu, 28 Jul 2016 11:14:08 +0000 (13:14 +0200)]
btrfs-progs: fi defrag: change default extent target size to 32 MiB

The kernel default is too low, 32 MiB is recommended and should give
better results.

Signed-off-by: David Sterba <dsterba@suse.com>
7 years agobtrfs-progs: Doc: Fix format error in btrfs-send
Qu Wenruo [Thu, 28 Jul 2016 08:28:25 +0000 (16:28 +0800)]
btrfs-progs: Doc: Fix format error in btrfs-send

Signed-off-by: Qu Wenruo <quwenruo@cn.fujitsu.com>
Signed-off-by: David Sterba <dsterba@suse.com>
7 years agobtrfs-progs: handler memory allocation error in write_data_to_disk
David Sterba [Thu, 28 Jul 2016 00:16:43 +0000 (02:16 +0200)]
btrfs-progs: handler memory allocation error in write_data_to_disk

Signed-off-by: David Sterba <dsterba@suse.com>
7 years agobtrfs-progs: handle memory allocation error in __alloc_extent_buffer
David Sterba [Thu, 28 Jul 2016 00:04:30 +0000 (02:04 +0200)]
btrfs-progs: handle memory allocation error in __alloc_extent_buffer

Drop the BUG() as all callers handle errors.

Signed-off-by: David Sterba <dsterba@suse.com>
7 years agobtrfs-progs: update values of EXTENT_* bits
David Sterba [Wed, 27 Jul 2016 23:56:06 +0000 (01:56 +0200)]
btrfs-progs: update values of EXTENT_* bits

Make the values unsigned as we do various bit operations.

Signed-off-by: David Sterba <dsterba@suse.com>
7 years agobtrfs-progs: refactor and extend btrfs_prepare_device arguments
David Sterba [Wed, 27 Jul 2016 23:47:40 +0000 (01:47 +0200)]
btrfs-progs: refactor and extend btrfs_prepare_device arguments

The message about discard is printed unconditionally and does not
conform to the --quite option eg. in mkfs. Consolidate the operation
flags into one argument and add support for verbosity.

Signed-off-by: David Sterba <dsterba@suse.com>
7 years agobtrfs-progs: use values directly for BLOCK_GROUP_ macros
David Sterba [Wed, 27 Jul 2016 21:27:05 +0000 (23:27 +0200)]
btrfs-progs: use values directly for BLOCK_GROUP_ macros

Signed-off-by: David Sterba <dsterba@suse.com>
7 years agobtrfs-progs: use unsigned type for extent_buffer flags
David Sterba [Wed, 27 Jul 2016 21:19:20 +0000 (23:19 +0200)]
btrfs-progs: use unsigned type for extent_buffer flags

We're doing bit operations.

Signed-off-by: David Sterba <dsterba@suse.com>
7 years agobtrfs-progs: fix unaligned access calculating raid56 data
David Sterba [Wed, 27 Jul 2016 20:30:52 +0000 (22:30 +0200)]
btrfs-progs: fix unaligned access calculating raid56 data

The extent_buffer::data might be unaligned wrt unsigned long, depends on
acutal layout of the structure and width of the int types. Use explicit
unaligned access helpers.

Reported-by: Anatoly Pugachev <matorola@gmail.com>
Signed-off-by: David Sterba <dsterba@suse.com>
7 years agobtrfs-progs: kerncompat: introduce put_unaligned_x helpers
David Sterba [Wed, 27 Jul 2016 21:13:09 +0000 (23:13 +0200)]
btrfs-progs: kerncompat: introduce put_unaligned_x helpers

Signed-off-by: David Sterba <dsterba@suse.com>
7 years agobtrfs-progs: docs: update btrfs-balance manual page
David Sterba [Tue, 26 Jul 2016 17:33:12 +0000 (19:33 +0200)]
btrfs-progs: docs: update btrfs-balance manual page

Update the new options.

Signed-off-by: David Sterba <dsterba@suse.com>
7 years agobtrfs-progs: balance: add another (shorter) option for background
David Sterba [Tue, 26 Jul 2016 17:30:39 +0000 (19:30 +0200)]
btrfs-progs: balance: add another (shorter) option for background

Signed-off-by: David Sterba <dsterba@suse.com>
7 years agobtrfs-progs: balance: silence compiler warning
David Sterba [Tue, 26 Jul 2016 17:11:42 +0000 (19:11 +0200)]
btrfs-progs: balance: silence compiler warning

cmds-balance.c: In function 'cmd_balance_start':
cmds-balance.c:654:6: warning: ignoring return value of 'chdir', declared with
attribute warn_unused_result [-Wunused-result]
chdir("/");

Reported-by: Satoru Takeuchi <takeuchi_satoru@jp.fujitsu.com>
Signed-off-by: David Sterba <dsterba@suse.com>
7 years agobtrfs-progs: add option to run balance as daemon
Austin S. Hemmelgarn [Tue, 21 Jun 2016 15:16:59 +0000 (11:16 -0400)]
btrfs-progs: add option to run balance as daemon

Currently, balance operations are run synchronously in the foreground.
This is nice for interactive management, but is kind of crappy when you
start looking at automation and similar things.

This patch adds an option to `btrfs balance start` to tell it to
daemonize prior to running the balance operation, thus allowing us to
preform balances asynchronously.  The two biggest use cases I have for
this are starting a balance on a remote server without establishing a
full shell session, and being able to background the balance in a
recovery shell (which usually has no job control) so I can still get
progress information.

Because it simply daemonizes prior to calling the balance ioctl, this
doesn't actually need any kernel support.

Signed-off-by: Austin S. Hemmelgarn <ahferroin7@gmail.com>
Signed-off-by: David Sterba <dsterba@suse.com>
7 years agobtrfs-progs: fix btrfsck of space_cache=v2 bitmaps on big-endian
Omar Sandoval [Fri, 15 Jul 2016 19:12:48 +0000 (12:12 -0700)]
btrfs-progs: fix btrfsck of space_cache=v2 bitmaps on big-endian

Copy le_test_bit() from the kernel and use that for the free space tree
bitmaps.

Signed-off-by: Omar Sandoval <osandov@fb.com>
Signed-off-by: David Sterba <dsterba@suse.com>
7 years agobtrfs-progs: corrupt block: handle eb read and write errors
David Sterba [Fri, 15 Jul 2016 15:00:56 +0000 (17:00 +0200)]
btrfs-progs: corrupt block: handle eb read and write errors

Resolves-coverity-id: 1261558
Signed-off-by: David Sterba <dsterba@suse.com>
7 years agobtrfs-progs: corrupt block: handle block mapping errors in debug_corrupt_block
David Sterba [Fri, 15 Jul 2016 14:46:08 +0000 (16:46 +0200)]
btrfs-progs: corrupt block: handle block mapping errors in debug_corrupt_block

Signed-off-by: David Sterba <dsterba@suse.com>
7 years agobtrfs-progs: corrupt block: pass eb as argument to debug_corrupt_block
David Sterba [Fri, 15 Jul 2016 14:38:07 +0000 (16:38 +0200)]
btrfs-progs: corrupt block: pass eb as argument to debug_corrupt_block

Allocate the eb externally so we can handle the easy errors in advance.

Signed-off-by: David Sterba <dsterba@suse.com>
7 years agobtrfs-progs: image: fix minor resource leak
David Sterba [Fri, 15 Jul 2016 14:27:06 +0000 (16:27 +0200)]
btrfs-progs: image: fix minor resource leak

It's on error exit path.

Resolves-coverity-id: 1354246
Signed-off-by: David Sterba <dsterba@suse.com>
7 years agobtrfs-progs: handle ulist_add errors in qgroup-verify
David Sterba [Fri, 15 Jul 2016 14:12:00 +0000 (16:12 +0200)]
btrfs-progs: handle ulist_add errors in qgroup-verify

Resolves-coverity-id: 1364084
Signed-off-by: David Sterba <dsterba@suse.com>
7 years agoBtrfs-progs: fix btrfs-map-logical to only print extent mapping info
Liu Bo [Fri, 15 Jul 2016 01:40:27 +0000 (18:40 -0700)]
Btrfs-progs: fix btrfs-map-logical to only print extent mapping info

I have a valid btrfs image which contains,
...
        item 10 key (1103101952 BLOCK_GROUP_ITEM 1288372224) itemoff 15947 itemsize 24
                block group used 655360 chunk_objectid 256 flags DATA|RAID5
        item 11 key (1103364096 EXTENT_ITEM 131072) itemoff 15894 itemsize 53
                extent refs 1 gen 11 flags DATA
                extent data backref root 5 objectid 258 offset 0 count 1
        item 12 key (1103888384 EXTENT_ITEM 262144) itemoff 15841 itemsize 53
                extent refs 1 gen 15 flags DATA
                extent data backref root 1 objectid 256 offset 0 count 1
        item 13 key (1104281600 EXTENT_ITEM 262144) itemoff 15788 itemsize 53
                extent refs 1 gen 15 flags DATA
                extent data backref root 1 objectid 257 offset 0 count 1
...

The extent [1103364096, 131072) has length 131072, but if we run

"btrfs-map-logical -l 1103364096 -b $((65536 * 3)) /dev/sda"

it will return mapping info 's of  non-existing extents.

It's because it assumes that extents's are contiguous on logical address,
when it's not true, after one loop (cur_logical += cur_len) and mapping
the next extent, we can get an extent that is out of our search range and
we end up with a negative @real_len and printing all mapping infos till
the disk end.

Signed-off-by: Liu Bo <bo.li.liu@oracle.com>
Reviewed-by: Qu Wenruo <quwenruo@cn.fujitsu.com>
Signed-off-by: David Sterba <dsterba@suse.com>
7 years agobtrfs-progs: tests: add 007-unsupported-block-sizes
David Sterba [Thu, 14 Jul 2016 23:25:12 +0000 (01:25 +0200)]
btrfs-progs: tests: add 007-unsupported-block-sizes

Check if block sizes smaller than 4k expectedly fail to convert.

Signed-off-by: David Sterba <dsterba@suse.com>
7 years agobtrfs-progs: docs: update btrfs manual page
David Sterba [Thu, 14 Jul 2016 21:43:38 +0000 (23:43 +0200)]
btrfs-progs: docs: update btrfs manual page

Signed-off-by: David Sterba <dsterba@suse.com>
7 years agobtrfs-progs: docs: update btrfs-convert manual page
David Sterba [Thu, 14 Jul 2016 21:43:38 +0000 (23:43 +0200)]
btrfs-progs: docs: update btrfs-convert manual page

Signed-off-by: David Sterba <dsterba@suse.com>
7 years agobtrfs-progs: docs: update btrfs-filesystem manual page
David Sterba [Thu, 14 Jul 2016 21:43:38 +0000 (23:43 +0200)]
btrfs-progs: docs: update btrfs-filesystem manual page

Signed-off-by: David Sterba <dsterba@suse.com>
7 years agobtrfs-progs: docs: update btrfs-scrub manual page
David Sterba [Thu, 14 Jul 2016 21:35:26 +0000 (23:35 +0200)]
btrfs-progs: docs: update btrfs-scrub manual page

Signed-off-by: David Sterba <dsterba@suse.com>
7 years agobtrfs-progs: do not set optind if not necessary
David Sterba [Wed, 13 Jul 2016 17:41:55 +0000 (19:41 +0200)]
btrfs-progs: do not set optind if not necessary

In the subcommand callbacks that are called just once, we don't need to
explicitly reset optind.

Signed-off-by: David Sterba <dsterba@suse.com>
7 years agobtrfs-progs: balance: use errno directly
David Sterba [Wed, 13 Jul 2016 17:05:23 +0000 (19:05 +0200)]
btrfs-progs: balance: use errno directly

No need to store the errno in a local variable.

Signed-off-by: David Sterba <dsterba@suse.com>
7 years agobtrfs-progs: balance: cleanup, switch to common exit block
David Sterba [Wed, 13 Jul 2016 17:00:01 +0000 (19:00 +0200)]
btrfs-progs: balance: cleanup, switch to common exit block

Call close_file_or_dir at the end of the function and replace returns by
gotos to the exit block.

Signed-off-by: David Sterba <dsterba@suse.com>
7 years agobtrfs-progs: docs: update btrfs-subvolume manual page
David Sterba [Tue, 12 Jul 2016 15:47:23 +0000 (17:47 +0200)]
btrfs-progs: docs: update btrfs-subvolume manual page

Signed-off-by: David Sterba <dsterba@suse.com>
7 years agobtrfs-progs: docs: update btrfs-balance manual page
David Sterba [Tue, 12 Jul 2016 15:13:16 +0000 (17:13 +0200)]
btrfs-progs: docs: update btrfs-balance manual page

Signed-off-by: David Sterba <dsterba@suse.com>
7 years agobtrfs-progs: du: fix to skip not btrfs dir/file
Wang Shilong [Thu, 7 Jul 2016 09:43:38 +0000 (18:43 +0900)]
btrfs-progs: du: fix to skip not btrfs dir/file

'btrfs file du' is a very useful tool to watch my system
file usage information with snapshot aware.

when trying to run following commands:
[root@localhost btrfs-progs]# btrfs file du /
     Total   Exclusive  Set shared  Filename
ERROR: Failed to lookup root id - Inappropriate ioctl for device
ERROR: cannot check space of '/': Unknown error -1

and My Filesystem looks like this:
[root@localhost btrfs-progs]# df -Th
Filesystem     Type      Size  Used Avail Use% Mounted on
devtmpfs       devtmpfs   16G     0   16G   0% /dev
tmpfs          tmpfs      16G  368K   16G   1% /dev/shm
tmpfs          tmpfs      16G  1.4M   16G   1% /run
tmpfs          tmpfs      16G     0   16G   0% /sys/fs/cgroup
/dev/sda3      btrfs      60G   19G   40G  33% /
tmpfs          tmpfs      16G  332K   16G   1% /tmp
/dev/sdc       btrfs     2.8T  166G  1.7T   9% /data
/dev/sda2      xfs       2.0G  452M  1.6G  23% /boot
/dev/sda1      vfat      1.9G   11M  1.9G   1% /boot/efi
tmpfs          tmpfs     3.2G   24K  3.2G   1% /run/user/1000

So I installed Btrfs as my root partition, but boot partition
can be other fs.

We can Let btrfs tool aware of this is not a btrfs file or
directory and skip those files, so that someone like me
could just run 'btrfs file du /' to scan all btrfs filesystems.

After patch, it will look like:
   Total   Exclusive  Set shared  Filename
     0.00B       0.00B           -  //root/.bash_logout
     0.00B       0.00B           -  //root/.bash_profile
     0.00B       0.00B           -  //root/.bashrc
     0.00B       0.00B           -  //root/.cshrc
     0.00B       0.00B           -  //root/.tcshrc

This works for me to analysis system usage and analysis
performaces.

Signed-off-by: Wang Shilong <wangshilong1991@gmail.com>
Signed-off-by: David Sterba <dsterba@suse.com>
7 years agobtrfs-progs: add the error message when open fails
Tsutomu Itoh [Thu, 9 Jun 2016 01:23:15 +0000 (10:23 +0900)]
btrfs-progs: add the error message when open fails

When open in btrfs_open_devices failed, only the following message is
displayed. Therefore the user doesn't understand the reason why open
failed.

  # btrfs check /dev/sdb8
  Couldn't open file system

This patch adds the error message when open fails.

Signed-off-by: Tsutomu Itoh <t-itoh@jp.fujitsu.com>
Signed-off-by: David Sterba <dsterba@suse.com>
7 years agobtrfs-progs: docs: man5, document control device
David Sterba [Fri, 8 Jul 2016 15:04:25 +0000 (17:04 +0200)]
btrfs-progs: docs: man5, document control device

Signed-off-by: David Sterba <dsterba@suse.com>
7 years agobtrfs-progs: tests: 006-image-on-missing-device: fix btrfs tool path
Luis Henriques [Mon, 4 Jul 2016 22:48:47 +0000 (23:48 +0100)]
btrfs-progs: tests: 006-image-on-missing-device: fix btrfs tool path

If btrfs isn't in the path, this test will fail with:

    [TEST/misc]   006-image-on-missing-device
failed: btrfs fi show /dev/loop0
test failed for case 006-image-on-missing-device
Makefile:226: recipe for target 'test-misc' failed
make: *** [test-misc] Error 1

Fix the test script by adding $TOP to the path.

Signed-off-by: Luis Henriques <henrix@camandro.org>
[ updated to full command names ]
Signed-off-by: David Sterba <dsterba@suse.com>
7 years agobtrfs-progs: check: write corrected qgroup info to disk
Mark Fasheh [Mon, 4 Jul 2016 12:57:38 +0000 (14:57 +0200)]
btrfs-progs: check: write corrected qgroup info to disk

Now that we can verify all qgroups, we can write the corrected qgroups out
to disk when '--repair' is specified. The qgroup status item is also updated
to clear any out-of-date state. The repair_ functions were modeled after the
inode repair code in cmds-check.c.

I also renamed the 'scan' member of qgroup_status_item to 'rescan' in order
to keep consistency with the kernel.

Testing this was easy, I just reproduced qgroup inconsistencies via the
usual routes and had btrfsck fix them.

Signed-off-by: Mark Fasheh <mfasheh@suse.de>
Signed-off-by: David Sterba <dsterba@suse.com>
7 years agobtrfs-progs: check: verify qgroups above level 0
Mark Fasheh [Fri, 17 Jun 2016 20:37:48 +0000 (13:37 -0700)]
btrfs-progs: check: verify qgroups above level 0

At the moment we only check subvolume quota groups (level 0). With this
patch we can check groups above 0, thus verifying the entire qgroup
hierarchy on a file system.  The accounting portion of this patch is modeled
after the kernel - we are essentially reimplementing the 'quota rescan' case
here. Most other sections of this code went unchanged, in particular the
root counting works independently of the accounting.

Signed-off-by: Mark Fasheh <mfasheh@suse.de>
Signed-off-by: David Sterba <dsterba@suse.com>
7 years agobtrfs-progs: factor out repair mode
David Sterba [Mon, 4 Jul 2016 13:22:53 +0000 (15:22 +0200)]
btrfs-progs: factor out repair mode

Signed-off-by: David Sterba <dsterba@suse.com>
7 years agobtrfs-progs: check: switch to iterating over the backref_tree
Jeff Mahoney [Thu, 23 Jun 2016 19:26:06 +0000 (15:26 -0400)]
btrfs-progs: check: switch to iterating over the backref_tree

We now have two data structures that can be used to iterate the same data
set, and there may be quite a few of them in memory.  Eliminating the
list_head member will reduce memory consumption while iterating over
the extent backrefs.

Signed-off-by: Jeff Mahoney <jeffm@suse.com>
Signed-off-by: David Sterba <dsterba@suse.com>
7 years agobtrfs-progs: check: supplement extent backref list with rbtree
Jeff Mahoney [Thu, 23 Jun 2016 19:26:05 +0000 (15:26 -0400)]
btrfs-progs: check: supplement extent backref list with rbtree

For the pathlogical case, like xfstests generic/297 that creates a
large file consisting of one, repeating reflinked extent, fsck can
take hours.  The root cause is that calling find_data_backref while
iterating the extent records is an O(n^2) algorithm.  For my
example test run, n was 2*2^20 and fsck was at 8 hours and counting.

This patch supplements the list with an rbtree and drops the runtime
of that testcase to about 20 seconds.

Signed-off-by: Jeff Mahoney <jeffm@suse.com>
Signed-off-by: David Sterba <dsterba@suse.com>
7 years agobtrfs-progs: check: add helpers for converting between structures
Jeff Mahoney [Thu, 23 Jun 2016 19:26:04 +0000 (15:26 -0400)]
btrfs-progs: check: add helpers for converting between structures

We either open code list_entry calls or outright cast between types.  The
compiler will do the right thing if we use static inlines to do
typesafe conversions.

Signed-off-by: Jeff Mahoney <jeffm@suse.com>
Signed-off-by: David Sterba <dsterba@suse.com>
7 years agobtrfs-progs: use the correct struct for BTRFS_IOC_LOGICAL_INO
Hans van Kranenburg [Sun, 3 Jul 2016 21:22:26 +0000 (23:22 +0200)]
btrfs-progs: use the correct struct for BTRFS_IOC_LOGICAL_INO

BTRFS_IOC_LOGICAL_INO takes a btrfs_ioctl_logical_ino_args as argument,
not a btrfs_ioctl_ino_path_args. The lines were probably copy/pasted
when the code was written.

Since btrfs_ioctl_logical_ino_args and btrfs_ioctl_ino_path_args have
the same size, the actual IOCTL definition here does not change.

But, it makes the code less confusing for the reader.

Signed-off-by: Hans van Kranenburg <hans.van.kranenburg@mendix.com>
Signed-off-by: David Sterba <dsterba@suse.com>
7 years agobtrfs-progs: mkfs: fix allocation information output of block group types
Wang Xiaoguang [Fri, 1 Jul 2016 05:26:25 +0000 (13:26 +0800)]
btrfs-progs: mkfs: fix allocation information output of block group types

When cleanup_temp_chunks() removes block groups, it forgot to update
mkfs_allocation accordingly, fix this.

Signed-off-by: Wang Xiaoguang <wangxg.fnst@cn.fujitsu.com>
[ minor adjustments ]
Signed-off-by: David Sterba <dsterba@suse.com>
7 years agobtrfs-progs: tests: use /bin/bash for scripts
David Sterba [Mon, 4 Jul 2016 11:45:15 +0000 (13:45 +0200)]
btrfs-progs: tests: use /bin/bash for scripts

Since we use 'source' in scripts, let's use bash everywhere.

Signed-off-by: David Sterba <dsterba@suse.com>
7 years agobtrfs-progs: convert-test: Add test case for discontinuous hole extent
Qu Wenruo [Mon, 27 Jun 2016 07:50:11 +0000 (15:50 +0800)]
btrfs-progs: convert-test: Add test case for discontinuous hole extent

For ext* fs containing a large hole(larger than 128M), btrfs-convert
will only insert one 128M hole extent and skip the remaining.

This leads to discontinuous file extents.

Add test case for it, and since it's a pinpoint regression test case, no
combination of convert options nor checksum verification.

Signed-off-by: Qu Wenruo <quwenruo@cn.fujitsu.com>
Signed-off-by: David Sterba <dsterba@suse.com>
7 years agobtrfs-progs: convert: Fix a bug leads to discontinuous extents
Qu Wenruo [Mon, 27 Jun 2016 07:50:10 +0000 (15:50 +0800)]
btrfs-progs: convert: Fix a bug leads to discontinuous extents

Btrfs_record_file_extent() will split extents using max extent size(128M).
It works well for real file extents, but not that well for large
hole extent, as hole doesn't have extent size limit.

In that case, it will only insert one 128M hole, and skip the rest,
leading to discontinuous extent error for converted btrfs.

Fix it by not splitting hole extents.

Signed-off-by: Qu Wenruo <quwenruo@cn.fujitsu.com>
Signed-off-by: David Sterba <dsterba@suse.com>
7 years agobtrfs-progs: tests: 001-simple-unmounted: fix test failure due to bashism
Luis Henriques [Fri, 24 Jun 2016 23:47:29 +0000 (00:47 +0100)]
btrfs-progs: tests: 001-simple-unmounted: fix test failure due to bashism

The usage of 'source' is a bashism, and '.' should be used instead.  This
is causing fuzz-tests/001-simple-unmounted to fail in systems where
/bin/sh isn't bash:

    [TEST/fuzz]   001-simple-unmounted
./test.sh: 5: ./test.sh: source: not found
./test.sh: 7: ./test.sh: setup_root_helper: not found
./test.sh: 8: ./test.sh: check_prereq: not found
./test.sh: 18: ./test.sh: check_all_images: not found

Since most (all?) tests actually use /bin/bash, change this test to use
bash too.

Signed-off-by: Luis Henriques <henrix@camandro.org>
Signed-off-by: David Sterba <dsterba@suse.com>
7 years agoBtrfs progs v4.6.1
David Sterba [Fri, 24 Jun 2016 12:10:31 +0000 (14:10 +0200)]
Btrfs progs v4.6.1

Signed-off-by: David Sterba <dsterba@suse.com>
7 years agobtrfs-progs: update CHANGES for 4.6.1
David Sterba [Wed, 8 Jun 2016 09:40:02 +0000 (11:40 +0200)]
btrfs-progs: update CHANGES for 4.6.1

Signed-off-by: David Sterba <dsterba@suse.com>
7 years agobtrfs-progs: build: check if FIEMAP_EXTENT_SHARED is defined
David Sterba [Fri, 24 Jun 2016 12:04:04 +0000 (14:04 +0200)]
btrfs-progs: build: check if FIEMAP_EXTENT_SHARED is defined

Detect the macro at configure time rather than during compilation.

Signed-off-by: David Sterba <dsterba@suse.com>
7 years agobtrfs-progs: build: add m4 macros for AC_CHECK_DEFINE
David Sterba [Fri, 24 Jun 2016 12:03:36 +0000 (14:03 +0200)]
btrfs-progs: build: add m4 macros for AC_CHECK_DEFINE

Signed-off-by: David Sterba <dsterba@suse.com>
7 years agobtrfs-progs: build: let autotools include m4
David Sterba [Fri, 24 Jun 2016 11:54:45 +0000 (13:54 +0200)]
btrfs-progs: build: let autotools include m4

We'll need some non-standard macro definitions.

Signed-off-by: David Sterba <dsterba@suse.com>
7 years agobtrfs-progs: fi show: print error message if no valid Btrfs is specified
Satoru Takeuchi [Fri, 24 Jun 2016 08:24:47 +0000 (17:24 +0900)]
btrfs-progs: fi show: print error message if no valid Btrfs is specified

* Before this patch

 ===============================
 # ./btrfs fi show foo      # "foo" doesn't mean any valid Btrfs
 #                          # no error message
 # echo $?
 1
 ===============================

* After this patch

 ===============================
 # ./btrfs fi show foo
 ERROR: foo is not a valid Btrfs
 #
 # echo $?
 1
 ===============================

Signed-off-by: Satoru Takeuchi <takeuchi_satoru@jp.fujitsu.com>
Signed-off-by: David Sterba <dsterba@suse.com>
7 years agobtrfs-progs: tests: fix filesytem type creation for convert tests
David Sterba [Wed, 22 Jun 2016 13:52:17 +0000 (15:52 +0200)]
btrfs-progs: tests: fix filesytem type creation for convert tests

The extN filesystem type was lost when the separate tests were created
and we've been testing only ext2. The tests pass for ext3 and ext4
though.

Signed-off-by: David Sterba <dsterba@suse.com>
7 years agobtrfs-progs: tests: add 005-delete-all-rollback
David Sterba [Wed, 22 Jun 2016 13:50:17 +0000 (15:50 +0200)]
btrfs-progs: tests: add 005-delete-all-rollback

Test if a rollback works after deleing all files from btrfs.

Signed-off-by: David Sterba <dsterba@suse.com>
7 years agobtrfs-progs: tests: update README
David Sterba [Wed, 22 Jun 2016 12:28:23 +0000 (14:28 +0200)]
btrfs-progs: tests: update README

Signed-off-by: David Sterba <dsterba@suse.com>
7 years agobtrfs-progs: tests: add test console
David Sterba [Wed, 22 Jun 2016 12:07:46 +0000 (14:07 +0200)]
btrfs-progs: tests: add test console

Add a wrapper that sets up environment the same way a test would use it.
Use it for quick prototyping or testing, the commands and output is
logged.

Signed-off-by: David Sterba <dsterba@suse.com>
7 years agobtrfs-progs: tests: print shorter test name in the output
David Sterba [Wed, 22 Jun 2016 09:30:24 +0000 (11:30 +0200)]
btrfs-progs: tests: print shorter test name in the output

The full path is printed, we're interested in the last path component
only.

Signed-off-by: David Sterba <dsterba@suse.com>
7 years agobtrfs-progs: tests: split convert_test
David Sterba [Wed, 22 Jun 2016 09:25:33 +0000 (11:25 +0200)]
btrfs-progs: tests: split convert_test

Split the big function to several helpers so we can use them separately.
Add comments and do minor tweaks.

Signed-off-by: David Sterba <dsterba@suse.com>
7 years agobtrfs-progs: docs: update 'btrfs-device' manual page
David Sterba [Tue, 21 Jun 2016 00:48:39 +0000 (02:48 +0200)]
btrfs-progs: docs: update 'btrfs-device' manual page

Signed-off-by: David Sterba <dsterba@suse.com>
7 years agobtrfs-progs: free qgroup counts in btrfsck
Mark Fasheh [Wed, 15 Jun 2016 22:50:01 +0000 (15:50 -0700)]
btrfs-progs: free qgroup counts in btrfsck

Signed-off-by: Mark Fasheh <mfasheh@suse.de>
Signed-off-by: David Sterba <dsterba@suse.com>
7 years agoBtrfs-progs: Initialize stripesize to the value of sectorsize
Chandan Rajendra [Fri, 17 Jun 2016 05:37:54 +0000 (11:07 +0530)]
Btrfs-progs: Initialize stripesize to the value of sectorsize

stripesize should ideally be set to the value of sectorsize. However
previous versions of btrfs-progs/mkfs.btrfs had set stripesize to a
value of 4096. On machines with PAGE_SIZE other than 4096, This could
lead to the following scenario,

- /dev/loop0, /dev/loop1 and /dev/loop2 are mounted as a single
  filesystem. The filesystem was created by an older version of mkfs.btrfs
  which set stripesize to 4k.
- losetup -a
   /dev/loop0: [0030]:19477 (/root/disk-imgs/file-0.img)
   /dev/loop1: [0030]:16577 (/root/disk-imgs/file-1.img)
   /dev/loop2: [64770]:3423229 (/root/disk-imgs/file-2.img)
- /etc/mtab lists only /dev/loop0
- losetup /dev/loop4 /root/disk-imgs/file-1.img
  The new mkfs.btrfs invoked as 'mkfs.btrfs -f /dev/loop4' succeeds even
  though /dev/loop1 has already been mounted and has
  /root/disk-imgs/file-1.img as its backing file.

The above behaviour occurs because check_super() function returns an
error code (due to stripesize not being set to 4096) and hence
check_mounted_where() function treats /dev/loop1 as a disk containing a
filesystem other than Btrfs.

Hence as a workaround this commit allows 4096 as a valid stripesize.

Signed-off-by: Chandan Rajendra <chandan@linux.vnet.ibm.com>
Signed-off-by: David Sterba <dsterba@suse.com>
7 years agobtrfs-progs: qgroup: Fix a bug that fails to skip rescan running case
Qu Wenruo [Thu, 16 Jun 2016 01:15:51 +0000 (09:15 +0800)]
btrfs-progs: qgroup: Fix a bug that fails to skip rescan running case

Commit 6bdf962fe35a8648d(btrfs-progs: Read qgroup status for qgroup
verify) will read qgroup status, and then use it to skip qgroup
reporting.

However since the rescan_running/inconsistent flags are only 1 bit long,
while qgroup flags & BTRFS_QGROUP_FLAGS returns value longer than 1bit,
it doesn't work.

Fix it by doing double negation on (flags & BTRFS_QGROUP_FLAGS) to
convert it to either 1 or 0.

Signed-off-by: Qu Wenruo <quwenruo@cn.fujitsu.com>
Signed-off-by: David Sterba <dsterba@suse.com>
7 years agobtrfs-progs: docs: update btrfs-restore manual page
David Sterba [Thu, 16 Jun 2016 16:48:44 +0000 (18:48 +0200)]
btrfs-progs: docs: update btrfs-restore manual page

Signed-off-by: David Sterba <dsterba@suse.com>
7 years agobtrfs-progs: tests: add 003-fi-resize-args
David Sterba [Thu, 16 Jun 2016 11:50:18 +0000 (13:50 +0200)]
btrfs-progs: tests: add 003-fi-resize-args

Check various resize option combinations.

Signed-off-by: David Sterba <dsterba@suse.com>
7 years agobtrfs-progs: fi resize: fix parsing of negative argument
David Sterba [Thu, 16 Jun 2016 11:27:26 +0000 (13:27 +0200)]
btrfs-progs: fi resize: fix parsing of negative argument

The cleanup of option parsing caused a regression where the negative
resize argument is recognized as short options and the command fails.
Use the new helper to allow that.

Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=119971
Signed-off-by: David Sterba <dsterba@suse.com>
7 years agobtrfs-progs: new helper for option parsing, more permissive for "no options"
David Sterba [Thu, 16 Jun 2016 11:27:18 +0000 (13:27 +0200)]
btrfs-progs: new helper for option parsing, more permissive for "no options"

Signed-off-by: David Sterba <dsterba@suse.com>
7 years agobtrfs-progs: doc: correct the destination of btrfs-receive
Satoru Takeuchi [Tue, 14 Jun 2016 05:50:19 +0000 (14:50 +0900)]
btrfs-progs: doc: correct the destination of btrfs-receive

We can set not only btrfs mount point but also any path belong to
btrfs mount point as btrfs-receive's destination.

Signed-off-by: Satoru Takeuchi <takeuchi_satoru@jp.fujitsu.com>
Signed-off-by: David Sterba <dsterba@suse.com>
7 years agobtrfs-progs: doc: add missing newline in btrfs-convert
Noah Massey [Fri, 10 Jun 2016 13:57:55 +0000 (09:57 -0400)]
btrfs-progs: doc: add missing newline in btrfs-convert

Signed-off-by: Noah Massey <noah.massey@gmail.com>
Signed-off-by: David Sterba <dsterba@suse.com>
7 years agoBtrfs progs v4.6
David Sterba [Fri, 10 Jun 2016 13:03:18 +0000 (15:03 +0200)]
Btrfs progs v4.6

Signed-off-by: David Sterba <dsterba@suse.com>
7 years agobtrfs-progs: update CHANGES for 4.6
David Sterba [Wed, 8 Jun 2016 09:40:02 +0000 (11:40 +0200)]
btrfs-progs: update CHANGES for 4.6

Signed-off-by: David Sterba <dsterba@suse.com>
7 years agobtrfs-progs: convert: Fix a bug which fails to insert hole file extent
Qu Wenruo [Thu, 2 Jun 2016 07:22:49 +0000 (15:22 +0800)]
btrfs-progs: convert: Fix a bug which fails to insert hole file extent

When copying inode, if there is a file referring part of a hole range,
convert will fail.

The problem is, when calculating real extent bytenr, it doesn't check if
the original extent is a hole.

In case the orinal extent is a hole, we still calculate bytenr using
file_pos - found_extent_file_pos, causing non-zero value, and later
btrfs_record_file_extent() detects that we are pointing to non-exist
extent and aborts convert.

Fix it by checking the disk_bytenr before calculating real disk bytenr.

Signed-off-by: Qu Wenruo <quwenruo@cn.fujitsu.com>
Signed-off-by: David Sterba <dsterba@suse.com>
7 years agobtrfs-progs: convert: Insert needed holes for superblock migration
Qu Wenruo [Wed, 1 Jun 2016 08:29:43 +0000 (16:29 +0800)]
btrfs-progs: convert: Insert needed holes for superblock migration

New convert doesn't insert holes for superblock migration range.

Unlike the old design, which only relocates 4K (superblock size) to
other places.
In the new design, to make sure convert can handle different page sizes
and align chunks bytenr, we relocate the whole 64K range.

And if there is only a 4K used block inside 64K superblock migration
range, it will make converted the fs have discontiguous file extents.

This patch will fix it by inserting needed holes to avoid such
discontinuous error.

Reported-by: Tsutomu Itoh <t-itoh@jp.fujitsu.com>
Signed-off-by: Qu Wenruo <quwenruo@cn.fujitsu.com>
Signed-off-by: David Sterba <dsterba@suse.com>
7 years agobtrfs-progs: convert: Fix bugs in backup superblock migration
Qu Wenruo [Tue, 31 May 2016 08:49:33 +0000 (16:49 +0800)]
btrfs-progs: convert: Fix bugs in backup superblock migration

New convert has several bugs with backup superblock migration

1) Backup superblocks are not migrated due to incorrect condition
   Two wrong checks cause backup superblocks not to be migrated at all

2) Converted ext* image doesn't keep hole for backup superblocks
   Since we are creating file extents according to tmp_used, which has
   wiped out backup superblock ranges.
   In that case, later superblock migration will fail, since migration
   will insert file extent range into ext* image.

Fix above bugs will make convert on ext2 image filled about 100M data
successful.

Reported-by: Satoru Takeuchi <takeuchi_satoru@jp.fujitsu.com>
Signed-off-by: Qu Wenruo <quwenruo@cn.fujitsu.com>
Signed-off-by: David Sterba <dsterba@suse.com>
7 years agobtrfs-progs: convert: Fix a bug that makes convert asserts at scan time
Qu Wenruo [Tue, 31 May 2016 07:51:13 +0000 (15:51 +0800)]
btrfs-progs: convert: Fix a bug that makes convert asserts at scan time

When a ext2 fs filled with a 57M file, it's possible that convert fails
with assert in add_merge_cache_extent().

The problem is that the ext2 used space just takes some of the second
superblock.
And due to a bug in reserving superblock space, it corrupted used space
tree and cause assert.

Fix in by doing better used space merging for case where superblock
range is inside the ext2 used space.

Reported-by: Satoru Takeuchi <takeuchi_satoru@jp.fujitsu.com>
Signed-off-by: Qu Wenruo <quwenruo@cn.fujitsu.com>
Signed-off-by: David Sterba <dsterba@suse.com>
7 years agobtrfs-progs: convert: Add support to rollback new convert image
Qu Wenruo [Tue, 31 May 2016 02:46:00 +0000 (10:46 +0800)]
btrfs-progs: convert: Add support to rollback new convert image

For new btrfs-convert, it's less restrict for metadata chunk allocation.
While the may_rollback() function is still following the restrict 1:1
mapping check for all chunks, it will not allow some new convert image
to be rolled back.

Add new per extent check for new convert to allow it to be rolled back.

Signed-off-by: Qu Wenruo <quwenruo@cn.fujitsu.com>
Signed-off-by: David Sterba <dsterba@suse.com>
7 years agobtrfs-progs: Cleanup old btrfs-convert
Qu Wenruo [Fri, 29 Jan 2016 05:03:32 +0000 (13:03 +0800)]
btrfs-progs: Cleanup old btrfs-convert

Cleanup all the old btrfs-convert facilities, including:
1) btrfs_convert_operations->alloc/free/test_extents*
   No need to do non-standard extent allocation.
   After init_btrfs() everything can be done by normal routine.

   Now only 4 functions are needed in btrfs_convert_operations.
   1) open_fs
   2) read_used_space
   3) copy_inodes
   4) close_fs

2) fs_info->extent_ops
   Same as above.

3) Old init_btrfs(), create_image(), create_file_image_range()
   Replaced with newer and cleaner one.

Signed-off-by: Qu Wenruo <quwenruo@cn.fujitsu.com>
Signed-off-by: David Sterba <dsterba@suse.com>
7 years agobtrfs-progs: convert: Strictly avoid meta or system chunk allocation
Qu Wenruo [Fri, 29 Jan 2016 05:03:31 +0000 (13:03 +0800)]
btrfs-progs: convert: Strictly avoid meta or system chunk allocation

Before this patch, btrfs-convert only rely on large enough initial
system/metadata chunk size to ensure no newer system/meta chunk will be
created.

But that's not safe enough. So add two new members in fs_info,
avoid_sys/meta_chunk_alloc flags to prevent any newer system or meta
chunks to be created before init_btrfs_v2().

Signed-off-by: Qu Wenruo <quwenruo@cn.fujitsu.com>
Signed-off-by: David Sterba <dsterba@suse.com>
7 years agobtrfs-progs: Convert: Add support for rollback new convert behavior
Qu Wenruo [Fri, 29 Jan 2016 05:03:30 +0000 (13:03 +0800)]
btrfs-progs: Convert: Add support for rollback new convert behavior

Add support to rollback new btrfs-convert.

The support is quite easy unlike the new convert behavior, which in fact
makes the rollback less restricted.

The core is, rollback must support both old and new convert result.

For old convert, all fs image extents can be covered by any chunk type.
But any extents inside reserved range must be covered by chunk.
For new convert, all fs image extents are covered by data chunk.

Allowing any condition will just make another fail to pass.
So make the convert condition a little less restricted to allow both can
be converted.

Signed-off-by: Qu Wenruo <quwenruo@cn.fujitsu.com>
Signed-off-by: David Sterba <dsterba@suse.com>
7 years agobtrfs-progs: Introduce do_convert_v2 function
Qu Wenruo [Fri, 29 Jan 2016 05:03:29 +0000 (13:03 +0800)]
btrfs-progs: Introduce do_convert_v2 function

Introduce new function do_convert_v2() to do new convert.

Signed-off-by: Qu Wenruo <quwenruo@cn.fujitsu.com>
[ use __strncpy_null for label ]
Signed-off-by: David Sterba <dsterba@suse.com>
7 years agobtrfs-progs: convert: Introduce init_btrfs_v2 function.
Qu Wenruo [Fri, 29 Jan 2016 05:03:28 +0000 (13:03 +0800)]
btrfs-progs: convert: Introduce init_btrfs_v2 function.

Introduce new init_btrfs_v2() function for later newer do_convert().

Since we have good enough chunk allocation, a lot of wired chunk hack
won't ever be used.
We only need to insert data chunks and create needed subvolume.

Signed-off-by: Qu Wenruo <quwenruo@cn.fujitsu.com>
Signed-off-by: David Sterba <dsterba@suse.com>
7 years agobtrfs-progs: convert: Enhance record_file_blocks to handle reserved ranges
Qu Wenruo [Fri, 29 Jan 2016 05:03:27 +0000 (13:03 +0800)]
btrfs-progs: convert: Enhance record_file_blocks to handle reserved ranges

Enhance record_file_blocks() to handle reserved ranges.

Old file system can use the space in btrfs reserved ranges.
So we could not use the bytenr of old filesystem directly.

Thanks to previous patches, we have a full fs image in convert_root, and
it has already relocated the blocks in reserved ranges.
So here we just search the convert_root to get correct disk_bytenr and
use it.

Signed-off-by: Qu Wenruo <quwenruo@cn.fujitsu.com>
Signed-off-by: David Sterba <dsterba@suse.com>
7 years agobtrfs-progs: convert: Introduce function to migrate reserved ranges
Qu Wenruo [Fri, 29 Jan 2016 05:03:26 +0000 (13:03 +0800)]
btrfs-progs: convert: Introduce function to migrate reserved ranges

Introduce new function, migrate_reserved_ranges() to migrate used fs
data in btrfs reserved space.

Unlike old implementation, which will need to relocate all the
complicated csum and reference relocation, previous patches already
ensure such reserved ranges won't be allocated.  So here we only need
copy these data out and create new extent/csum/reference.

Signed-off-by: Qu Wenruo <quwenruo@cn.fujitsu.com>
Signed-off-by: David Sterba <dsterba@suse.com>
7 years agobtrfs-progs: convert: Introduce new function to create converted image
Qu Wenruo [Fri, 29 Jan 2016 05:03:25 +0000 (13:03 +0800)]
btrfs-progs: convert: Introduce new function to create converted image

Use new function, create_convert_image_v2() to create snapshot of old
filesystem.

Unlike old function which is called after copying all inodes, this
function need to be called before copying inodes.

Signed-off-by: Qu Wenruo <quwenruo@cn.fujitsu.com>
Signed-off-by: David Sterba <dsterba@suse.com>
7 years agobtrfs-progs: extent-tree: Enhance btrfs_record_file_extent
Qu Wenruo [Fri, 29 Jan 2016 05:03:24 +0000 (13:03 +0800)]
btrfs-progs: extent-tree: Enhance btrfs_record_file_extent

Btrfs_record_file_extent() has some small problems like:
1) Can't handle overlapping extents
2) May create extent larger than BTRFS_MAX_EXTENT_SIZE

So enhance it using previously added facilites.
This is used for later btrfs-convert, as for new convert, we create
saved image first, then copy inode.
Which will also cause extent overlapping.

Signed-off-by: Qu Wenruo <quwenruo@cn.fujitsu.com>
Signed-off-by: David Sterba <dsterba@suse.com>
7 years agobtrfs-progs: extent-tree: Introduce function to find the first overlapping extent
Qu Wenruo [Fri, 29 Jan 2016 05:03:23 +0000 (13:03 +0800)]
btrfs-progs: extent-tree: Introduce function to find the first overlapping extent

Introduce a new function, btrfs_search_overlap_extent() to find the first
overlapping extent.

It's useful for later btrfs-convert rework.

Signed-off-by: Qu Wenruo <quwenruo@cn.fujitsu.com>
Signed-off-by: David Sterba <dsterba@suse.com>
7 years agobtrfs-progs: Introduce function to create convert data chunks
Qu Wenruo [Fri, 29 Jan 2016 05:03:22 +0000 (13:03 +0800)]
btrfs-progs: Introduce function to create convert data chunks

Introduce new function, make_convert_data_chunks(), to build up data
chunks for convert.

It will call a modified version of btrfs_alloc_data_chunk() to force
data chunks to covert all known ext* data.

Signed-off-by: Qu Wenruo <quwenruo@cn.fujitsu.com>
Signed-off-by: David Sterba <dsterba@suse.com>
7 years agobtrfs-progs: Introduce function to setup temporary extent tree
Qu Wenruo [Fri, 29 Jan 2016 05:03:21 +0000 (13:03 +0800)]
btrfs-progs: Introduce function to setup temporary extent tree

Introduce new function, setup_temporary_extent_tree() to build a
temporary extent tree for make_btrfs_v2().

Signed-off-by: Qu Wenruo <quwenruo@cn.fujitsu.com>
Signed-off-by: David Sterba <dsterba@suse.com>
7 years agobtrfs-progs: Introduce function to initialize csum tree
Qu Wenruo [Fri, 29 Jan 2016 05:03:20 +0000 (13:03 +0800)]
btrfs-progs: Introduce function to initialize csum tree

Introduce new function, setup_temp_csum_tree(), to setup temporary
csum tree for make_btrfs_v2().

Signed-off-by: Qu Wenruo <quwenruo@cn.fujitsu.com>
Signed-off-by: David Sterba <dsterba@suse.com>
7 years agobtrfs-progs: Introduce function to initialize fs tree
Qu Wenruo [Fri, 29 Jan 2016 05:03:19 +0000 (13:03 +0800)]
btrfs-progs: Introduce function to initialize fs tree

Introudce new function, setup_temp_fs_tree(), to setup temporary fs tree
for make_btrfs_v2().

Signed-off-by: Qu Wenruo <quwenruo@cn.fujitsu.com>
Signed-off-by: David Sterba <dsterba@suse.com>
7 years agobtrfs-progs: Introduce function to initialize device tree
Qu Wenruo [Fri, 29 Jan 2016 05:03:18 +0000 (13:03 +0800)]
btrfs-progs: Introduce function to initialize device tree

Introduce new function, setup_temp_device_tree(), to setup temporary
device tree for make_btrfs_v2().

Signed-off-by: Qu Wenruo <quwenruo@cn.fujitsu.com>
Signed-off-by: David Sterba <dsterba@suse.com>
7 years agobtrfs-progs: Introduce function to setup temporary chunk root
Qu Wenruo [Fri, 29 Jan 2016 05:03:17 +0000 (13:03 +0800)]
btrfs-progs: Introduce function to setup temporary chunk root

Introduce new function, setup_temp_chunk_root(), to initialize temporary
chunk root for make_btrfs_v2().

Signed-off-by: Qu Wenruo <quwenruo@cn.fujitsu.com>
Signed-off-by: David Sterba <dsterba@suse.com>
7 years agobtrfs-progs: Introduce function to setup temporary tree root
Qu Wenruo [Fri, 29 Jan 2016 05:03:16 +0000 (13:03 +0800)]
btrfs-progs: Introduce function to setup temporary tree root

Introduce new function, setup_temp_tree_root(), to initialize temporary
tree root for make_btrfs_v2().

The new function will setup tree root at metadata chunk and ensure data
won't be written into metadata chunk.

Also, new make_btrfs_v2() will have a much better code structure than
old make_btrfs().

Signed-off-by: Qu Wenruo <quwenruo@cn.fujitsu.com>
Signed-off-by: David Sterba <dsterba@suse.com>