#!/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)