diff options
| author | Frederic Weisbecker <fweisbec@gmail.com> | 2013-05-02 17:37:49 +0200 | 
|---|---|---|
| committer | Frederic Weisbecker <fweisbec@gmail.com> | 2013-05-02 17:54:19 +0200 | 
| commit | c032862fba51a3ca504752d3a25186b324c5ce83 (patch) | |
| tree | 955dc2ba4ab3df76ecc2bb780ee84aca04967e8d /drivers/base/devtmpfs.c | |
| parent | fda76e074c7737fc57855dd17c762e50ed526052 (diff) | |
| parent | 8700c95adb033843fc163d112b9d21d4fda78018 (diff) | |
| download | olio-linux-3.10-c032862fba51a3ca504752d3a25186b324c5ce83.tar.xz olio-linux-3.10-c032862fba51a3ca504752d3a25186b324c5ce83.zip  | |
Merge commit '8700c95adb03' into timers/nohz
The full dynticks tree needs the latest RCU and sched
upstream updates in order to fix some dependencies.
Merge a common upstream merge point that has these
updates.
Conflicts:
	include/linux/perf_event.h
	kernel/rcutree.h
	kernel/rcutree_plugin.h
Signed-off-by: Frederic Weisbecker <fweisbec@gmail.com>
Diffstat (limited to 'drivers/base/devtmpfs.c')
| -rw-r--r-- | drivers/base/devtmpfs.c | 28 | 
1 files changed, 18 insertions, 10 deletions
diff --git a/drivers/base/devtmpfs.c b/drivers/base/devtmpfs.c index 01fc5b07f95..7413d065906 100644 --- a/drivers/base/devtmpfs.c +++ b/drivers/base/devtmpfs.c @@ -24,6 +24,7 @@  #include <linux/sched.h>  #include <linux/slab.h>  #include <linux/kthread.h> +#include "base.h"  static struct task_struct *thread; @@ -41,6 +42,8 @@ static struct req {  	int err;  	const char *name;  	umode_t mode;	/* 0 => delete */ +	kuid_t uid; +	kgid_t gid;  	struct device *dev;  } *requests; @@ -85,7 +88,9 @@ int devtmpfs_create_node(struct device *dev)  		return 0;  	req.mode = 0; -	req.name = device_get_devnode(dev, &req.mode, &tmp); +	req.uid = GLOBAL_ROOT_UID; +	req.gid = GLOBAL_ROOT_GID; +	req.name = device_get_devnode(dev, &req.mode, &req.uid, &req.gid, &tmp);  	if (!req.name)  		return -ENOMEM; @@ -121,7 +126,7 @@ int devtmpfs_delete_node(struct device *dev)  	if (!thread)  		return 0; -	req.name = device_get_devnode(dev, NULL, &tmp); +	req.name = device_get_devnode(dev, NULL, NULL, NULL, &tmp);  	if (!req.name)  		return -ENOMEM; @@ -187,7 +192,8 @@ static int create_path(const char *nodepath)  	return err;  } -static int handle_create(const char *nodename, umode_t mode, struct device *dev) +static int handle_create(const char *nodename, umode_t mode, kuid_t uid, +			 kgid_t gid, struct device *dev)  {  	struct dentry *dentry;  	struct path path; @@ -201,14 +207,14 @@ static int handle_create(const char *nodename, umode_t mode, struct device *dev)  	if (IS_ERR(dentry))  		return PTR_ERR(dentry); -	err = vfs_mknod(path.dentry->d_inode, -			dentry, mode, dev->devt); +	err = vfs_mknod(path.dentry->d_inode, dentry, mode, dev->devt);  	if (!err) {  		struct iattr newattrs; -		/* fixup possibly umasked mode */  		newattrs.ia_mode = mode; -		newattrs.ia_valid = ATTR_MODE; +		newattrs.ia_uid = uid; +		newattrs.ia_gid = gid; +		newattrs.ia_valid = ATTR_MODE|ATTR_UID|ATTR_GID;  		mutex_lock(&dentry->d_inode->i_mutex);  		notify_change(dentry, &newattrs);  		mutex_unlock(&dentry->d_inode->i_mutex); @@ -358,10 +364,11 @@ int devtmpfs_mount(const char *mntdir)  static DECLARE_COMPLETION(setup_done); -static int handle(const char *name, umode_t mode, struct device *dev) +static int handle(const char *name, umode_t mode, kuid_t uid, kgid_t gid, +		  struct device *dev)  {  	if (mode) -		return handle_create(name, mode, dev); +		return handle_create(name, mode, uid, gid, dev);  	else  		return handle_remove(name, dev);  } @@ -387,7 +394,8 @@ static int devtmpfsd(void *p)  			spin_unlock(&req_lock);  			while (req) {  				struct req *next = req->next; -				req->err = handle(req->name, req->mode, req->dev); +				req->err = handle(req->name, req->mode, +						  req->uid, req->gid, req->dev);  				complete(&req->done);  				req = next;  			}  |