aboutsummaryrefslogtreecommitdiff
path: root/include/linux
diff options
context:
space:
mode:
authorChristian Brauner <[email protected]>2024-10-21 14:30:29 +0200
committerChristian Brauner <[email protected]>2024-10-21 14:30:29 +0200
commit35100ae2dc33fc4b20c3648ed375a81e1f4b6e3a (patch)
treeb0946cf38dee82b83d5b0337bbc163d6302ea113 /include/linux
parent42f7652d3eb527d03665b09edac47f85fb600924 (diff)
parent14c2d97265ea5989000c428dbb7321cbd4a85f9b (diff)
Merge patch series "fs/super.c: introduce get_tree_bdev_flags()"
Allison Karlitskaya <[email protected]> says: In context of my work on composefs/bootc I've been testing the new support for directly mounting files with erofs (ie: without a loopback device) and it's working well. Thanks for adding this feature --- it's a huge quality of life improvement for us. I've observed a strange behaviour, though: when mounting a file as an erofs, if you read() the filesystem context fd, you always get the following error message reported: Can't lookup blockdev. That's caused by the code in erofs_fc_get_tree() trying to call get_tree_bdev() and recovering from the error in case it was ENOTBLK and CONFIG_EROFS_FS_BACKED_BY_FILE. Unfortunately, get_tree_bdev() logs the error directly on the fs_context, so you get the error message even on successful mounts. It looks something like this at the syscall level: fsopen("erofs", FSOPEN_CLOEXEC) = 3 fsconfig(3, FSCONFIG_SET_FLAG, "ro", NULL, 0) = 0 fsconfig(3, FSCONFIG_SET_STRING, "source", "/home/lis/src/mountcfs/cfs", 0) = 0 fsconfig(3, FSCONFIG_CMD_CREATE, NULL, NULL, 0) = 0 fsmount(3, FSMOUNT_CLOEXEC, 0) = 5 move_mount(5, "", AT_FDCWD, "/tmp/composefs.upper.KuT5aV", MOVE_MOUNT_F_EMPTY_PATH) = 0 read(3, "e /home/lis/src/mountcfs/cfs: Can't lookup blockdev\n", 1024) = 52 This is kernel 6.12.0-0.rc0.20240926git11a299a7933e.13.fc42.x86_64 from Fedora Rawhide. It's a pretty minor issue, but it sent me on a wild goose chase for an hour or two, so probably it should get fixed before the final release. Gao Xiang <[email protected]>: Fix this by providing a get_tree_bdev_flags() helper which can be used to silence such warnings. * patches from https://lore.kernel.org/r/[email protected]: erofs: use get_tree_bdev_flags() to avoid misleading messages fs/super.c: introduce get_tree_bdev_flags() Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Christian Brauner <[email protected]>
Diffstat (limited to 'include/linux')
-rw-r--r--include/linux/fs_context.h6
1 files changed, 6 insertions, 0 deletions
diff --git a/include/linux/fs_context.h b/include/linux/fs_context.h
index c13e99cbbf81..4b4bfef6f053 100644
--- a/include/linux/fs_context.h
+++ b/include/linux/fs_context.h
@@ -160,6 +160,12 @@ extern int get_tree_keyed(struct fs_context *fc,
int setup_bdev_super(struct super_block *sb, int sb_flags,
struct fs_context *fc);
+
+#define GET_TREE_BDEV_QUIET_LOOKUP 0x0001
+int get_tree_bdev_flags(struct fs_context *fc,
+ int (*fill_super)(struct super_block *sb,
+ struct fs_context *fc), unsigned int flags);
+
extern int get_tree_bdev(struct fs_context *fc,
int (*fill_super)(struct super_block *sb,
struct fs_context *fc));