UPSTREAM: ANDROID: fs/fuse: Backing move returns EXDEV if TO not backed

In a move operation, if the FROM file has a backing inode associated and
is handled in backing, it might happen that the TO file does not have a
backing path associated (yet), maybe because the FUSE daemon didn't have
the chance to traverse it.
Thus this special case would mistakenly trigger EBADF, while EXDEV is
more appropriate.

Bug: 202785178
Test: mv /storage/emulated/0/Android/data/<pkg>/file /sdcard/DCIM
Signed-off-by: Alessio Balsini <balsini@google.com>
Change-Id: I513c0e17c128ed9181a6b96fbf9f0b950e78be77
This commit is contained in:
Alessio Balsini 2022-01-17 15:09:46 +00:00 • committed by Alexander Martinz
commit 7009f91924
No known key found for this signature in database
GPG key ID: CF15BDD9A321A9B2

View file

@ -1272,7 +1272,13 @@ static int fuse_rename_backing_common(
return -EBADF;
get_fuse_backing_path(newent, &new_backing_path);
if (!new_backing_path.dentry) {
err = -EBADF;
/*
* TODO A file being moved from a backing path to another
* backing path which is not yet instrumented with FUSE-BPF.
* This may be slow and should be substituted with something
* more clever.
*/
err = -EXDEV;
goto put_old_path;
}
if (new_backing_path.mnt != old_backing_path.mnt) {