Hi Jackie,
Thank you for the patch,
I think this supercedes the other attempts to fix this issue because this fix mirrors the actual change which occured in the /proc/mounts output (fs/proc_namespace.c::show_sb_opts), which is the equivalent usage of the code here.
I've now managed to resurrect my GDB testing environment, and I've tested that this patch works - and the lx-mounts command which this specifically affects is functioning.
On 05/03/2019 01:53, Jackie Liu wrote:
Since commit 1751e8a6cb93 ("Rename superblock flags (MS_xyz -> SB_xyz)"), script/gdb need replace MS_xyz to SB_xyz.
Fix follow problem: root@localhost:/data# gdb -q vmlinux Reading symbols from vmlinux...done. Traceback (most recent call last): File "/data/vmlinux-gdb.py", line 32, in <module> import linux.proc File "/data/scripts/gdb/linux/proc.py", line 15, in <module> from linux import constants File "/data/scripts/gdb/linux/constants.py", line 2, in <module> LX_SB_RDONLY = MS_RDONLY NameError: name 'MS_RDONLY' is not defined (gdb)
There should be a Fixes tag here, The point of breakage is:
Fixes: e262e32d6bde "vfs: Suppress MS_* flag defs within the kernel unless explicitly enabled"
I'd like to update the commit message to the following:
Since commit 1751e8a6cb93 ("Rename superblock flags (MS_xyz -> SB_xyz)"), scripts/gdb should be updated to replace MS_xyz with SB_xyz.
This change didn't directly affect the running operation of scripts/gdb until commit e262e32d6bde "vfs: Suppress MS_* flag defs within the kernel unless explicitly enabled" removed the definitions used by constants.py.
Update constants.py.in to utilise the new internal flags, matching the implementation at fs/proc_namespace.c::show_sb_opts.
I will repost a v3 with that change, along with my SoB, and retaining your authorship - and ask Andrew to collect the patch.
--
Regards
Kieran
Tested-by: Nick Desaulniers ndesaulniers@google.com Signed-off-by: Jackie Liu liuyun01@kylinos.cn
scripts/gdb/linux/constants.py.in | 12 ++++++------ scripts/gdb/linux/proc.py | 12 ++++++------ 2 files changed, 12 insertions(+), 12 deletions(-)
diff --git a/scripts/gdb/linux/constants.py.in b/scripts/gdb/linux/constants.py.in index 7aad82406422..d3319a80788a 100644 --- a/scripts/gdb/linux/constants.py.in +++ b/scripts/gdb/linux/constants.py.in @@ -37,12 +37,12 @@ import gdb /* linux/fs.h */ -LX_VALUE(MS_RDONLY) -LX_VALUE(MS_SYNCHRONOUS) -LX_VALUE(MS_MANDLOCK) -LX_VALUE(MS_DIRSYNC) -LX_VALUE(MS_NOATIME) -LX_VALUE(MS_NODIRATIME) +LX_VALUE(SB_RDONLY) +LX_VALUE(SB_SYNCHRONOUS) +LX_VALUE(SB_MANDLOCK) +LX_VALUE(SB_DIRSYNC) +LX_VALUE(SB_NOATIME) +LX_VALUE(SB_NODIRATIME) /* linux/mount.h */ LX_VALUE(MNT_NOSUID) diff --git a/scripts/gdb/linux/proc.py b/scripts/gdb/linux/proc.py index 0aebd7565b03..2f01a958eb22 100644 --- a/scripts/gdb/linux/proc.py +++ b/scripts/gdb/linux/proc.py @@ -114,11 +114,11 @@ def info_opts(lst, opt): return opts -FS_INFO = {constants.LX_MS_SYNCHRONOUS: ",sync",
constants.LX_MS_MANDLOCK: ",mand",
constants.LX_MS_DIRSYNC: ",dirsync",
constants.LX_MS_NOATIME: ",noatime",
constants.LX_MS_NODIRATIME: ",nodiratime"}
+FS_INFO = {constants.LX_SB_SYNCHRONOUS: ",sync",
constants.LX_SB_MANDLOCK: ",mand",
constants.LX_SB_DIRSYNC: ",dirsync",
constants.LX_SB_NOATIME: ",noatime",
constants.LX_SB_NODIRATIME: ",nodiratime"}
MNT_INFO = {constants.LX_MNT_NOSUID: ",nosuid", constants.LX_MNT_NODEV: ",nodev", @@ -184,7 +184,7 @@ values of that process namespace""" fstype = superblock['s_type']['name'].string() s_flags = int(superblock['s_flags']) m_flags = int(vfs['mnt']['mnt_flags'])
rd = "ro" if (s_flags & constants.LX_MS_RDONLY) else "rw"
rd = "ro" if (s_flags & constants.LX_SB_RDONLY) else "rw"
gdb.write( "{} {} {} {}{}{} 0 0\n"