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: Christoph Hellwig <hch@lst.de>
This commit is contained in:
parent
61172eaea1
commit
7aed53d1df
|
@ -511,33 +511,39 @@ struct proc_dir_entry *proc_create_mount_point(const char *name)
|
|||
}
|
||||
EXPORT_SYMBOL(proc_create_mount_point);
|
||||
|
||||
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 *proc_create_reg(const char *name, umode_t mode,
|
||||
struct proc_dir_entry **parent, void *data)
|
||||
{
|
||||
struct proc_dir_entry *pde;
|
||||
struct proc_dir_entry *p;
|
||||
|
||||
if ((mode & S_IFMT) == 0)
|
||||
mode |= S_IFREG;
|
||||
|
||||
if (!S_ISREG(mode)) {
|
||||
WARN_ON(1); /* use proc_mkdir() */
|
||||
if ((mode & S_IALLUGO) == 0)
|
||||
mode |= S_IRUGO;
|
||||
if (WARN_ON_ONCE(!S_ISREG(mode)))
|
||||
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);
|
||||
|
||||
if ((mode & S_IALLUGO) == 0)
|
||||
mode |= S_IRUGO;
|
||||
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;
|
||||
p = proc_create_reg(name, mode, &parent, data);
|
||||
if (!p)
|
||||
return NULL;
|
||||
p->proc_fops = proc_fops;
|
||||
return proc_register(parent, p);
|
||||
}
|
||||
EXPORT_SYMBOL(proc_create_data);
|
||||
|
||||
|
|
|
@ -162,6 +162,8 @@ extern bool proc_fill_cache(struct file *, struct dir_context *, const char *, i
|
|||
/*
|
||||
* 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 *dp);
|
||||
extern struct dentry *proc_lookup(struct inode *, struct dentry *, unsigned int);
|
||||
|
|
Loading…
Reference in New Issue