summaryrefslogtreecommitdiffstats
path: root/fs/proc
diff options
context:
space:
mode:
authorDavid Howells <dhowells@redhat.com>2013-04-12 15:06:01 +0200
committerAl Viro <viro@zeniv.linux.org.uk>2013-05-01 23:29:42 +0200
commit4a520d2769beb736ba2bd084b8293ce148a1a7ae (patch)
tree023a339c1f2ecf7bd1b051a725f4c720f1908c0f /fs/proc
parentairo: Use remove_proc_subtree() (diff)
downloadlinux-4a520d2769beb736ba2bd084b8293ce148a1a7ae.tar.xz
linux-4a520d2769beb736ba2bd084b8293ce148a1a7ae.zip
proc: Supply an accessor for getting the data from a PDE's parent
Supply an accessor function for getting the private data from the parent proc_dir_entry struct of the proc_dir_entry struct associated with an inode. ReiserFS, for instance, stores the super_block pointer in the proc directory it makes for that super_block, and a pointer to the respective seq_file show function in each of the proc files in that directory. This allows a reduction in the number of file_operations structs, open functions and seq_operations structs required. The problem otherwise is that each show function requires two pieces of data but only has storage for one per PDE (and this has no release function). Signed-off-by: David Howells <dhowells@redhat.com> Acked-by: Mauro Carvalho Chehab <mchehab@redhat.com> Acked-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> cc: Jerry Chuang <jerry-chuang@realtek.com> cc: Maxim Mikityanskiy <maxtram95@gmail.com> cc: YAMANE Toshiaki <yamanetoshi@gmail.com> cc: linux-wireless@vger.kernel.org cc: linux-scsi@vger.kernel.org cc: devel@driverdev.osuosl.org Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Diffstat (limited to 'fs/proc')
-rw-r--r--fs/proc/generic.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/fs/proc/generic.c b/fs/proc/generic.c
index 4074da57c99e..75e08d36b2f1 100644
--- a/fs/proc/generic.c
+++ b/fs/proc/generic.c
@@ -617,3 +617,10 @@ int remove_proc_subtree(const char *name, struct proc_dir_entry *parent)
return 0;
}
EXPORT_SYMBOL(remove_proc_subtree);
+
+void *proc_get_parent_data(const struct inode *inode)
+{
+ struct proc_dir_entry *de = PDE(inode);
+ return de->parent->data;
+}
+EXPORT_SYMBOL_GPL(proc_get_parent_data);