Skip to content

Commit 7aed53d

Browse files
author
Christoph Hellwig
committed
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 <[email protected]>
1 parent 61172ea commit 7aed53d

File tree

2 files changed

+27
-19
lines changed

2 files changed

+27
-19
lines changed

fs/proc/generic.c

Lines changed: 25 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -511,33 +511,39 @@ struct proc_dir_entry *proc_create_mount_point(const char *name)
511511
}
512512
EXPORT_SYMBOL(proc_create_mount_point);
513513

514-
struct proc_dir_entry *proc_create_data(const char *name, umode_t mode,
515-
struct proc_dir_entry *parent,
516-
const struct file_operations *proc_fops,
517-
void *data)
514+
struct proc_dir_entry *proc_create_reg(const char *name, umode_t mode,
515+
struct proc_dir_entry **parent, void *data)
518516
{
519-
struct proc_dir_entry *pde;
517+
struct proc_dir_entry *p;
518+
520519
if ((mode & S_IFMT) == 0)
521520
mode |= S_IFREG;
522-
523-
if (!S_ISREG(mode)) {
524-
WARN_ON(1); /* use proc_mkdir() */
521+
if ((mode & S_IALLUGO) == 0)
522+
mode |= S_IRUGO;
523+
if (WARN_ON_ONCE(!S_ISREG(mode)))
525524
return NULL;
525+
526+
p = __proc_create(parent, name, mode, 1);
527+
if (p) {
528+
p->proc_iops = &proc_file_inode_operations;
529+
p->data = data;
526530
}
531+
return p;
532+
}
533+
534+
struct proc_dir_entry *proc_create_data(const char *name, umode_t mode,
535+
struct proc_dir_entry *parent,
536+
const struct file_operations *proc_fops, void *data)
537+
{
538+
struct proc_dir_entry *p;
527539

528540
BUG_ON(proc_fops == NULL);
529541

530-
if ((mode & S_IALLUGO) == 0)
531-
mode |= S_IRUGO;
532-
pde = __proc_create(&parent, name, mode, 1);
533-
if (!pde)
534-
goto out;
535-
pde->proc_fops = proc_fops;
536-
pde->data = data;
537-
pde->proc_iops = &proc_file_inode_operations;
538-
return proc_register(parent, pde);
539-
out:
540-
return NULL;
542+
p = proc_create_reg(name, mode, &parent, data);
543+
if (!p)
544+
return NULL;
545+
p->proc_fops = proc_fops;
546+
return proc_register(parent, p);
541547
}
542548
EXPORT_SYMBOL(proc_create_data);
543549

fs/proc/internal.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -162,6 +162,8 @@ extern bool proc_fill_cache(struct file *, struct dir_context *, const char *, i
162162
/*
163163
* generic.c
164164
*/
165+
struct proc_dir_entry *proc_create_reg(const char *name, umode_t mode,
166+
struct proc_dir_entry **parent, void *data);
165167
struct proc_dir_entry *proc_register(struct proc_dir_entry *dir,
166168
struct proc_dir_entry *dp);
167169
extern struct dentry *proc_lookup(struct inode *, struct dentry *, unsigned int);

0 commit comments

Comments
 (0)