问题描述
我想从的。
我已经修改的功能如下:
结构文件*文件= iocb-> ki_filp;
结构address_space *映射文件 - => f_mapping;
结构的inode的inode * = mapping->主机;
ssize_t供书面= 0;
ssize_t供走错了路。
ssize_t供状态;/ *我们可以写回这个队列页面回收* /
电流 - > backing_dev_info = inode_to_bdi(i节点);
ERR = file_remove_privs(文件);
如果(ERR)
转到出来;ERR = file_update_time(文件);
如果(ERR)
转到出来;/ *如果这个()是我已经添加* /
如果(io_tracing_on){
ssize_t供write_size = iov_length(从 - > IOV,从 - > nr_segs);
printk的(KERN_INFO写入大小=%祖,PID =%d个,索引节点=%lu个\\ N,write_size,task_pid_nr(电流),inode-> i_ino);
}如果(iocb-> ki_flags&安培; IOCB_DIRECT){
参数loff_t POS,endbyte;
...
io_tracing_on是,我通过/ proc入口(由我的模块,该模块内置在内核中创建)设置一个变量。当我翻转上的开关和运行DD(通过 DD如果=的/ dev / urandom的= / tmp目录/胡言乱语BS = 1M计算= 1
),我得到一个连续的数据流输出的的/ var / log / syslog的
,即:
6月27日15时00分41秒马尔卡内核:[463.424155]写大小= 168,PID = 715,索引节点= 7864653
6月27日15时00分41秒马尔卡内核:[463.428064]写大小= 168,PID = 715,索引节点= 7864354
6月27日15时00分41秒马尔卡内核:[463.428126]写大小= 168,PID = 715,索引节点= 7864653
6月27日15时00分41秒马尔卡内核:[463.432061]写大小= 168,PID = 715,索引节点= 7864354
6月27日15时00分41秒马尔卡内核:[463.432121]写大小= 168,PID = 715,索引节点= 7864653
6月27日15时00分41秒马尔卡内核:[463.436075]写大小= 168,PID = 715,索引节点= 7864354
6月27日15时00分41秒马尔卡内核:[463.436133]写大小= 168,PID = 715,索引节点= 7864653
6月27日15时00分41秒马尔卡内核:[463.440060]写大小= 168,PID = 715,索引节点= 7864354
6月27日15时00分41秒马尔卡内核:[463.440121]写大小= 168,PID = 715,索引节点= 7864653
等等
然而,当我运行ftrace(使用功能示踪剂),我从来没有看到 __ generic_file_write_iter()
被调用。那么,为什么我的的printk()
语句不断得到所谓无 __ generic_file_write_iter()
显示在ftrace输出高达
该内核版本是4.5.5。
更新
previously,我没能到PID任何有效的过程联系起来。改变我的code打印PID和TGID之后,我能够与进程相关联TGID。看来,系统日志呼唤我的的printk()
每次写入,导致产量的连续流的时间。然而,ftrace仍然没有显示 __ generic_file_write_iter()
被称为近足够的时间,以反映倍量我的的printk()
被调用。所以,我的问题是 - 如果ftrace正在工作,我希望,我会想象那里是一个调用 __ generic_file_write_iter()
在ftrace每 printk的()
我在syslog看到的。
Most probably, __generic_file_write_iter
is not listed in /sys/kernel/debug/tracing/available_filter_functions
(the functions that ftrace can trace, see ftrace - Function Tracer or Secrets of the Ftrace function tracer).
这篇关于为什么一个的printk()连续系统日志内打印时,它驻留在(每ftrace)不会被调用内核函数?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!