diff options
| author | David Howells <dhowells@redhat.com> | 2013-04-12 02:48:30 +0100 | 
|---|---|---|
| committer | Al Viro <viro@zeniv.linux.org.uk> | 2013-05-01 17:29:41 -0400 | 
| commit | 270b5ac2151707c25d3327722c5badfbd95945bc (patch) | |
| tree | 27e07d1c8f531f8a817071bdb7f8c2ae5282886c | |
| parent | 34db8aaf0f95ffac407d39da22972b38da631db4 (diff) | |
| download | olio-linux-3.10-270b5ac2151707c25d3327722c5badfbd95945bc.tar.xz olio-linux-3.10-270b5ac2151707c25d3327722c5badfbd95945bc.zip  | |
proc: Add proc_mkdir_data()
Add proc_mkdir_data() to allow procfs directories to be created that are
annotated at the time of creation with private data rather than doing this
post-creation.  This means no access is then required to the proc_dir_entry
struct to set this.
Signed-off-by: David Howells <dhowells@redhat.com>
Acked-by: Mauro Carvalho Chehab <mchehab@redhat.com>
Acked-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
cc: Neela Syam Kolli <megaraidlinux@lsi.com>
cc: Jerry Chuang <jerry-chuang@realtek.com>
cc: linux-scsi@vger.kernel.org
cc: devel@driverdev.osuosl.org
cc: linux-wireless@vger.kernel.org
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
| -rw-r--r-- | drivers/message/i2o/i2o_proc.c | 8 | ||||
| -rw-r--r-- | drivers/scsi/megaraid.c | 4 | ||||
| -rw-r--r-- | drivers/staging/rtl8192u/r8192U_core.c | 3 | ||||
| -rw-r--r-- | fs/proc/generic.c | 30 | ||||
| -rw-r--r-- | fs/reiserfs/procfs.c | 3 | ||||
| -rw-r--r-- | include/linux/proc_fs.h | 13 | 
6 files changed, 28 insertions, 33 deletions
diff --git a/drivers/message/i2o/i2o_proc.c b/drivers/message/i2o/i2o_proc.c index 70a840f9b28..b7d87cd227a 100644 --- a/drivers/message/i2o/i2o_proc.c +++ b/drivers/message/i2o/i2o_proc.c @@ -1913,14 +1913,12 @@ static void i2o_proc_device_add(struct proc_dir_entry *dir,  	osm_debug("adding device /proc/i2o/%s/%s\n", dev->iop->name, buff); -	devdir = proc_mkdir(buff, dir); +	devdir = proc_mkdir_data(buff, 0, dir, dev);  	if (!devdir) {  		osm_warn("Could not allocate procdir!\n");  		return;  	} -	devdir->data = dev; -  	i2o_proc_create_entries(devdir, generic_dev_entries, dev);  	/* Inform core that we want updates about this device's status */ @@ -1954,12 +1952,10 @@ static int i2o_proc_iop_add(struct proc_dir_entry *dir,  	osm_debug("adding IOP /proc/i2o/%s\n", c->name); -	iopdir = proc_mkdir(c->name, dir); +	iopdir = proc_mkdir_data(c->name, 0, dir, c);  	if (!iopdir)  		return -1; -	iopdir->data = c; -  	i2o_proc_create_entries(iopdir, i2o_proc_generic_iop_entries, c);  	list_for_each_entry(dev, &c->devices, list) diff --git a/drivers/scsi/megaraid.c b/drivers/scsi/megaraid.c index a1c90bd34e7..ef3384d39e1 100644 --- a/drivers/scsi/megaraid.c +++ b/drivers/scsi/megaraid.c @@ -2818,12 +2818,12 @@ mega_create_proc_entry(int index, struct proc_dir_entry *parent)  	sprintf(string, "hba%d", adapter->host->host_no); -	dir = adapter->controller_proc_dir_entry = proc_mkdir(string, parent); +	dir = adapter->controller_proc_dir_entry = +		proc_mkdir_data(string, 0, parent, adapter);  	if(!dir) {  		printk(KERN_WARNING "\nmegaraid: proc_mkdir failed\n");  		return;  	} -	dir->data = adapter;  	for (f = mega_proc_files; f->name; f++) {  		de = proc_create_data(f->name, S_IRUSR, dir, &mega_proc_fops, diff --git a/drivers/staging/rtl8192u/r8192U_core.c b/drivers/staging/rtl8192u/r8192U_core.c index 433c3df95de..d81d7d55f25 100644 --- a/drivers/staging/rtl8192u/r8192U_core.c +++ b/drivers/staging/rtl8192u/r8192U_core.c @@ -672,13 +672,12 @@ void rtl8192_proc_init_one(struct net_device *dev)  	struct r8192_priv *priv = (struct r8192_priv *)ieee80211_priv(dev);  	if (rtl8192_proc) { -		priv->dir_dev = proc_mkdir(dev->name, rtl8192_proc); +		priv->dir_dev = proc_mkdir_data(dev->name, 0, rtl8192_proc, dev);  		if (!priv->dir_dev) {  			RT_TRACE(COMP_ERR, "Unable to initialize /proc/net/rtl8192/%s\n",  				 dev->name);  			return;  		} -		priv->dir_dev->data = dev;  		for (f = rtl8192_proc_files; f->name[0]; f++) {  			if (!proc_create_data(f->name, S_IFREG | S_IRUGO, diff --git a/fs/proc/generic.c b/fs/proc/generic.c index 5f6f6c38701..4074da57c99 100644 --- a/fs/proc/generic.c +++ b/fs/proc/generic.c @@ -428,13 +428,17 @@ struct proc_dir_entry *proc_symlink(const char *name,  }  EXPORT_SYMBOL(proc_symlink); -struct proc_dir_entry *proc_mkdir_mode(const char *name, umode_t mode, -		struct proc_dir_entry *parent) +struct proc_dir_entry *proc_mkdir_data(const char *name, umode_t mode, +		struct proc_dir_entry *parent, void *data)  {  	struct proc_dir_entry *ent; +	if (mode == 0) +		mode = S_IRUGO | S_IXUGO; +  	ent = __proc_create(&parent, name, S_IFDIR | mode, 2);  	if (ent) { +		ent->data = data;  		if (proc_register(parent, ent) < 0) {  			kfree(ent);  			ent = NULL; @@ -442,29 +446,19 @@ struct proc_dir_entry *proc_mkdir_mode(const char *name, umode_t mode,  	}  	return ent;  } -EXPORT_SYMBOL(proc_mkdir_mode); +EXPORT_SYMBOL_GPL(proc_mkdir_data); -struct proc_dir_entry *proc_net_mkdir(struct net *net, const char *name, -		struct proc_dir_entry *parent) +struct proc_dir_entry *proc_mkdir_mode(const char *name, umode_t mode, +				       struct proc_dir_entry *parent)  { -	struct proc_dir_entry *ent; - -	ent = __proc_create(&parent, name, S_IFDIR | S_IRUGO | S_IXUGO, 2); -	if (ent) { -		ent->data = net; -		if (proc_register(parent, ent) < 0) { -			kfree(ent); -			ent = NULL; -		} -	} -	return ent; +	return proc_mkdir_data(name, mode, parent, NULL);  } -EXPORT_SYMBOL_GPL(proc_net_mkdir); +EXPORT_SYMBOL(proc_mkdir_mode);  struct proc_dir_entry *proc_mkdir(const char *name,  		struct proc_dir_entry *parent)  { -	return proc_mkdir_mode(name, S_IRUGO | S_IXUGO, parent); +	return proc_mkdir_data(name, 0, parent, NULL);  }  EXPORT_SYMBOL(proc_mkdir); diff --git a/fs/reiserfs/procfs.c b/fs/reiserfs/procfs.c index 274adea363f..07c2162ef55 100644 --- a/fs/reiserfs/procfs.c +++ b/fs/reiserfs/procfs.c @@ -479,9 +479,8 @@ int reiserfs_proc_info_init(struct super_block *sb)  		*s = '!';  	spin_lock_init(&__PINFO(sb).lock); -	REISERFS_SB(sb)->procdir = proc_mkdir(b, proc_info_root); +	REISERFS_SB(sb)->procdir = proc_mkdir_data(b, 0, proc_info_root, sb);  	if (REISERFS_SB(sb)->procdir) { -		REISERFS_SB(sb)->procdir->data = sb;  		add_file(sb, "version", show_version);  		add_file(sb, "super", show_super);  		add_file(sb, "per-level", show_per_level); diff --git a/include/linux/proc_fs.h b/include/linux/proc_fs.h index 80d9e24a79a..a0fb1c2f1d8 100644 --- a/include/linux/proc_fs.h +++ b/include/linux/proc_fs.h @@ -73,6 +73,8 @@ extern int remove_proc_subtree(const char *name, struct proc_dir_entry *parent);  extern struct proc_dir_entry *proc_symlink(const char *,  		struct proc_dir_entry *, const char *);  extern struct proc_dir_entry *proc_mkdir(const char *,struct proc_dir_entry *); +extern struct proc_dir_entry *proc_mkdir_data(const char *, umode_t, +					      struct proc_dir_entry *, void *);  extern struct proc_dir_entry *proc_mkdir_mode(const char *name, umode_t mode,  			struct proc_dir_entry *parent); @@ -82,9 +84,6 @@ static inline struct proc_dir_entry *proc_create(const char *name, umode_t mode,  	return proc_create_data(name, mode, parent, proc_fops, NULL);  } -extern struct proc_dir_entry *proc_net_mkdir(struct net *net, const char *name, -	struct proc_dir_entry *parent); -  extern void proc_set_size(struct proc_dir_entry *, loff_t);  extern void proc_set_user(struct proc_dir_entry *, kuid_t, kgid_t);  #else @@ -108,6 +107,8 @@ static inline struct proc_dir_entry *proc_symlink(const char *name,  		struct proc_dir_entry *parent,const char *dest) {return NULL;}  static inline struct proc_dir_entry *proc_mkdir(const char *name,  	struct proc_dir_entry *parent) {return NULL;} +static inline struct proc_dir_entry *proc_mkdir_data(const char *name, +	umode_t mode, struct proc_dir_entry *parent, void *data) { return NULL; }  static inline struct proc_dir_entry *proc_mkdir_mode(const char *name,  	umode_t mode, struct proc_dir_entry *parent) { return NULL; }  static inline void proc_set_size(struct proc_dir_entry *de, loff_t size) {} @@ -153,4 +154,10 @@ static inline void *PDE_DATA(const struct inode *inode)  	return PROC_I(inode)->pde->data;  } +static inline struct proc_dir_entry *proc_net_mkdir( +	struct net *net, const char *name, struct proc_dir_entry *parent) +{ +	return proc_mkdir_data(name, 0, parent, net); +} +  #endif /* _LINUX_PROC_FS_H */  |