On Thu, Jun 18, 2020 at 09:19:51PM -0400, Sasha Levin wrote: > On Thu, Jun 18, 2020 at 04:45:23PM +0200, gregkh@xxxxxxxxxxxxxxxxxxx wrote: > > > > The patch below does not apply to the 4.4-stable tree. > > If someone wants it applied there, or to any other stable or longterm > > tree, then please email the backport, including the original git commit > > id to <stable@xxxxxxxxxxxxxxx>. > > > > thanks, > > > > greg k-h > > > > ------------------ original commit in Linus's tree ------------------ > > > > > From 89efda52e6b6930f80f5adda9c3c9edfb1397191 Mon Sep 17 00:00:00 2001 > > From: Marcos Paulo de Souza <mpdesouza@xxxxxxxx> > > Date: Sun, 10 May 2020 23:15:07 -0300 > > Subject: [PATCH] btrfs: send: emit file capabilities after chown > > > > Whenever a chown is executed, all capabilities of the file being touched > > are lost. When doing incremental send with a file with capabilities, > > there is a situation where the capability can be lost on the receiving > > side. The sequence of actions bellow shows the problem: > > > > $ mount /dev/sda fs1 > > $ mount /dev/sdb fs2 > > > > $ touch fs1/foo.bar > > $ setcap cap_sys_nice+ep fs1/foo.bar > > $ btrfs subvolume snapshot -r fs1 fs1/snap_init > > $ btrfs send fs1/snap_init | btrfs receive fs2 > > > > $ chgrp adm fs1/foo.bar > > $ setcap cap_sys_nice+ep fs1/foo.bar > > > > $ btrfs subvolume snapshot -r fs1 fs1/snap_complete > > $ btrfs subvolume snapshot -r fs1 fs1/snap_incremental > > > > $ btrfs send fs1/snap_complete | btrfs receive fs2 > > $ btrfs send -p fs1/snap_init fs1/snap_incremental | btrfs receive fs2 > > > > At this point, only a chown was emitted by "btrfs send" since only the > > group was changed. This makes the cap_sys_nice capability to be dropped > > from fs2/snap_incremental/foo.bar > > > > To fix that, only emit capabilities after chown is emitted. The current > > code first checks for xattrs that are new/changed, emits them, and later > > emit the chown. Now, __process_new_xattr skips capabilities, letting > > only finish_inode_if_needed to emit them, if they exist, for the inode > > being processed. > > > > This behavior was being worked around in "btrfs receive" side by caching > > the capability and only applying it after chown. Now, xattrs are only > > emmited _after_ chown, making that workaround not needed anymore. > > > > Link: https://github.com/kdave/btrfs-progs/issues/202 > > CC: stable@xxxxxxxxxxxxxxx # 4.4+ > > Suggested-by: Filipe Manana <fdmanana@xxxxxxxx> > > Reviewed-by: Filipe Manana <fdmanana@xxxxxxxx> > > Signed-off-by: Marcos Paulo de Souza <mpdesouza@xxxxxxxx> > > Signed-off-by: David Sterba <dsterba@xxxxxxxx> > > I took 1ec9a1ae1e30 ("Btrfs: fix unreplayable log after snapshot delete > + parent dir fsync") to work around the conflict. Great, thanks for this fixup and the others you merged. greg k-h