Commit 7aed53d1 authored by Christoph Hellwig's avatar Christoph Hellwig

proc: add a proc_create_reg helper

Common code for creating a regular file.  Factor out of proc_create_data, to
be reused by other functions soon.
Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
parent 61172eae
...@@ -511,33 +511,39 @@ struct proc_dir_entry *proc_create_mount_point(const char *name) ...@@ -511,33 +511,39 @@ struct proc_dir_entry *proc_create_mount_point(const char *name)
} }
EXPORT_SYMBOL(proc_create_mount_point); EXPORT_SYMBOL(proc_create_mount_point);
struct proc_dir_entry *proc_create_data(const char *name, umode_t mode, struct proc_dir_entry *proc_create_reg(const char *name, umode_t mode,
struct proc_dir_entry *parent, struct proc_dir_entry **parent, void *data)
const struct file_operations *proc_fops,
void *data)
{ {
struct proc_dir_entry *pde; struct proc_dir_entry *p;
if ((mode & S_IFMT) == 0) if ((mode & S_IFMT) == 0)
mode |= S_IFREG; mode |= S_IFREG;
if ((mode & S_IALLUGO) == 0)
if (!S_ISREG(mode)) { mode |= S_IRUGO;
WARN_ON(1); /* use proc_mkdir() */ if (WARN_ON_ONCE(!S_ISREG(mode)))
return NULL; return NULL;
p = __proc_create(parent, name, mode, 1);
if (p) {
p->proc_iops = &proc_file_inode_operations;
p->data = data;
} }
return p;
}
struct proc_dir_entry *proc_create_data(const char *name, umode_t mode,
struct proc_dir_entry *parent,
const struct file_operations *proc_fops, void *data)
{
struct proc_dir_entry *p;
BUG_ON(proc_fops == NULL); BUG_ON(proc_fops == NULL);
if ((mode & S_IALLUGO) == 0) p = proc_create_reg(name, mode, &parent, data);
mode |= S_IRUGO; if (!p)
pde = __proc_create(&parent, name, mode, 1);
if (!pde)
goto out;
pde->proc_fops = proc_fops;
pde->data = data;
pde->proc_iops = &proc_file_inode_operations;
return proc_register(parent, pde);
out:
return NULL; return NULL;
p->proc_fops = proc_fops;
return proc_register(parent, p);
} }
EXPORT_SYMBOL(proc_create_data); EXPORT_SYMBOL(proc_create_data);
......
...@@ -162,6 +162,8 @@ extern bool proc_fill_cache(struct file *, struct dir_context *, const char *, i ...@@ -162,6 +162,8 @@ extern bool proc_fill_cache(struct file *, struct dir_context *, const char *, i
/* /*
* generic.c * generic.c
*/ */
struct proc_dir_entry *proc_create_reg(const char *name, umode_t mode,
struct proc_dir_entry **parent, void *data);
struct proc_dir_entry *proc_register(struct proc_dir_entry *dir, struct proc_dir_entry *proc_register(struct proc_dir_entry *dir,
struct proc_dir_entry *dp); struct proc_dir_entry *dp);
extern struct dentry *proc_lookup(struct inode *, struct dentry *, unsigned int); extern struct dentry *proc_lookup(struct inode *, struct dentry *, unsigned int);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment