Messages in this thread | | | Date | Wed, 23 Jan 2013 15:51:47 -0800 | From | Andrew Morton <> | Subject | Re: [tracepoint] cargo-culting considered harmful... |
| |
On Wed, 23 Jan 2013 22:55:24 +0000 Al Viro <viro@ZenIV.linux.org.uk> wrote:
> In samples/tracepoints/tracepoint-probe-sample.c: > /* > * Here the caller only guarantees locking for struct file and struct inode. > * Locking must therefore be done in the probe to use the dentry. > */ > static void probe_subsys_event(void *ignore, > struct inode *inode, struct file *file) > { > path_get(&file->f_path); > dget(file->f_path.dentry); > printk(KERN_INFO "Event is encountered with filename %s\n", > file->f_path.dentry->d_name.name); > dput(file->f_path.dentry); > path_put(&file->f_path); > } > > note that > * file->f_path is already pinned down by open(), path_get() does not > provide anything extra. > * file->f_path.dentry is already pinned by open() *and* path_get() > just above that dget(). > * ->d_name.name *IS* *NOT* *PROTECTED* by pinning dentry down, > whether it's done once or thrice.
I guess the first two are obvious (or at least, expected). But the third isn't.
Where should a kernel developer go to learn these things? include/linux/dcache.h doesn't mention d_name locking rules, nor does Documentation/filesystems/vfs.txt.
| |