diff mbox series

[yocto-patches,pseudo,1/3] Only copy xattrs on a rename if it's cross-filesystem

Message ID 1777071733-25858-2-git-send-email-mark.hatle@kernel.crashing.org
State New
Headers show
Series Add pending patches to master | expand

Commit Message

Mark Hatle April 24, 2026, 11:02 p.m. UTC
From: Daniel Burgener <dburgener@linux.microsoft.com>

On same file-system renames, the path update in the db means that the
xattrs are already present, and copying results in duplicates.  This was
previously masked by the bug fixed in d1db9c219abf92f15303486a409292237f1fc790, since that prevented the
xattr copying.  Now that that bug is fixed, we started observing this
issue in 1.9.3.

AI-Generated: Code fix by Claude Haiku 4.5.  Test code by me.

Signed-off-by: Daniel Burgener <dburgener@linux.microsoft.com>
Signed-off-by: Mark Hatle <mark.hatle@amd.com>
Signed-off-by: Mark Hatle <mark.hatle@kernel.crashing.org>
---
 pseudo_db.c        |  4 +++-
 test/test-xattr.sh | 12 ++++++++++++
 2 files changed, 15 insertions(+), 1 deletion(-)
diff mbox series

Patch

diff --git a/pseudo_db.c b/pseudo_db.c
index 9713e0c..6a33f20 100644
--- a/pseudo_db.c
+++ b/pseudo_db.c
@@ -2196,7 +2196,9 @@  pdb_update_inode(pseudo_msg_t *msg) {
 	found_existing = !pdb_find_file_path(oldmsg);
 	if (found_existing) {
 		/* we have an existing file entry */
-		pdb_copy_xattrs(oldmsg, msg);
+		if (oldmsg->dev != msg->dev || oldmsg->ino != msg->ino) {
+			pdb_copy_xattrs(oldmsg, msg);
+		}
 	}
 	sqlite3_bind_int(update, 1, msg->dev);
 	sqlite3_bind_int64(update, 2, signed_ino(msg->ino));
diff --git a/test/test-xattr.sh b/test/test-xattr.sh
index 6ac6b3c..89fbd35 100755
--- a/test/test-xattr.sh
+++ b/test/test-xattr.sh
@@ -65,6 +65,18 @@  then
     exit 1
 fi
 
+mv f1 f2
+attrs=`getfattr -d -m - f2 | grep -v '^#'`
+expected=$'security.dummy="test_f2"\nuser.dummy="test_f1"'
+if [ "$attrs" != "$expected" ]
+then
+	#echo "Fail, unpexected getfattr result '$attrs'"
+	rm -f f1
+	rm -f f2
+	exit 1
+fi
+
 #echo "Passed."
 rm -f f1
+rm -f f2
 exit 0