smb server打印函数是ksmbd_debug()
,相关代码如下:
ksmbd_debug// 拼接成 KSMBD_DEBUG_ALL 等宏定义
if (ksmbd_debug_types & KSMBD_DEBUG_##type)
// 使用宏拼接
(debug)
CLASS_ATTR_RWstruct class_attribute class_attr_debug = __ATTR_RW(debug)
(debug, 0644, debug_show, debug_store)
__ATTR.attr = {.name = __stringify(debug),
(x)
__stringify_1#debug ==> /sys/class/ksmbd-control/debug文件
.show = debug_show,
.store = debug_store,
// 还是宏拼接
(ksmbd_control_class)
ATTRIBUTE_GROUPS
ksmbd_control_class_group.attrs = ksmbd_control_class_attrs
(ksmbd_control_class)
__ATTRIBUTE_GROUPS[] // 引用这个变量的是ksmbd_control_class
ksmbd_control_class_groups&ksmbd_control_class_group,
static struct class ksmbd_control_class = {
.name = "ksmbd-control", ==> /sys/class/ksmbd-control/目录
.class_groups = ksmbd_control_class_groups,
};
通过读写/sys/class/ksmbd-control/debug
文件控制,但我们一般不直接操作这个文件,而是用以下命令控制打印的开关:
ksmbd.control --help # 查看帮助
# COMPONENT的值有: `all', `smb', `auth', `vfs', `oplock', `ipc', `conn', or `rdma'
ksmbd.control --debug=vfs
ksmbd.control --debug= # 不加COMPONENT可以查看当前的状态
smb
client打印函数有cifs_dbg()
、cifs_server_dbg()
、cifs_tcon_dbg()
、cifs_info()
,要打开配置CONFIG_CIFS_DEBUG
才有效,打开CONFIG_CIFS_DEBUG2
和CONFIG_CIFS_DEBUG_DUMP_KEYS
能打印更多信息,以cifs_dbg()
为例代码如下:
cifs_dbg(once, ...)
cifs_dbg_func// 还有 pr_err_once
pr_debug_once // 只打印一次
printk_once (ratelimited, ...)
cifs_dbg_func// 还有 pr_err_ratelimited
pr_debug_ratelimited // 打开了配置 CONFIG_DYNAMIC_DEBUG __dynamic_pr_debug
动态打印相关的内容请查看《内核调试方法》。
请查看《nfs调试方法》。