• Ye Bin's avatar
    tracing/probes: support '%pd' type for print struct dentry's name · d9b15224
    Ye Bin authored
    During fault locating, the file name needs to be printed based on the
    dentry  address. The offset needs to be calculated each time, which
    is troublesome. Similar to printk, kprobe support print type '%pd' for
    print dentry's name. For example "name=$arg1:%pd" casts the `$arg1`
    as (struct dentry *), dereferences the "d_name.name" field and stores
    it to "name" argument as a kernel string.
    Here is an example:
    [tracing]# echo 'p:testprobe dput name=$arg1:%pd' > kprobe_events
    [tracing]# echo 1 > events/kprobes/testprobe/enable
    [tracing]# grep -q "1" events/kprobes/testprobe/enable
    [tracing]# echo 0 > events/kprobes/testprobe/enable
    [tracing]# cat trace | grep "enable"
    	    bash-14844   [002] ..... 16912.889543: testprobe: (dput+0x4/0x30) name="enable"
                grep-15389   [003] ..... 16922.834182: testprobe: (dput+0x4/0x30) name="enable"
                grep-15389   [003] ..... 16922.836103: testprobe: (dput+0x4/0x30) name="enable"
                bash-14844   [001] ..... 16931.820909: testprobe: (dput+0x4/0x30) name="enable"
    
    Note that this expects the given argument (e.g. $arg1) is an address of struct
    dentry. User must ensure it.
    
    Link: https://lore.kernel.org/all/20240322064308.284457-2-yebin10@huawei.com/Signed-off-by: default avatarYe Bin <yebin10@huawei.com>
    Acked-by: default avatarMasami Hiramatsu (Google) <mhiramat@kernel.org>
    Signed-off-by: default avatarMasami Hiramatsu (Google) <mhiramat@kernel.org>
    d9b15224
trace_fprobe.c 30.6 KB