mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-11-01 00:48:50 +00:00
eae473581c
The tracing "instances" directory can create sub tracing buffers with mkdir, and remove them with rmdir. As a mkdir will also create all the files and directories that control the sub buffer the inode mutexes need to be released before this is done, to avoid deadlocks. It is better to let the tracing system unlock the inode mutexes before calling the functions that create the files within the new directory (or deletes the files from the one being destroyed). Now that tracing has been converted over to tracefs, the tracefs file system can be modified to accommodate this feature. It still releases the locks, but the filesystem itself can take care of the ugly business and let the user just do what it needs. The tracing system now attaches a descriptor to the directory dentry that can have userspace create or remove sub directories. If this descriptor does not exist for a dentry, then that dentry can not be used to create other directories. This descriptor holds a mkdir and rmdir method that only takes a character string as an argument. The tracefs file system will first make a copy of the dentry name before releasing the locks. Then it will pass the copied name to the methods. It is up to the tracing system that supplied the methods to handle races with duplicate names and such as all the inode mutexes would be released when the functions are called. Cc: Al Viro <viro@zeniv.linux.org.uk> Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
45 lines
1.2 KiB
C
45 lines
1.2 KiB
C
/*
|
|
* tracefs.h - a pseudo file system for activating tracing
|
|
*
|
|
* Based on debugfs by: 2004 Greg Kroah-Hartman <greg@kroah.com>
|
|
*
|
|
* Copyright (C) 2014 Red Hat Inc, author: Steven Rostedt <srostedt@redhat.com>
|
|
*
|
|
* This program is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU General Public License version
|
|
* 2 as published by the Free Software Foundation.
|
|
*
|
|
* tracefs is the file system that is used by the tracing infrastructure.
|
|
*
|
|
*/
|
|
|
|
#ifndef _TRACEFS_H_
|
|
#define _TRACEFS_H_
|
|
|
|
#include <linux/fs.h>
|
|
#include <linux/seq_file.h>
|
|
|
|
#include <linux/types.h>
|
|
|
|
struct file_operations;
|
|
|
|
#ifdef CONFIG_TRACING
|
|
|
|
struct dentry *tracefs_create_file(const char *name, umode_t mode,
|
|
struct dentry *parent, void *data,
|
|
const struct file_operations *fops);
|
|
|
|
struct dentry *tracefs_create_dir(const char *name, struct dentry *parent);
|
|
|
|
void tracefs_remove(struct dentry *dentry);
|
|
void tracefs_remove_recursive(struct dentry *dentry);
|
|
|
|
struct dentry *tracefs_create_instance_dir(const char *name, struct dentry *parent,
|
|
int (*mkdir)(const char *name),
|
|
int (*rmdir)(const char *name));
|
|
|
|
bool tracefs_initialized(void);
|
|
|
|
#endif /* CONFIG_TRACING */
|
|
|
|
#endif
|