APPLIED: [T][SRU][PATCH 0/1] Btrfs: send, don't send rmdir for same target multiple times

Khaled Elmously khalid.elmously at canonical.com
Thu Jan 10 02:23:56 UTC 2019


On 2019-01-03 19:07:26 , Po-Hsu Lin wrote:
> BugLink: https://bugs.launchpad.net/bugs/1809868
> 
> == Justification ==
> When doing an incremental send on a Btrfs filesystem, if we delete a directory
> that has N > 1 hardlinks for the same file and that file has the highest inode
> number inside the directory contents, an incremental send would send N times
> rmdir operation against the directory. This made the btrfs receive command fail
> on the second rmdir instruction, as the target directory didn't exist anymore.
> 
> This issue can be triggered with 29d6d30f5c8aa58b04f40a58442df3bcaae5a1d5
> test in ubuntu_btrfs_kernel_fixes test suite.
> 
> 
> The test will fail with:
>   "ERROR: rmdir o259-6-0 failed. No such file or directory" with Trusty kernel.
> 
> Performing full device TRIM (1.00GiB) ...
> Turning ON incompat feature 'extref': increased hardlink limit per file to 65536
> 
> WARNING! - Btrfs v3.12 IS EXPERIMENTAL
> WARNING! - see http://btrfs.wiki.kernel.org before using
> 
> fs created label (null) on /dev/loop0
>  nodesize 16384 leafsize 16384 sectorsize 4096 size 1.00GiB
> Btrfs v3.12
> Create a readonly snapshot of '/tmp/mnt-29d6d30f5c8aa58b04f40a58442df3bcaae5a1d5' in '/tmp/mnt-29d6d30f5c8aa58b04f40a58442df3bcaae5a1d5/snap1'
> At subvol /tmp/mnt-29d6d30f5c8aa58b04f40a58442df3bcaae5a1d5/snap1
> Create a readonly snapshot of '/tmp/mnt-29d6d30f5c8aa58b04f40a58442df3bcaae5a1d5' in '/tmp/mnt-29d6d30f5c8aa58b04f40a58442df3bcaae5a1d5/snap2'
> At subvol /tmp/mnt-29d6d30f5c8aa58b04f40a58442df3bcaae5a1d5/snap2
> Performing full device TRIM (1.00GiB) ...
> Turning ON incompat feature 'extref': increased hardlink limit per file to 65536
> 
> WARNING! - Btrfs v3.12 IS EXPERIMENTAL
> WARNING! - see http://btrfs.wiki.kernel.org before using
> 
> fs created label (null) on /dev/loop0
>  nodesize 16384 leafsize 16384 sectorsize 4096 size 1.00GiB
> Btrfs v3.12
> At subvol snap1
> At snapshot snap2
> ERROR: rmdir o259-6-0 failed. No such file or directory
> incremental receive failed
> 
> 
> == Fix ==
> 29d6d30f5 (Btrfs: send, don't send rmdir for same target multiple times)
> This patch needs to be backported for a variable difference in the
> process_recorded_refs function.
> 
> In the Trusty tree:
> static int process_recorded_refs(struct send_ctx *sctx)
> 
> In the patch:
> static int process_recorded_refs(struct send_ctx *sctx, int *pending_move)
> 
> As the new *pending_move is unrelated here, we can just backport the patch with
> the same logic in this function.
> 
> A test kernel could be found here:
> http://people.canonical.com/~phlin/kernel/lp-1809868-btrfs-2nd-rmdir/
> The 29d6d30f5c8aa58b04f40a58442df3bcaae5a1d5 test will pass with this kernel.
> 
> 
> == Regression potential ==
> Low,
> this patch just adds an extra check to skip unnecessary rmdir operations.
> 
> 
> Filipe Manana (1):
>   Btrfs: send, don't send rmdir for same target multiple times
> 
>  fs/btrfs/send.c | 5 ++++-
>  1 file changed, 4 insertions(+), 1 deletion(-)
> 
> -- 
> 2.7.4
> 
> 
> -- 
> kernel-team mailing list
> kernel-team at lists.ubuntu.com
> https://lists.ubuntu.com/mailman/listinfo/kernel-team



More information about the kernel-team mailing list