diff options
| author | Al Viro <viro@zeniv.linux.org.uk> | 2011-06-27 16:35:45 -0400 | 
|---|---|---|
| committer | Al Viro <viro@zeniv.linux.org.uk> | 2011-07-20 01:44:10 -0400 | 
| commit | 69753a0f14d3cb2e8a70e559ef8d409e4deeac8a (patch) | |
| tree | e00ca40e65892ff9383bbf2d301d4269dd9327e9 /drivers/base/devtmpfs.c | |
| parent | 2780f1ff6aec0cf708a61c022d475bfcaa648965 (diff) | |
switch devtmpfs to kern_path_create()
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Diffstat (limited to 'drivers/base/devtmpfs.c')
| -rw-r--r-- | drivers/base/devtmpfs.c | 83 | 
1 files changed, 36 insertions, 47 deletions
| diff --git a/drivers/base/devtmpfs.c b/drivers/base/devtmpfs.c index 1a16e1fd7f8a..a49897d05325 100644 --- a/drivers/base/devtmpfs.c +++ b/drivers/base/devtmpfs.c @@ -144,27 +144,21 @@ int devtmpfs_delete_node(struct device *dev)  static int dev_mkdir(const char *name, mode_t mode)  { -	struct nameidata nd;  	struct dentry *dentry; +	struct path path;  	int err; -	err = kern_path_parent(name, &nd); -	if (err) -		return err; - -	dentry = lookup_create(&nd, 1); -	if (!IS_ERR(dentry)) { -		err = vfs_mkdir(nd.path.dentry->d_inode, dentry, mode); -		if (!err) -			/* mark as kernel-created inode */ -			dentry->d_inode->i_private = &thread; -		dput(dentry); -	} else { -		err = PTR_ERR(dentry); -	} - -	mutex_unlock(&nd.path.dentry->d_inode->i_mutex); -	path_put(&nd.path); +	dentry = kern_path_create(AT_FDCWD, name, &path, 1); +	if (IS_ERR(dentry)) +		return PTR_ERR(dentry); + +	err = vfs_mkdir(path.dentry->d_inode, dentry, mode); +	if (!err) +		/* mark as kernel-created inode */ +		dentry->d_inode->i_private = &thread; +	dput(dentry); +	mutex_unlock(&path.dentry->d_inode->i_mutex); +	path_put(&path);  	return err;  } @@ -203,42 +197,37 @@ out:  static int handle_create(const char *nodename, mode_t mode, struct device *dev)  { -	struct nameidata nd;  	struct dentry *dentry; +	struct path path;  	int err; -	err = kern_path_parent(nodename, &nd); -	if (err == -ENOENT) { +	dentry = kern_path_create(AT_FDCWD, nodename, &path, 0); +	if (dentry == ERR_PTR(-ENOENT)) {  		create_path(nodename); -		err = kern_path_parent(nodename, &nd); +		dentry = kern_path_create(AT_FDCWD, nodename, &path, 0);  	} -	if (err) -		return err; - -	dentry = lookup_create(&nd, 0); -	if (!IS_ERR(dentry)) { -		err = vfs_mknod(nd.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; -			mutex_lock(&dentry->d_inode->i_mutex); -			notify_change(dentry, &newattrs); -			mutex_unlock(&dentry->d_inode->i_mutex); - -			/* mark as kernel-created inode */ -			dentry->d_inode->i_private = &thread; -		} -		dput(dentry); -	} else { -		err = PTR_ERR(dentry); +	if (IS_ERR(dentry)) +		return PTR_ERR(dentry); + +	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; +		mutex_lock(&dentry->d_inode->i_mutex); +		notify_change(dentry, &newattrs); +		mutex_unlock(&dentry->d_inode->i_mutex); + +		/* mark as kernel-created inode */ +		dentry->d_inode->i_private = &thread;  	} +	dput(dentry); -	mutex_unlock(&nd.path.dentry->d_inode->i_mutex); -	path_put(&nd.path); +	mutex_unlock(&path.dentry->d_inode->i_mutex); +	path_put(&path);  	return err;  } | 
