summaryrefslogtreecommitdiff
Commit message (Collapse)AuthorAge
* btrfs-progs: tests: verify btrfstune output during uuid-rewriteDavid Sterba2015-06-18
| | | | | | | 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>
* btrfs-progs: map-logical: Rework map-logical logicsQu Wenruo2015-06-17
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | [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>
* Btrfs-progs: map-logical: introduce write_extent_content functionQu Wenruo2015-06-17
| | | | | | | 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>
* Btrfs-progs: map-logical: introduce print_mapping_info functionQu Wenruo2015-06-17
| | | | | | | | | | | 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>
* btrfs-progs: map-logical: introduce map_one_extent functionQu Wenruo2015-06-17
| | | | | | | | 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>
* btrfs-progs: export read_extent_data functionQu Wenruo2015-06-17
| | | | | | | 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>
* Btrfs progs v4.1-rc1David Sterba2015-06-17
| | | | Signed-off-by: David Sterba <dsterba@suse.cz>
* btrfs-progs: Makefile: fix typo, dependencies for cmds-* filesDavid Sterba2015-06-16
| | | | | | | 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>
* btrfs-progs: send utils: deprecate path_cat and path_cat3David Sterba2015-06-16
| | | | | | The functios do no allocation error handling, use _out variants instead. Signed-off-by: David Sterba <dsterba@suse.cz>
* btrfs-progs: receive: use static buffer for cur_subvol pathDavid Sterba2015-06-16
| | | | | | | | 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>
* btrfs-progs: send utils: switch callbacks to patch_cat3_outDavid Sterba2015-06-16
| | | | | | | Also switch full_subvol_path to a static buffer as the interface semantics change. Signed-off-by: David Sterba <dsterba@suse.cz>
* btrfs-progs: receive: use static buffer for write_pathDavid Sterba2015-06-16
| | | | Signed-off-by: David Sterba <dsterba@suse.cz>
* btrfs-progs: receive: use static buffer for root_subvol_pathDavid Sterba2015-06-16
| | | | Signed-off-by: David Sterba <dsterba@suse.cz>
* btrfs-progs: unify naming of key types in print-treeDavid Sterba2015-06-16
| | | | | | Drop the BTRFS_ prefix and _KEY suffix where applicable. Signed-off-by: David Sterba <dsterba@suse.cz>
* btrfs-progs: send utils: switch callbacks to new helpersDavid Sterba2015-06-16
| | | | | | | 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>
* btrfs-progs: and new path_cat helpers to send utilsDavid Sterba2015-06-15
| | | | | | | 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>
* btrfs-progs: send: use static buffer for output file nameDavid Sterba2015-06-15
| | | | Signed-off-by: David Sterba <dsterba@suse.cz>
* btrfs-progs: receive: use static buffer for source fileDavid Sterba2015-06-15
| | | | | | We should copy the optarg anyway. Signed-off-by: David Sterba <dsterba@suse.cz>
* btrfs-progs: receive: use static buffer for mount point option argumentDavid Sterba2015-06-15
| | | | Signed-off-by: David Sterba <dsterba@suse.cz>
* btrfs-progs: add helper for copying pathsDavid Sterba2015-06-12
| | | | | | Check the source path length and do the copy. Signed-off-by: David Sterba <dsterba@suse.cz>
* btrfs-progs: receive: use static buffer for cur_subvolDavid Sterba2015-06-12
| | | | | | | 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>
* btrfs-progs: properly set up ioctl argumentsDavid Sterba2015-06-12
| | | | | | | | 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>
* btrfs-progs: use PATH_MAX instead of BTRFS_PATH_NAME_MAXDavid Sterba2015-06-12
| | | | | | | | | | 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>
* btrfs-progs: send: add option to for the no-data modeDavid Sterba2015-06-12
| | | | Signed-off-by: David Sterba <dsterba@suse.cz>
* btrfs-progs: receive: implement the update_extent callbackDavid Sterba2015-06-12
| | | | | | | 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>
* btrfs-progs: make receive work inside of subvolumesJosef Bacik2015-06-12
| | | | | | | | | | | | | 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>
* btrfs-progs: use less memory for pretty_size_mode buffersDavid Sterba2015-06-11
| | | | | | | | | | | | | | | | | | 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>
* btrfs-progs: print error within test_num_disk_vs_raidDavid Sterba2015-06-11
| | | | | | | | 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>
* btrfs-progs: print error within test_dev_for_mkfsDavid Sterba2015-06-11
| | | | | | | | 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>
* btrfs-progs: accept --help as option in the standalone utilitiesDavid Sterba2015-06-11
| | | | Signed-off-by: David Sterba <dsterba@suse.cz>
* btrfs-progs: add missing includes to header filesDavid Sterba2015-06-10
| | | | | | | 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>
* btrfs-progs: add helper to wait for subvolume cleaningDavid Sterba2015-06-09
| | | | Signed-off-by: David Sterba <dsterba@suse.cz>
* btrfs-progs: subvol: let sync check only current deletionsDavid Sterba2015-06-09
| | | | | | | | | | | | | | | | | | | | 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>
* btrfs-progs: cleanup after errors in open_file_or_dir3David Sterba2015-06-09
| | | | | | | | 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>
* btrfs-progs: receive: fix minor resource leakDavid Sterba2015-06-09
| | | | | Resolves-coverity-id: 1302985 Signed-off-by: David Sterba <dsterba@suse.cz>
* btrfs-progs: print compact help for btrfsDavid Sterba2015-06-09
| | | | | | | | 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>
* btrfs-progs: add command group info stringsDavid Sterba2015-06-09
| | | | | | They're printed in the 'btrfs' command group summary. Signed-off-by: David Sterba <dsterba@suse.cz>
* btrfs-progs: fix argv0_buf handlingDavid Sterba2015-06-09
| | | | | | | | | | | | | | | | 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>
* btrfs-progs: remove stray deprecation noticeDavid Sterba2015-06-08
| | | | | | | 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>
* btrfs-progs: mkfs: make the summary more compactDavid Sterba2015-06-08
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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>
* btrfs-progs: mkfs: drop mixed from summaryDavid Sterba2015-06-08
| | | | | | The mixed-bg incompat feature should be enough. Signed-off-by: David Sterba <dsterba@suse.cz>
* btrfs-progs: mkfs, drop UUID from device summaryDavid Sterba2015-06-08
| | | | Signed-off-by: David Sterba <dsterba@suse.cz>
* btrfs-progs: mkfs, move uuid to the end of device summaryDavid Sterba2015-06-08
| | | | Signed-off-by: David Sterba <dsterba@suse.cz>
* btrfs-progs: mkfs: print the summaryGoffredo Baroncelli2015-06-08
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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>
* btrfs-progs: mkfs: track sizes of created block groupsGoffredo Baroncelli2015-06-08
| | | | | Signed-off-by: Goffredo Baroncelli <kreijack@inwind.it> Signed-off-by: David Sterba <dsterba@suse.cz>
* btrfs-progs: return the fsid from make_btrfs()Goffredo Baroncelli2015-06-08
| | | | | | | | | | | 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>
* btrfs-progs: add strdup in btrfs_add_to_fsid() to track the device pathGoffredo Baroncelli2015-06-08
| | | | | | | | | 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>
* btrfs-progs: mkfs: do not try to register non-block-devicesDavid Sterba2015-06-08
| | | | | | | | | | | | | | | | | 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>
* btrfs-progs: mkfs: move info message out of btrfs_add_to_fsidDavid Sterba2015-06-08
| | | | Signed-off-by: David Sterba <dsterba@suse.cz>
* btrfs-progs: mkfs: accept mixed case for profile namesDavid Sterba2015-06-06
| | | | Signed-off-by: David Sterba <dsterba@suse.cz>