Commit Graph

2734 Commits (5407ee85fcaba91c9a0207ffad97a9b8b1c45c8c)
 

Author SHA1 Message Date
David Sterba 5407ee85fc 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>
2016-07-28 14:08:30 +02:00
David Sterba 9c92c4eb92 btrfs-progs: use values directly for BLOCK_GROUP_ macros
Signed-off-by: David Sterba <dsterba@suse.com>
2016-07-28 14:08:30 +02:00
David Sterba bf3a4c5f1b btrfs-progs: use unsigned type for extent_buffer flags
We're doing bit operations.

Signed-off-by: David Sterba <dsterba@suse.com>
2016-07-28 14:08:30 +02:00
David Sterba 24f1713777 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>
2016-07-28 14:08:30 +02:00
David Sterba 1c47e5b039 btrfs-progs: kerncompat: introduce put_unaligned_x helpers
Signed-off-by: David Sterba <dsterba@suse.com>
2016-07-28 14:08:30 +02:00
David Sterba 7ce43670da btrfs-progs: docs: update btrfs-balance manual page
Update the new options.

Signed-off-by: David Sterba <dsterba@suse.com>
2016-07-28 14:08:29 +02:00
David Sterba f6534e766a btrfs-progs: balance: add another (shorter) option for background
Signed-off-by: David Sterba <dsterba@suse.com>
2016-07-26 19:30:39 +02:00
David Sterba 6cd3ed9e7e 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>
2016-07-26 19:27:41 +02:00
Austin S. Hemmelgarn fe520b5cdc 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>
2016-07-26 19:26:29 +02:00
Omar Sandoval 1d6c7cb725 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>
2016-07-26 18:35:05 +02:00
David Sterba 029772be11 btrfs-progs: corrupt block: handle eb read and write errors
Resolves-coverity-id: 1261558
Signed-off-by: David Sterba <dsterba@suse.com>
2016-07-15 17:03:28 +02:00
David Sterba e319aa1490 btrfs-progs: corrupt block: handle block mapping errors in debug_corrupt_block
Signed-off-by: David Sterba <dsterba@suse.com>
2016-07-15 16:46:08 +02:00
David Sterba e4a2d99dfe 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>
2016-07-15 16:40:46 +02:00
David Sterba 3652782c3b 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>
2016-07-15 16:27:06 +02:00
David Sterba 048f6274ff btrfs-progs: handle ulist_add errors in qgroup-verify
Resolves-coverity-id: 1364084
Signed-off-by: David Sterba <dsterba@suse.com>
2016-07-15 16:12:00 +02:00
Liu Bo addd7e7f20 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>
2016-07-15 11:45:29 +02:00
David Sterba ebbddd7fd4 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>
2016-07-15 01:25:12 +02:00
David Sterba 94d9fbbf01 btrfs-progs: docs: update btrfs manual page
Signed-off-by: David Sterba <dsterba@suse.com>
2016-07-15 00:50:08 +02:00
David Sterba 4ec42ec46c btrfs-progs: docs: update btrfs-convert manual page
Signed-off-by: David Sterba <dsterba@suse.com>
2016-07-15 00:20:48 +02:00
David Sterba e7d6760b1c btrfs-progs: docs: update btrfs-filesystem manual page
Signed-off-by: David Sterba <dsterba@suse.com>
2016-07-14 23:43:38 +02:00
David Sterba 4692425c3f btrfs-progs: docs: update btrfs-scrub manual page
Signed-off-by: David Sterba <dsterba@suse.com>
2016-07-14 23:35:26 +02:00
David Sterba f551548372 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>
2016-07-13 19:41:55 +02:00
David Sterba 83dc05b013 btrfs-progs: balance: use errno directly
No need to store the errno in a local variable.

Signed-off-by: David Sterba <dsterba@suse.com>
2016-07-13 19:05:23 +02:00
David Sterba 6146dc04b2 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>
2016-07-13 19:00:01 +02:00
David Sterba c3e1703005 btrfs-progs: docs: update btrfs-subvolume manual page
Signed-off-by: David Sterba <dsterba@suse.com>
2016-07-13 18:44:52 +02:00
David Sterba 97bb68ebf3 btrfs-progs: docs: update btrfs-balance manual page
Signed-off-by: David Sterba <dsterba@suse.com>
2016-07-13 18:44:52 +02:00
Wang Shilong 419334be80 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>
2016-07-13 18:44:52 +02:00
Tsutomu Itoh dabd283583 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>
2016-07-13 18:44:52 +02:00
David Sterba e67219255c btrfs-progs: docs: man5, document control device
Signed-off-by: David Sterba <dsterba@suse.com>
2016-07-13 18:44:45 +02:00
Luis Henriques 08c70e18de 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>
2016-07-13 18:44:33 +02:00
Mark Fasheh a804254361 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>
2016-07-13 18:44:26 +02:00
Mark Fasheh 93dabf211d 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>
2016-07-13 18:44:13 +02:00
David Sterba 72e2a08a5c btrfs-progs: factor out repair mode
Signed-off-by: David Sterba <dsterba@suse.com>
2016-07-04 15:22:53 +02:00
Jeff Mahoney bbebe814c0 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>
2016-07-04 14:27:14 +02:00
Jeff Mahoney 31d8235410 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>
2016-07-04 14:24:40 +02:00
Jeff Mahoney 93014d2353 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>
2016-07-04 14:22:17 +02:00
Hans van Kranenburg dcd25b7e0d 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>
2016-07-04 14:12:38 +02:00
Wang Xiaoguang bf5f9c72af 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>
2016-07-04 14:01:04 +02:00
David Sterba 52fda816e8 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>
2016-07-04 13:45:15 +02:00
Qu Wenruo 2e58edbdf4 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>
2016-07-04 13:44:58 +02:00
Qu Wenruo afded5ea48 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>
2016-07-04 13:44:54 +02:00
Luis Henriques 82aaf603e0 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>
2016-07-04 13:37:24 +02:00
David Sterba 40650bf169
Btrfs progs v4.6.1
Signed-off-by: David Sterba <dsterba@suse.com>
2016-06-24 14:10:31 +02:00
David Sterba 360ef82904 btrfs-progs: update CHANGES for 4.6.1
Signed-off-by: David Sterba <dsterba@suse.com>
2016-06-24 14:05:44 +02:00
David Sterba 6a106862df 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>
2016-06-24 14:05:44 +02:00
David Sterba af62507bed btrfs-progs: build: add m4 macros for AC_CHECK_DEFINE
Signed-off-by: David Sterba <dsterba@suse.com>
2016-06-24 14:05:44 +02:00
David Sterba 82ef7a6d42 btrfs-progs: build: let autotools include m4
We'll need some non-standard macro definitions.

Signed-off-by: David Sterba <dsterba@suse.com>
2016-06-24 14:05:44 +02:00
Satoru Takeuchi 034643237a 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>
2016-06-24 14:05:43 +02:00
David Sterba cd9b35c37a 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>
2016-06-22 15:52:17 +02:00
David Sterba 670b73fe0a 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>
2016-06-22 15:50:17 +02:00