From: "Denis V. Lunev" <den@openvz.org>
To: akpm@linux-foundation.org
Cc: linux-kernel@vger.kernel.org, "Denis V. Lunev" <den@openvz.org>
Subject: [PATCH 1/29] proc: introduce proc_create_data to setup de->data
Date: Tue, 8 Apr 2008 15:19:08 +0400 [thread overview]
Message-ID: <1207653576-12640-1-git-send-email-den@openvz.org> (raw)
In-Reply-To: <1207653508.7171.18.camel@iris.sw.ru>
The problem is the same as for de->proc_fops. Right now PDE becomes visible
without data set. So, the entry could be looked up without data. This, in
most cases, will simply OOPS.
proc_create_data call is created to address this issue. proc_create now
becomes a wrapper around it.
Signed-off-by: Denis V. Lunev <den@openvz.org>
---
fs/proc/generic.c | 8 +++++---
fs/proc/root.c | 2 +-
include/linux/proc_fs.h | 17 +++++++++++++++--
3 files changed, 21 insertions(+), 6 deletions(-)
diff --git a/fs/proc/generic.c b/fs/proc/generic.c
index 8b406e2..b9ec046 100644
--- a/fs/proc/generic.c
+++ b/fs/proc/generic.c
@@ -680,9 +680,10 @@ struct proc_dir_entry *create_proc_entry(const char *name, mode_t mode,
return ent;
}
-struct proc_dir_entry *proc_create(const char *name, mode_t mode,
- struct proc_dir_entry *parent,
- const struct file_operations *proc_fops)
+struct proc_dir_entry *proc_create_data(const char *name, mode_t mode,
+ struct proc_dir_entry *parent,
+ const struct file_operations *proc_fops,
+ void *data)
{
struct proc_dir_entry *pde;
nlink_t nlink;
@@ -703,6 +704,7 @@ struct proc_dir_entry *proc_create(const char *name, mode_t mode,
if (!pde)
goto out;
pde->proc_fops = proc_fops;
+ pde->data = data;
if (proc_register(parent, pde) < 0)
goto out_free;
return pde;
diff --git a/fs/proc/root.c b/fs/proc/root.c
index c741b45..9511753 100644
--- a/fs/proc/root.c
+++ b/fs/proc/root.c
@@ -230,5 +230,5 @@ void pid_ns_release_proc(struct pid_namespace *ns)
EXPORT_SYMBOL(proc_symlink);
EXPORT_SYMBOL(proc_mkdir);
EXPORT_SYMBOL(create_proc_entry);
-EXPORT_SYMBOL(proc_create);
+EXPORT_SYMBOL(proc_create_data);
EXPORT_SYMBOL(remove_proc_entry);
diff --git a/include/linux/proc_fs.h b/include/linux/proc_fs.h
index 2183ffd..c96a791 100644
--- a/include/linux/proc_fs.h
+++ b/include/linux/proc_fs.h
@@ -118,9 +118,10 @@ void de_put(struct proc_dir_entry *de);
extern struct proc_dir_entry *create_proc_entry(const char *name, mode_t mode,
struct proc_dir_entry *parent);
-struct proc_dir_entry *proc_create(const char *name, mode_t mode,
+struct proc_dir_entry *proc_create_data(const char *name, mode_t mode,
struct proc_dir_entry *parent,
- const struct file_operations *proc_fops);
+ const struct file_operations *proc_fops,
+ void *data);
extern void remove_proc_entry(const char *name, struct proc_dir_entry *parent);
extern struct vfsmount *proc_mnt;
@@ -175,6 +176,12 @@ extern struct proc_dir_entry *proc_mkdir(const char *,struct proc_dir_entry *);
extern struct proc_dir_entry *proc_mkdir_mode(const char *name, mode_t mode,
struct proc_dir_entry *parent);
+static inline struct proc_dir_entry *proc_create(const char *name, mode_t mode,
+ struct proc_dir_entry *parent, const struct file_operations *proc_fops)
+{
+ return proc_create_data(name, mode, parent, proc_fops, NULL);
+}
+
static inline struct proc_dir_entry *create_proc_read_entry(const char *name,
mode_t mode, struct proc_dir_entry *base,
read_proc_t *read_proc, void * data)
@@ -224,6 +231,12 @@ static inline struct proc_dir_entry *proc_create(const char *name,
{
return NULL;
}
+static inline struct proc_dir_entry *proc_create_data(const char *name,
+ mode_t mode, struct proc_dir_entry *parent,
+ const struct file_operations *proc_fops, void *data)
+{
+ return NULL;
+}
#define remove_proc_entry(name, parent) do {} while (0)
static inline struct proc_dir_entry *proc_symlink(const char *name,
--
1.5.3.rc5
next prev parent reply other threads:[~2008-04-08 11:27 UTC|newest]
Thread overview: 39+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-04-08 11:18 [PATCH 0/29] proc entries creation race Denis V. Lunev
2008-04-08 11:19 ` Denis V. Lunev [this message]
2008-04-08 11:19 ` [PATCH 2/29] nfsd: use proc_create to setup de->proc_fops Denis V. Lunev
2008-04-08 11:19 ` [PATCH 3/29] nfs: " Denis V. Lunev
2008-04-08 11:19 ` [PATCH 4/29] afs: use non-racy method for proc entries creation Denis V. Lunev
2008-04-08 11:19 ` [PATCH 5/29] ext4: " Denis V. Lunev
2008-04-08 11:19 ` [PATCH 6/29] reiserfs: " Denis V. Lunev
2008-04-08 11:19 ` [PATCH 7/29] jbd2: " Denis V. Lunev
2008-04-08 11:19 ` [PATCH 8/29] proc: use non-racy method for /proc/page_owner creation Denis V. Lunev
2008-04-08 11:19 ` [PATCH 9/29] sysvipc: use non-racy method for proc entries creation Denis V. Lunev
2008-04-08 11:19 ` [PATCH 10/29] mm: use non-racy method for /proc/swaps creation Denis V. Lunev
2008-04-08 11:19 ` [PATCH 11/29] sound: use non-racy method for /proc/driver/snd-page-alloc creation Denis V. Lunev
2008-04-08 11:19 ` [PATCH 12/29] zorro: use non-racy method for proc entries creation Denis V. Lunev
2008-04-08 11:19 ` [PATCH 13/29] samples: use non-racy method for /proc/marker-example creation Denis V. Lunev
2008-04-08 11:19 ` [PATCH 14/29] scsi: use non-racy method for proc entries creation Denis V. Lunev
2008-04-08 11:19 ` [PATCH 15/29] usb: " Denis V. Lunev
2008-04-08 11:19 ` [PATCH 16/29] s390: " Denis V. Lunev
2008-04-08 11:19 ` [PATCH 17/29] arm: use non-racy method for /proc/davinci_clocks creation Denis V. Lunev
2008-04-08 11:19 ` [PATCH 18/29] avr32: proc: use non-racy method for /proc/tlb creation Denis V. Lunev
2008-04-08 11:19 ` [PATCH 19/29] cris: use non-racy method for /proc/system_profile creation Denis V. Lunev
2008-04-08 11:19 ` [PATCH 20/29] ia64: use non-racy method for proc entries creation Denis V. Lunev
2008-04-08 11:19 ` [PATCH 21/29] parisc: use non-racy method for /proc/pcxl_dma creation Denis V. Lunev
2008-04-08 11:19 ` [PATCH 22/29] powerpc: use non-racy method for proc entries creation Denis V. Lunev
2008-04-08 11:19 ` [PATCH 23/29] acpi: " Denis V. Lunev
2008-04-08 11:19 ` [PATCH 24/29] net: " Denis V. Lunev
2008-04-08 11:19 ` [PATCH 25/29] isdn: " Denis V. Lunev
2008-04-30 17:57 ` [patch, -git] isdn: hysdn_procconf.c build fix Ingo Molnar
2008-04-30 18:10 ` Andrew Morton
2008-04-30 18:30 ` Ingo Molnar
2008-04-30 18:47 ` Andrew Morton
2008-04-30 19:03 ` Denis V. Lunev
2008-04-30 19:14 ` Andrew Morton
2008-04-30 19:24 ` Harvey Harrison
2008-04-30 21:21 ` Alexey Dobriyan
2008-04-08 11:19 ` [PATCH 26/29] kernel: use non-racy method for proc entries creation Denis V. Lunev
2008-04-08 11:19 ` [PATCH 27/29] parisc: " Denis V. Lunev
2008-04-08 11:19 ` [PATCH 28/29] drivers: " Denis V. Lunev
2008-04-08 11:19 ` [PATCH 29/29] " Denis V. Lunev
2008-04-17 17:13 ` Dmitry Torokhov
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1207653576-12640-1-git-send-email-den@openvz.org \
--to=den@openvz.org \
--cc=akpm@linux-foundation.org \
--cc=linux-kernel@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox