btrfs-progs/cmds
Omar Sandoval 018306809b btrfs-progs: receive: don't lookup clone root for received subvolume
When we process a clone request, we look up the source subvolume by
UUID, even if the source is the subvolume that we're currently
receiving. Usually, this is fine. However, if for some reason we
previously received the same subvolume, then this will use paths
relative to the previously received subvolume instead of the current
one. This is incorrect, since the send stream may use temporary names
for the clone source. This can be reproduced as follows:

  btrfs subvolume create subvol
  dd if=/dev/urandom of=subvol/foo bs=1M count=1
  cp --reflink subvol/foo subvol/bar
  mkdir subvol/dir
  mv subvol/foo subvol/dir/
  btrfs property set subvol ro true
  btrfs send -f send.data subvol
  mkdir first second
  btrfs receive -f send.data first
  btrfs receive -f send.data second

The second receive results in this error:

  ERROR: cannot open first/subvol/o259-7-0/foo: No such file or directory

Fix it by always cloning from the current subvolume if its UUID matches.
This has the nice side effect of avoiding unnecessary UUID tree lookups
in that case.

Fixes: f1c24cd80d ("Btrfs-progs: add btrfs send/receive commands")
Reviewed-by: Filipe Manana <fdmanana@suse.com>
Signed-off-by: Omar Sandoval <osandov@fb.com>
Signed-off-by: David Sterba <dsterba@suse.com>
2020-03-31 18:37:36 +02:00
..
balance.c btrfs-progs: add support for raid1c3 and raid1c4 2019-11-22 19:09:50 +01:00
commands.h btrfs-progs: help: define helper for command with flags 2019-07-03 20:49:04 +02:00
device.c btrfs-progs: utils: split device scanning functions to own file 2019-07-04 02:06:34 +02:00
filesystem-du.c btrfs-progs: fix helpinfo formats, short and options separation 2019-07-03 20:49:04 +02:00
filesystem-usage.c btrfs-progs: fi usage: print ratio of used/total for each chunk type 2019-11-22 19:09:52 +01:00
filesystem-usage.h btrfs-progs: move all cmds-fi*.c to cmds/ 2019-07-03 20:49:03 +02:00
filesystem.c btrfs-progs: utils: split device scanning functions to own file 2019-07-04 02:06:34 +02:00
inspect-dump-super.c btrfs-progs: add support for raid1c3 and raid1c4 2019-11-22 19:09:50 +01:00
inspect-dump-tree.c btrfs-progs: dump-tree: rename to option to --hide-names 2020-03-20 22:05:27 +01:00
inspect-tree-stats.c btrfs-progs: fix helpinfo formats, short and options separation 2019-07-03 20:49:04 +02:00
inspect.c btrfs-progs: inspect: make sure LOGICAL_INO_V2 args are zero-initialized 2020-03-04 19:21:09 +01:00
property.c btrfs-progs: props: update help texts 2019-07-26 17:46:42 +02:00
qgroup.c btrfs-progs: qgroup: allow passing options to qgroup remove 2020-03-20 22:05:25 +01:00
quota.c btrfs-progs: move utils.[ch] to common/ 2019-07-03 20:49:04 +02:00
receive.c btrfs-progs: receive: don't lookup clone root for received subvolume 2020-03-31 18:37:36 +02:00
replace.c btrfs-progs: utils: split device handling functions to own file 2019-07-04 02:06:34 +02:00
rescue-chunk-recover.c btrfs-progs: reform block groups caches structure 2020-03-03 19:58:54 +01:00
rescue-super-recover.c btrfs-progs: move crc32c implementation to crypto/ 2019-11-18 19:20:02 +01:00
rescue.c btrfs-progs: rescue/zero-log: Manually write all supers to handle extent tree error more gracefully 2019-11-22 19:07:21 +01:00
rescue.h btrfs-progs: move cmds-rescue.c to cmds/ 2019-07-03 20:49:02 +02:00
restore.c btrfs-progs: restore: Do proper mirror iteration in copy_one_extent() 2020-03-31 18:37:35 +02:00
scrub.c btrfs-progs: scrub: fix status lines alignment 2019-07-26 17:46:43 +02:00
send.c btrfs-progs: utils: split path related utils to own file 2019-07-04 02:06:31 +02:00
subvolume.c btrfs-progs: subvol delete: add --subvolid argument to deletee by id 2020-03-04 19:21:09 +01:00