|
@@ -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);
|
|
|
|