The search header is usually accessed in an unaligned way, we could
trigger errors (SIGBUS) on architectures that do not support that.
Signed-off-by: David Sterba <dsterba@suse.com>
In the new add_extent_rec_nolookup() function, we add bytes_used to
update found bytes accounting.
However there is a typo that we used tmpl->nr, which should be rec->nr.
This will make us to add 1 for data backref, instead the correct size.
Reported-by: Lu Fengqi <lufq.fnst@cn.fujitsu.com>
Signed-off-by: Qu Wenruo <quwenruo@cn.fujitsu.com>
Signed-off-by: David Sterba <dsterba@suse.com>
The extent record's max_size might be 0 and the stripe crossing check
will report a false positive, should use the filesyste nodesize. There's
a global fs_info available.
Signed-off-by: David Sterba <dsterba@suse.com>
Similar to add_extent_rec_nolookup, pass the arguments via a temporary
structure. In case the extent is found, some of the values are not
assigned directly so the semantics is preserved.
Signed-off-by: David Sterba <dsterba@suse.com>
There are just 3 values of flag_block_full_backref, we can utilize a
bitfield and save 8 bytes (192 now).
Signed-off-by: David Sterba <dsterba@suse.com>
Reduce number of parameters that just fill the extent_record from a
temporary template that's supposed to be zeroed and filled by the
callers.
Signed-off-by: David Sterba <dsterba@suse.com>
We want to support version 1.41 due to longterm and enterprise distros,
make the check explicit.
Signed-off-by: Qu Wenruo <quwenruo@cn.fujitsu.com>
Signed-off-by: David Sterba <dsterba@suse.com>
A short delay with a warning before starting a full balance should
improve usability. We have been getting reports from people who run full
balance after following some random advice and then get surprised by the
performance impact.
The countdown is done even when run from scripts, but as the whole
balance takes significanly more time, this shouldn't be an issue.
Signed-off-by: David Sterba <dsterba@suse.com>
The changes are posted to the mailinglist and to the wiki, but for
packaging reasons it's good to have them locally in the git as well.
The initial conversion from wiki was done by Nick, then adjusted by me.
Reported-by: Nicholas D Steeves <nsteeves@gmail.com>
Signed-off-by: David Sterba <dsterba@suse.com>
Read qgroup status for its flags like QGROUP_STATUS_FLAG_RESCAN and
QGROUP_STATUS_FLAG_INCONSISTENT.
This will help to avoid false alert for case like qgroup rescan is still
running when un-mounted.
Signed-off-by: Qu Wenruo <quwenruo@cn.fujitsu.com>
Signed-off-by: David Sterba <dsterba@suse.com>
Qgroup verify codes will read fs root to check if the subvolume exists.
But it forgot to free the extent buffer read out, only freeing the
memory.
Fix it by also freeing the extent buffers.
Signed-off-by: Qu Wenruo <quwenruo@cn.fujitsu.com>
Signed-off-by: David Sterba <dsterba@suse.com>
Before this patch, although btrfsck will check qgroups if quota is
enabled, it always return 0 even qgroup numbers are corrupted.
Fix it by allowing return value from report_qgroups function (formally
defined as print_qgroup_difference).
Signed-off-by: Qu Wenruo <quwenruo@cn.fujitsu.com>
Signed-off-by: David Sterba <dsterba@suse.com>
>From commit c742debab1 ('btrfs-progs: fix a regression that
"property" with -t option doesn't work'), the number of arguments
is checked strictly. So the following condition never be
satisfied.
Signed-off-by: Satoru Takeuchi <takeuchi_satoru@jp.fujitsu.com>
Signed-off-by: David Sterba <dsterba@suse.com>
* actual result
=======================================
# ./btrfs device ready /dev/sdb foo
#
=======================================
* expecting result
=======================================
# ./btrfs device ready /dev/sdb foo
btrfs device ready: too many arguments
usage: btrfs device ready <device>
Check device to see if it has all of its devices in cache for mounting
#
=======================================
Signed-off-by: Satoru Takeuchi <takeuchi_satoru@jp.fujitsu.com>
Signed-off-by: David Sterba <dsterba@suse.com>
is_seen_fsid() uses simple hash to check if FS was seen before at
walking on FS list in 'filesystem show' command: hash key is first byte
of the UUID. This function doesn't check full UUID then, so, if there
are two FS with same first byte in UUIDs exist, only one will be shown:
root@test:~# btrfs fi show
Label: 'System' uuid: 688cb918-7bac-4c8e-9b11-8d047eb14cf4
Total devices 2 FS bytes used 1.76GiB
devid 1 size 3.46TiB used 4.01GiB path /dev/sda2
devid 2 size 6.91TiB used 4.01GiB path /dev/sdb2
Global spare
root@test:~# grep btrfs /proc/mounts
/dev/sda2 / btrfs rw,relatime,space_cache,subvolid=256,subvol=/root 0 0
/dev/sdc /media/688cb918-7bac-4c8e-9b11-8d047eb14cf4 btrfs rw,relatime,space_cache,subvolid=5,subvol=/ 0 0
root@test:~# btrfs fi show --all-devices
Label: 'System' uuid: 688cb918-7bac-4c8e-9b11-8d047eb14cf4
Total devices 2 FS bytes used 1.76GiB
devid 1 size 3.46TiB used 4.03GiB path /dev/sda2
devid 2 size 6.91TiB used 4.01GiB path /dev/sdb2
Label: 'test' uuid: 683b1a80-ca7f-4c4d-b87b-7155401a4d18
Total devices 7 FS bytes used 2.06MiB
devid 1 size 7.28TiB used 1.57GiB path /dev/sdc
devid 2 size 7.28TiB used 1.57GiB path /dev/sdd
devid 3 size 7.28TiB used 1.57GiB path /dev/sde
devid 4 size 7.28TiB used 1.57GiB path /dev/sdf
devid 5 size 7.28TiB used 1.57GiB path /dev/sdg
devid 6 size 7.28TiB used 1.57GiB path /dev/sdh
devid 7 size 7.28TiB used 1.57GiB path /dev/sdi
To resolve this collision, search for full FSID in the list of seen
filesystems.
Signed-off-by: Yauhen Kharuzhy <yauhen.kharuzhy@zavadatar.com>
Signed-off-by: David Sterba <dsterba@suse.com>
Print e.g. "[devid:4].write_io_errs 6" instead of
"[(null)].write_io_errs 6" when device is missing.
Signed-off-by: Patrik Lundquist <patrik.lundquist@gmail.com>
Signed-off-by: David Sterba <dsterba@suse.com>
The other get_device_info() is in the same file, 4 lines above.
Signed-off-by: Anand Jain <anand.jain@oracle.com>
Signed-off-by: David Sterba <dsterba@suse.com>
Separate the part of add_extent_rec that comes after the lookup does not
succeed, there are callers interested in just this.
Signed-off-by: David Sterba <dsterba@suse.com>
Nodesize is used in kernel, the values are always equal. We have to keep
leafsize in headers, similarly the tree setting functions still take and
set leafsize, but it's effectively a no-op.
Signed-off-by: David Sterba <dsterba@suse.com>
At least 2 user from mail list reported btrfsck reported false alert of
"bad metadata [XXXX,YYYY) crossing stripe boundary".
While the reported number are all inside the same 64K boundary.
After some check, all the false alert have the same bytenr feature,
which can be divided by stripe size (64K).
The result seems to be initial 'max_size' can be 0, causing 'start' +
'max_size' - 1, to cross the stripe boundary.
Fix it by always update extent_record->cross_stripe when the
extent_record is updated, to avoid temporary false alert to be reported.
Signed-off-by: Qu Wenruo <quwenruo@cn.fujitsu.com>
Signed-off-by: David Sterba <dsterba@suse.com>
To accept DUP on multidev fs, in addition to the following
commit, we need to mark DUP as an allowed data/metadata
profile.
commit 42f1279bf8e9 ("btrfs-progs: mkfs: allow DUP on multidev fs, only warn")
* actual result
=============================================
# ./mkfs.btrfs -f -m DUP -d DUP /dev/sdb1 /dev/sdb2
btrfs-progs v4.5-24-ga35b7e6
See http://btrfs.wiki.kernel.org for more information.
WARNING: DUP is not recommended on filesystem with multiple devices
ERROR: unable to create FS with metadata profile DUP (have 2 devices but 1 devices are required)
=============================================
* expected result
=============================================
# ./mkfs.btrfs -f -m dup -d dup /dev/sdb1 /dev/sdb2
WARNING: DUP is not recommended on filesystem with multiple devices
btrfs-progs v4.5-25-g1a10a3c
See http://btrfs.wiki.kernel.org for more information.
Label: (null)
UUID: 010d72ff-c87c-4516-8916-5e635719d110
Node size: 16384
Sector size: 4096
Filesystem size: 28.87GiB
Block group profiles:
Data: DUP 1.01GiB
Metadata: DUP 1.01GiB
System: DUP 12.00MiB
SSD detected: no
Incompat features: extref, skinny-metadata
Number of devices: 2
Devices:
ID SIZE PATH
1 953.00MiB /dev/sdb1
2 27.94GiB /dev/sdb2
==================================================
Signed-off-by: Satoru Takeuchi <takeuchi_satoru@jp.fujitsu.com>
Signed-off-by: David Sterba <dsterba@suse.com>
There's a mix of opencoded strncpy + null termination, strncpy, memcppy
without termination etc. Unify them and use the helper.
Resolves-coverity-id: 1357105
Signed-off-by: David Sterba <dsterba@suse.com>
The DUP profile can work on multiple filesystems, the limitation is
rather artificial. Let the user make the decision and print a warning.
Signed-off-by: David Sterba <dsterba@suse.com>
$ make clean
$ make btrfs-debug-tree
will fail because the dependency from $(btrfs_debug_tree_objects) is
missing. The variable standalone_deps magically collects all the deps
and will build them in advance. The simple fix to use the existing
substitution based on $@ does not work for pattern rules, as Noah found
out.
Reported-by: Noah Massey <noah.massey@gmail.com>
Signed-off-by: David Sterba <dsterba@suse.com>