Whamcloud - gitweb
LU-12461 contrib: Add epython scripts for crash dump analysis
[fs/lustre-release.git] / contrib / debug_tools / epython_scripts / debug_flags.py
diff --git a/contrib/debug_tools/epython_scripts/debug_flags.py b/contrib/debug_tools/epython_scripts/debug_flags.py
new file mode 100644 (file)
index 0000000..ddfb376
--- /dev/null
@@ -0,0 +1,72 @@
+#!/usr/bin/env python
+
+"""
+Utility to print Lustre libcfs_debug flags
+Copyright (c) 2019 Cray Inc. All Rights Reserved.
+"""
+
+from pykdump.API import *
+from crashlib.input import toint
+import argparse
+
+description_short = "Prints Lustre libcfs_debug flags as strings"
+
+debug_flags_tbl = {
+    0x00000001: 'trace',      #define D_TRACE
+    0x00000002: 'inode',      #define D_INODE
+    0x00000004: 'super',      #define D_SUPER
+    0x00000008: 'ext2',       #define D_EXT2
+    0x00000010: 'malloc',     #define D_MALLOC
+    0x00000020: 'cache',      #define D_CACHE
+    0x00000040: 'info',       #define D_INFO
+    0x00000080: 'ioctl',      #define D_IOCTL
+    0x00000100: 'neterror',   #define D_NETERROR
+    0x00000200: 'net',        #define D_NET
+    0x00000400: 'warning',    #define D_WARNING
+    0x00000800: 'buffs',      #define D_BUFFS
+    0x00001000: 'other',      #define D_OTHER
+    0x00002000: 'dentry',     #define D_DENTRY
+    0x00004000: 'nettrace',   #define D_NETTRACE
+    0x00008000: 'page',       #define D_PAGE
+    0x00010000: 'dlmtrace',   #define D_DLMTRACE
+    0x00020000: 'error',      #define D_ERROR
+    0x00040000: 'emerg',      #define D_EMERG
+    0x00080000: 'ha',         #define D_HA
+    0x00100000: 'rpctrace',   #define D_RPCTRACE
+    0x00200000: 'vfstrace',   #define D_VFSTRACE
+    0x00400000: 'reada',      #define D_READA
+    0x00800000: 'mmap',       #define D_MMAP
+    0x01000000: 'config',     #define D_CONFIG
+    0x02000000: 'console',    #define D_CONSOLE
+    0x04000000: 'quota',      #define D_QUOTA
+    0x08000000: 'sec',        #define D_SEC
+    0x10000000: 'lfsck',      #define D_LFSCK
+    0x20000000: 'hsm',        #define D_HSM
+    0x40000000: 'snapshot',   #define D_SNAPSHOT
+    0x80000000: 'layout'      #define D_LAYOUT
+}
+
+def print_flags(flag_tbl, mask):
+    flags = ""
+    tmp = mask
+    for key, value in flag_tbl.iteritems():
+            if key & mask:
+               flags = flags + value + " "
+               tmp &= ~key
+    print "mask: 0x%x = %s" % (mask, flags)
+    if tmp != 0:
+        print "unknown bits set in mask: 0x%x" % tmp
+
+def dump_debug_flags(bitmask):
+    print bitmask
+    if not bitmask:
+        bitmask = readSymbol('libcfs_debug')
+    print_flags(debug_flags_tbl, bitmask)
+
+if __name__ == "__main__":
+    description = "Prints libcfs_debug flags as strings"
+    parser = argparse.ArgumentParser(description=description)
+    parser.add_argument("bitmask", nargs="?", type=toint, default=[],
+        help="debug bit mask to be translated; default is current libcfs_debug value")
+    args = parser.parse_args()
+    dump_debug_flags(args.bitmask)