]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
9p: fix cache/debug options printing in v9fs_show_options
authorEric Sandeen <sandeen@redhat.com>
Tue, 2 Dec 2025 22:30:53 +0000 (16:30 -0600)
committerDominique Martinet <asmadeus@codewreck.org>
Fri, 5 Dec 2025 12:53:16 +0000 (12:53 +0000)
commit 4eb3117888a92 changed the cache= option to accept either string
shortcuts or bitfield values. It also changed /proc/mounts to emit the
option as the hexadecimal numeric value rather than the shortcut string.

However, by printing "cache=%x" without the leading 0x, shortcuts such
as "cache=loose" will emit "cache=f" and 'f' is not a string that is
parseable by kstrtoint(), so remounting may fail if a remount with
"cache=f" is attempted.

debug=%x has had the same problem since options have been displayed in
c4fac9100456 ("9p: Implement show_options")

Fix these by adding the 0x prefix to the hexadecimal value shown in
/proc/mounts.

Fixes: 4eb3117888a92 ("fs/9p: Rework cache modes and add new options to Documentation")
Signed-off-by: Eric Sandeen <sandeen@redhat.com>
Message-ID: <54b93378-dcf1-4b04-922d-c8b4393da299@redhat.com>
[Dominique: use %#x at Al Viro's suggestion, also handle debug]
Tested-by: Remi Pommarel <repk@triplefau.lt>
Signed-off-by: Dominique Martinet <asmadeus@codewreck.org>
fs/9p/v9fs.c

index 05fc2ba3c5d42ee3b0504759d866c199db2364e0..2f5c5f3123b73d502c838c52a13dc58fd5a97595 100644 (file)
@@ -132,7 +132,7 @@ int v9fs_show_options(struct seq_file *m, struct dentry *root)
        struct v9fs_session_info *v9ses = root->d_sb->s_fs_info;
 
        if (v9ses->debug)
-               seq_printf(m, ",debug=%x", v9ses->debug);
+               seq_printf(m, ",debug=%#x", v9ses->debug);
        if (!uid_eq(v9ses->dfltuid, V9FS_DEFUID))
                seq_printf(m, ",dfltuid=%u",
                           from_kuid_munged(&init_user_ns, v9ses->dfltuid));
@@ -148,7 +148,7 @@ int v9fs_show_options(struct seq_file *m, struct dentry *root)
        if (v9ses->nodev)
                seq_puts(m, ",nodevmap");
        if (v9ses->cache)
-               seq_printf(m, ",cache=%x", v9ses->cache);
+               seq_printf(m, ",cache=%#x", v9ses->cache);
 #ifdef CONFIG_9P_FSCACHE
        if (v9ses->cachetag && (v9ses->cache & CACHE_FSCACHE))
                seq_printf(m, ",cachetag=%s", v9ses->cachetag);