aboutsummaryrefslogtreecommitdiffstats
path: root/cmds-subvolume.c
Commit message (Collapse)AuthorAgeFilesLines
* btrfs-progs: do not set optind if not necessaryDavid Sterba2016-07-131-5/+0
| | | | | | | 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>
* btrfs-progs: subvolume sync: fix handling of -s optionMarek Rusinowski2016-05-111-3/+2
| | | | | | | | | | | | | Setting check interval for subvolume sync resulted in picking wrong element from argv for it's value: $ btrfs subvolume sync -s 10 ./dir ERROR: invalid sleep interval ./dir $ btrfs subvolume sync ./dir -s 10 Segmentation fault Signed-off-by: Marek Rusinowski <marekrusinowski@gmail.com> Signed-off-by: David Sterba <dsterba@suse.com>
* btrfs-progs: use ioctl search headers everywhereDavid Sterba2016-05-111-6/+7
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Generated by following semantic patch and manually tweaked. <SmPL> @@ struct btrfs_ioctl_search_header *SH; @@ ( - SH->objectid + btrfs_search_header_objectid(SH) | - SH->offset + btrfs_search_header_offset(SH) | - SH->transid + btrfs_search_header_transid(SH) | - SH->len + btrfs_search_header_len(SH) | - SH->type + btrfs_search_header_type(SH) ) </SmPL> Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=112131 Reported-and-tested-by: Anatoly Pugachev <matorola@gmail.com> Signed-off-by: David Sterba <dsterba@suse.com>
* btrfs-progs: create get_subvol_info()Anand Jain2016-03-301-55/+25
| | | | | | | | | get_subvol_info() is useful as we are adding more features around subvolume. This function was inline with the function cmd_subvol_show(). Signed-off-by: Anand Jain <anand.jain@oracle.com> Signed-off-by: David Sterba <dsterba@suse.com>
* btrfs-progs: move test_issubvolume() to utils.cAnand Jain2016-03-301-27/+0
| | | | | Signed-off-by: Anand Jain <anand.jain@oracle.com> Signed-off-by: David Sterba <dsterba@suse.com>
* btrfs-progs: subvol get-default: fix argument parsingSatoru Takeuchi2016-03-181-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | "sub get-default" does't work since the following commit. commit 176aeca9a148 ("btrfs-progs: add getopt stubs where needed") * actual result ================================================== # ./btrfs sub get-default /btrfs btrfs subvolume get-default: too few arguments usage: btrfs subvolume get-default <path> Get the default subvolume of a filesystem ================================================== * expected result ================================================== # btrfs sub get-default /btrfs ID 5 (FS_TREE) ================================================== Signed-off-by: Satoru Takeuchi <takeuchi_satoru@jp.fujitsu.com> Signed-off-by: David Sterba <dsterba@suse.com>
* btrfs-progs: subvol sync: fix memory corruption, undersized arrayDavid Sterba2016-03-171-1/+2
| | | | | | | | | | | | | | The subvol sync command crashed randomly at the end with *** glibc detected *** btrfs: double free or corruption (out): 0x00000000006ab040 *** This is caused by running out of the ids array in case there are more than 128 subvolumes. The array is increased in steps but does not account the size of the item, so there was room for 1024 / 8 = 128 subvolume ids. Fixes: c9f885ec8963 ("btrfs-progs: subvol: let sync check only current deletions") Signed-off-by: David Sterba <dsterba@suse.com>
* btrfs-progs: add getopt stubs where neededDavid Sterba2016-03-141-7/+13
| | | | | | | | | Commands that do not take any options do not use getopt, which means the standard option separator "--" does not work. Update all command handlers that need it, argv needs to be referenced using the optind that is correctly pointed after the separator. Signed-off-by: David Sterba <dsterba@suse.com>
* btrfs-progs: subvol show: use clean_args_no_options instead of opencodingDavid Sterba2016-01-141-14/+1
| | | | Signed-off-by: David Sterba <dsterba@suse.com>
* btrfs-progs: also check filesystem type in test_issubvolumeDavid Sterba2016-01-141-2/+11
| | | | | | | | A subvolume is a directory with inode number 256 on a btrfs filesytem. Add the missing check to test_issubvolume for completeness, otherwise we always do that in btrfs_open_dir. Signed-off-by: David Sterba <dsterba@suse.com>
* btrfs-progs: more verbose errors from test_issubvolumeDavid Sterba2016-01-141-4/+5
| | | | Signed-off-by: David Sterba <dsterba@suse.com>
* btrfs-progs: let test_issubvolume return the exact errorDavid Sterba2016-01-141-8/+8
| | | | | | Return any error from stat, minor cleanups. Signed-off-by: David Sterba <dsterba@suse.com>
* btrfs-progs: use symbolic name for subvolume inode number in test_issubvolumeDavid Sterba2016-01-141-1/+2
| | | | Signed-off-by: David Sterba <dsterba@suse.com>
* btrfs-progs: handle errors from test_isdirDavid Sterba2016-01-141-0/+8
| | | | Signed-off-by: David Sterba <dsterba@suse.com>
* btrfs-progs: subvol show: handle options by getoptDavid Sterba2016-01-131-3/+18
| | | | | | | | | The subvolume show command does not take any optios but at least it should honor "--", as reported. Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=110181 Reported-by: <moviuro+kernel@gmail.com> Signed-off-by: David Sterba <dsterba@suse.com>
* btrfs-progs: remove unnecessary errno temp variablesDavid Sterba2016-01-121-4/+3
| | | | | | | We can read errno directly if it's not clobbered by any intermediate calls. Signed-off-by: David Sterba <dsterba@suse.com>
* btrfs-progs: cmd subvolume: switch to common error message wrapperDavid Sterba2016-01-121-59/+41
| | | | | | Message texts were adjusted. Signed-off-by: David Sterba <dsterba@suse.com>
* btrfs-progs: subvolume: use btrfs_open_dir for btrfs subvolume commandZhao Lei2015-11-021-37/+19
| | | | | | | | | | | | | | | | | | | | | | We can use btrfs_open_dir() to check whether target dir is in btrfs's mount point before open, instead of checking it in kernel space of ioctl, and return fuzzy error message. Before patch: # (/mnt/tmp is not btrfs mountpoint) # # btrfs subvolume create /mnt/tmp/123 Create subvolume '/mnt/tmp/123' ERROR: cannot create subvolume - Inappropriate ioctl for device # After patch: # btrfs subvolume create /mnt/tmp/123 ERROR: not btrfs filesystem: /mnt/tmp # Signed-off-by: Zhao Lei <zhaolei@cn.fujitsu.com> Signed-off-by: David Sterba <dsterba@suse.com>
* btrfs-progs: subvol sync: fix reversed conditionDavid Sterba2015-10-071-1/+1
| | | | | | | | | | | In my local change to 07cc891d1d9819d5cf0628af555e7727d289cf7b ("btrfs-progs: Simplify all-subvolumn-clean condition for wait_for_subvolume_cleaning") that reversed the meaning of the variable dirty -> clean, I made a mistake and broke 'subvol sync' that will not wait as expected and ends prematurely. Zhao Lei's original patch worked. CC: Zhao Lei <zhaolei@cn.fujitsu.com> Signed-off-by: David Sterba <dsterba@suse.com>
* btrfs-progs: Simplify all-subvolumn-clean condition for ↵Zhao Lei2015-09-011-8/+7
| | | | | | | | | | | | | wait_for_subvolume_cleaning Instead of using a dirty-subvolumn-counter in old code, this patch turn to use a simple and direct way: If (not dirty-subvolumn found in current loop) { return all_clean; } Signed-off-by: Zhao Lei <zhaolei@cn.fujitsu.com> Signed-off-by: David Sterba <dsterba@suse.com>
* btrfs-progs: Simplify memory allocation for enumerate_dead_subvolsZhao Lei2015-09-011-11/+6
| | | | | | | | | | | No need prepare memory for enumerate_dead_subvols() in caller, and pass additional argument for allocated length. Just do every thing inside enumerate_dead_subvols(), it will not increase malloc count, but make code simple. Signed-off-by: Zhao Lei <zhaolei@cn.fujitsu.com> Signed-off-by: David Sterba <dsterba@suse.com>
* btrfs-progs: Fix wrong return value of wait_for_subvolume_cleaning()Zhao Lei2015-09-011-1/+3
| | | | | | | | | | | | | | | | Reproduce: # btrfs subvolume sync /mnt/btrfs Subvolume id 323 is gone # echo $? 1 # Reason: wait_for_subvolume_cleaning() return !0 in right case, because value of ret is set to "is subvolume clean" state before return. Signed-off-by: Zhao Lei <zhaolei@cn.fujitsu.com> Signed-off-by: David Sterba <dsterba@suse.com>
* btrfs-progs: Fix infinite loop of btrfs subvolumn syncZhao Lei2015-09-011-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | We can trigger the bug by following operation: (no wait between commands 3~5) btrfs subvolume create /mnt/btrfs/mysubvol btrfs subvolume snapshot /mnt/btrfs/mysubvol /mnt/btrfs/mysubvol_snap btrfs subvolume delete /mnt/btrfs/mysubvol_snap btrfs subvolume delete /mnt/btrfs/mysubvol btrfs subvolume sync /mnt/btrfs The last command will not exit. Reason: List of "deleted subvolumes" are not currectly set. It caused by a typo of value assign, in detail: *ids[idx] = sh->offset; should be: (*ids)[idx] = sh->offset; So only first element is set to right memory address. If there are multiple "deleted subvolumes", program will keep wait. Above typo also caused some segment fault in my test. This patch fixed above bug. Signed-off-by: Zhao Lei <zhaolei@cn.fujitsu.com> Signed-off-by: David Sterba <dsterba@suse.com>
* btrfs-progs: remove code for setup mntid in cmd_subvol_showZhao Lei2015-08-311-7/+1
| | | | | | | | We don't need to use value of mntid in cmd_subvol_show(), no need to get its value. Signed-off-by: Zhao Lei <zhaolei@cn.fujitsu.com> Signed-off-by: David Sterba <dsterba@suse.com>
* btrfs-progs: unify naming of command handlersDavid Sterba2015-08-311-9/+11
| | | | | | Use cmd_ + group + command schema. Signed-off-by: David Sterba <dsterba@suse.com>
* btrfs-progs: properly set up ioctl argumentsDavid Sterba2015-06-121-0/+1
| | | | | | | | 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: add helper to wait for subvolume cleaningDavid Sterba2015-06-091-49/+61
| | | | Signed-off-by: David Sterba <dsterba@suse.cz>
* btrfs-progs: subvol: let sync check only current deletionsDavid Sterba2015-06-091-45/+123
| | | | | | | | | | | | | | | | | | | | 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: add command group info stringsDavid Sterba2015-06-091-1/+4
| | | | | | They're printed in the 'btrfs' command group summary. Signed-off-by: David Sterba <dsterba@suse.cz>
* btrfs-progs: subvol show: tweak outputDavid Sterba2015-06-031-8/+8
| | | | | | | | | - capitalize UUID - print otime with timezone - rename 'Object ID' to 'Subvolume ID' - add ID to Parent and Top level Signed-off-by: David Sterba <dsterba@suse.cz>
* btrfs-progs: subvol show: print received uuidDavid Sterba2015-06-031-0/+6
| | | | Signed-off-by: David Sterba <dsterba@suse.cz>
* btrfs-progs: getopt, use symbolic name for argument requirementsDavid Sterba2015-04-081-1/+1
| | | | Signed-off-by: David Sterba <dsterba@suse.cz>
* btrfs-progs: make getopt tables static constDavid Sterba2015-01-191-2/+2
| | | | Signed-off-by: David Sterba <dsterba@suse.cz>
* btrfs-progs: cleanup, move getop long options close to their useDavid Sterba2015-01-191-10/+11
| | | | | | Move long_option defintions just before getopt_long everywhere. Signed-off-by: David Sterba <dsterba@suse.cz>
* btrfs-progs: remove uneccessary subvol name check for subvol deletionGui Hecheng2015-01-141-16/+1
| | | | | | | | | | When we want to delete a subvol, we first check to see whether it is a subvolume or not. After the check, we are sure that it is a valid subvol, don't have to check its name. Signed-off-by: Gui Hecheng <guihc.fnst@cn.fujitsu.com> [removed unused variable 'len'] Signed-off-by: David Sterba <dsterba@suse.cz>
* btrfs-progs: Remove redundant short description from cmd_snapshot_usageMartin Volf2015-01-141-1/+0
| | | | | | | | cmd_snapshot_usage in cmds-subvolume.c contains the short description twice. Remove the first one. Signed-off-by: Martin Volf <martin.volf.42@gmail.com> Signed-off-by: David Sterba <dsterba@suse.cz>
* btrfs-progs: subvol delete: rename variable to match the option nameDavid Sterba2014-12-101-10/+10
| | | | Signed-off-by: David Sterba <dsterba@suse.cz>
* btrfs-progs: subvol delete: add verbosity optionDavid Sterba2014-12-101-4/+10
| | | | | | Add an the option -v and use it for the transaction commit mode message. Signed-off-by: David Sterba <dsterba@suse.cz>
* btrfs-progs: let subvol delete print commit mode inlineDavid Sterba2014-12-101-1/+3
| | | | | | | | | | | | There are options to specify if the subvolume deletion should wait for commit after each subvol or at the end. This is reported at the beginning and considered as a noise. We'd like to report the mode for each subvolume instead. http://www.mail-archive.com/linux-btrfs%40vger.kernel.org/msg34617.html Reported-by: Marc MERLIN <marc@merlins.org Signed-off-by: David Sterba <dsterba@suse.cz>
* btrfs-progs: fix return value problem for btrfs sub showGui Hecheng2014-11-271-3/+3
| | | | | | | | | | | | | | | | If you exec: # btrfs sub show <dir> <== non-subvolume dir The cmd print error messages as expected, but returns 0. By convetion, it should return non-zero and we should explicitly set it before it goto out. With other pieces adopted: 1) removed a unnecessary return value set -EINVAL 2) fixed another code branch which may return 0 upon error. 3) with 2) applied, the ret = 0 follows can be removed Signed-off-by: Gui Hecheng <guihc.fnst@cn.fujitsu.com> Signed-off-by: David Sterba <dsterba@suse.cz>
* btrfs-progs: wait until all subvolumes are cleanedDavid Sterba2014-10-101-0/+232
| | | | | | | | Enhance the 'subvolume' subcommand to wait until a given list of subvolumes or all currently scheduled for deletion are cleaned completely from the filesystem. Signed-off-by: David Sterba <dsterba@suse.cz>
* btrfs-progs: Add -R to list UUIDs of original received subvolumeHugo Mills2014-09-141-1/+5
| | | | | | | | | | | When using send/receive, it it useful to be able to match up source subvols on the send side (as, say, for -p or -c clone sources) with their corresponding copies on the receive side. This patch adds a -R option to btrfs sub list to show the received subvolume UUID on the receive side, allowing the user to perform that matching correctly. Signed-off-by: Hugo Mills <hugo@carfax.org.uk> Signed-off-by: David Sterba <dsterba@suse.cz>
* btrfs-progs: Fix spelling in btrfs sub list helpHugo Mills2014-08-221-1/+1
| | | | | | | "below", not "bellow" Signed-off-by: Hugo Mills <hugo@carfax.org.uk> Signed-off-by: David Sterba <dsterba@suse.cz>
* btrfs-progs: move test_isdir() to utils.cSatoru Takeuchi2014-08-221-19/+0
| | | | | | | | | | | | Since test_isdir() is a utility function, it's better to move it to utils.c. In addition, "const char *" is more appropriate type as its "path" argument because this argument is not changed in this function. Signed-off-by: Satoru Takeuchi <takeuchi_satoru@jp.fujitsu.com> Cc: David Sterba <dsterba@suse.cz> Cc: Mike Fleetwood <mike.fleetwood@googlemail.com> Signed-off-by: David Sterba <dsterba@suse.cz>
* btrfs-progs: introduce test_issubvolname() for simplicitySatoru Takeuchi2014-08-221-6/+3
| | | | | | | | | | | There are many duplicated codes to check if the given string is correct subvolume name. Introduce test_issubvolname() for this purpose for simplicity. Signed-off-by: Satoru Takeuchi <takeuchi_satoru@jp.fujitsu.com> Cc: David Sterba <dsterba@suse.cz> Cc: Mike Fleetwood <mike.fleetwood@googlemail.com> Signed-off-by: David Sterba <dsterba@suse.cz>
* btrfs-progs: Unify the messy error message formatsSatoru Takeuchi2014-08-221-7/+7
| | | | | Signed-off-by: Satoru Takeuchi <takeuchi_satoru@jp.fujitsu.com> Signed-off-by: David Sterba <dsterba@suse.cz>
* btrfs-progs: Check fstype in find_mount_root()Qu Wenruo2014-08-221-0/+7
| | | | | | | | | | | | | | When calling find_mount_root(), caller in fact wants to find the mount point of *BTRFS*. So also check ent->fstype in find_mount_root() and do special error string output in caller. This will suppress a lot of "Inapproiate ioctl for device" error message. Signed-off-by: Qu Wenruo <quwenruo@cn.fujitsu.com> Signed-off-by: David Sterba <dsterba@suse.cz>
* Btrfs-progs: switch to arg_strtou64() part3Wang Shilong2014-03-211-6/+2
| | | | | | | | | Switch to new helper arg_strtou64(), also check if user assign a valid super copy. Signed-off-by: Wang Shilong <wangsl.fnst@cn.fujitsu.com> Signed-off-by: David Sterba <dsterba@suse.cz> Signed-off-by: Chris Mason <clm@fb.com>
* Btrfs-progs: fix double free when deleting subvolumesWang Shilong2014-01-311-0/+3
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Steps to reproduce: # mkfs.btrfs -f /dev/sda8 # mount /dev/sda8 /mnt # btrfs sub create /mnt/a # touch /mnt/b # btrfs sub create /mnt/c # btrfs sub delete /mnt/* Above steps will trigger following abortion: ERROR: 'b' is not a subvolume *** Error in `btrfs': double free or corruption (out): 0x0000000002116060 *** ======= Backtrace: ========= /lib64/libc.so.6[0x3fa467cef8] /lib64/libc.so.6(closedir+0xd)[0x3fa46b846d] btrfs[0x43e608] btrfs[0x40622f] btrfs[0x403d19] btrfs[0x4062c6] btrfs[0x403f68] We try to fix it by resetting @fd && @dirstream before trying next subvolume deletion. Signed-off-by: Wang Shilong <wangsl.fnst@cn.fujitsu.com> Signed-off-by: David Sterba <dsterba@suse.cz> Signed-off-by: Chris Mason <clm@fb.com>
* btrfs-progs: fix minor grammar issuesMitchel Humpherys2014-01-311-5/+5
| | | | | | | | Remove the extraneous `to' from `Can't access to X'. Signed-off-by: Mitchel Humpherys <mitch.special@gmail.com> Signed-off-by: David Sterba <dsterba@suse.cz> Signed-off-by: Chris Mason <clm@fb.com>