Whamcloud - gitweb
LU-12461 contrib: Add epython scripts for crash dump analysis
[fs/lustre-release.git] / contrib / debug_tools / epython_scripts / debug_flags.py
1 #!/usr/bin/env python
2
3 """
4 Utility to print Lustre libcfs_debug flags
5 Copyright (c) 2019 Cray Inc. All Rights Reserved.
6 """
7
8 from pykdump.API import *
9 from crashlib.input import toint
10 import argparse
11
12 description_short = "Prints Lustre libcfs_debug flags as strings"
13
14 debug_flags_tbl = {
15     0x00000001: 'trace',      #define D_TRACE
16     0x00000002: 'inode',      #define D_INODE
17     0x00000004: 'super',      #define D_SUPER
18     0x00000008: 'ext2',       #define D_EXT2
19     0x00000010: 'malloc',     #define D_MALLOC
20     0x00000020: 'cache',      #define D_CACHE
21     0x00000040: 'info',       #define D_INFO
22     0x00000080: 'ioctl',      #define D_IOCTL
23     0x00000100: 'neterror',   #define D_NETERROR
24     0x00000200: 'net',        #define D_NET
25     0x00000400: 'warning',    #define D_WARNING
26     0x00000800: 'buffs',      #define D_BUFFS
27     0x00001000: 'other',      #define D_OTHER
28     0x00002000: 'dentry',     #define D_DENTRY
29     0x00004000: 'nettrace',   #define D_NETTRACE
30     0x00008000: 'page',       #define D_PAGE
31     0x00010000: 'dlmtrace',   #define D_DLMTRACE
32     0x00020000: 'error',      #define D_ERROR
33     0x00040000: 'emerg',      #define D_EMERG
34     0x00080000: 'ha',         #define D_HA
35     0x00100000: 'rpctrace',   #define D_RPCTRACE
36     0x00200000: 'vfstrace',   #define D_VFSTRACE
37     0x00400000: 'reada',      #define D_READA
38     0x00800000: 'mmap',       #define D_MMAP
39     0x01000000: 'config',     #define D_CONFIG
40     0x02000000: 'console',    #define D_CONSOLE
41     0x04000000: 'quota',      #define D_QUOTA
42     0x08000000: 'sec',        #define D_SEC
43     0x10000000: 'lfsck',      #define D_LFSCK
44     0x20000000: 'hsm',        #define D_HSM
45     0x40000000: 'snapshot',   #define D_SNAPSHOT
46     0x80000000: 'layout'      #define D_LAYOUT
47 }
48
49 def print_flags(flag_tbl, mask):
50     flags = ""
51     tmp = mask
52     for key, value in flag_tbl.iteritems():
53             if key & mask:
54                flags = flags + value + " "
55                tmp &= ~key
56     print "mask: 0x%x = %s" % (mask, flags)
57     if tmp != 0:
58         print "unknown bits set in mask: 0x%x" % tmp
59
60 def dump_debug_flags(bitmask):
61     print bitmask
62     if not bitmask:
63         bitmask = readSymbol('libcfs_debug')
64     print_flags(debug_flags_tbl, bitmask)
65
66 if __name__ == "__main__":
67     description = "Prints libcfs_debug flags as strings"
68     parser = argparse.ArgumentParser(description=description)
69     parser.add_argument("bitmask", nargs="?", type=toint, default=[],
70         help="debug bit mask to be translated; default is current libcfs_debug value")
71     args = parser.parse_args()
72     dump_debug_flags(args.bitmask)