path_lookup for 2.4.20-pre4
Subsystems (2)
PATCH 1/1 path_lookup for 2.4.20-pre4
This patch cleans up vfs path lookup code by combining path_init and path_walk into one function. This patch has not changed since Alan Cox included it in 2.4.19-pre5-ac2. I have ported it to 2.4.20-pre4.
Hanna
----------
fs/exec.c +1 -2
@@ -364,8 +364,7 @@struct file *file;int err =0 ; -if (path_init (name,LOOKUP_FOLLOW |LOOKUP_POSITIVE , &nd)) - err =path_walk (name, &nd); + err =path_lookup (name,LOOKUP_FOLLOW |LOOKUP_POSITIVE , &nd); file =ERR_PTR (err);if (!err) { inode = nd.dentry->d_inode;
fs/namei.c +22 -32
139 lines not on this page · raw message
fs/namespace.c +6 -32
@@ -361,17 +361,9 @@asmlinkage long sys_umount (char * name,int flags) {struct nameidata nd; -char *kname;int retval; - kname =getname (name); - retval =PTR_ERR (kname); -if (IS_ERR (kname)) - goto out; - retval =0 ; -if (path_init (kname,LOOKUP_POSITIVE |LOOKUP_FOLLOW , &nd)) - retval =path_walk (kname, &nd); -putname (kname); + retval =__user_walk (name,LOOKUP_POSITIVE |LOOKUP_FOLLOW , &nd);if (retval) goto out; retval = -EINVAL ;
@@ -498,8 +490,7 @@return err;if (!old_name || !*old_name)return -EINVAL ; -if (path_init (old_name,LOOKUP_POSITIVE |LOOKUP_FOLLOW , &old_nd)) - err =path_walk (old_name, &old_nd); + err =path_lookup (old_name,LOOKUP_POSITIVE |LOOKUP_FOLLOW , &old_nd);if (err)return err;
@@ -565,8 +556,7 @@return -EPERM ;if (!old_name || !*old_name)return -EINVAL ; -if (path_init (old_name,LOOKUP_POSITIVE |LOOKUP_FOLLOW , &old_nd)) - err =path_walk (old_name, &old_nd); + err =path_lookup (old_name,LOOKUP_POSITIVE |LOOKUP_FOLLOW , &old_nd);if (err)return err;
@@ -732,8 +722,7 @@ flags &= ~(MS_NOSUID |MS_NOEXEC |MS_NODEV );/* ... and get the mountpoint */ -if (path_init (dir_name,LOOKUP_FOLLOW |LOOKUP_POSITIVE , &nd)) - retval =path_walk (dir_name, &nd); + retval =path_lookup (dir_name,LOOKUP_FOLLOW |LOOKUP_POSITIVE , &nd);if (retval)return retval;
@@ -912,7 +901,6 @@ {struct vfsmount *tmp;struct nameidata new_nd, old_nd, parent_nd, root_parent, user_nd; -char *name;int error;if (!capable (CAP_SYS_ADMIN ))
@@ -920,28 +908,14 @@lock_kernel (); - name =getname (new_root); - error =PTR_ERR (name); -if (IS_ERR (name)) - goto out0; - error =0 ; -if (path_init (name,LOOKUP_POSITIVE |LOOKUP_FOLLOW |LOOKUP_DIRECTORY , &new_nd)) - error =path_walk (name, &new_nd); -putname (name); + error =__user_walk (new_root,LOOKUP_POSITIVE |LOOKUP_FOLLOW |LOOKUP_DIRECTORY , &new_nd);if (error) goto out0; error = -EINVAL ;if (!check_mnt (new_nd.mnt)) goto out1; - name =getname (put_old); - error =PTR_ERR (name); -if (IS_ERR (name)) - goto out1; - error =0 ; -if (path_init (name,LOOKUP_POSITIVE |LOOKUP_FOLLOW |LOOKUP_DIRECTORY , &old_nd)) - error =path_walk (name, &old_nd); -putname (name); + error =__user_walk (put_old,LOOKUP_POSITIVE |LOOKUP_FOLLOW |LOOKUP_DIRECTORY , &old_nd);if (error) goto out1;
fs/open.c +2 -19
@@ -385,17 +385,8 @@ {int error;struct nameidata nd; -char *name; - name =getname (filename); - error =PTR_ERR (name); -if (IS_ERR (name)) - goto out; - - error =0 ; -if (path_init (name,LOOKUP_POSITIVE |LOOKUP_FOLLOW |LOOKUP_DIRECTORY ,&nd)) - error =path_walk (name, &nd); -putname (name); + error =__user_walk (filename,LOOKUP_POSITIVE |LOOKUP_FOLLOW |LOOKUP_DIRECTORY ,&nd);if (error) goto out;
@@ -445,17 +436,9 @@ {int error;struct nameidata nd; -char *name; - - name =getname (filename); - error =PTR_ERR (name); -if (IS_ERR (name)) - goto out; -path_init (name,LOOKUP_POSITIVE |LOOKUP_FOLLOW | + error =__user_walk (filename,LOOKUP_POSITIVE |LOOKUP_FOLLOW |LOOKUP_DIRECTORY |LOOKUP_NOALT , &nd); - error =path_walk (name, &nd); -putname (name);if (error) goto out;
fs/super.c +1 -2
@@ -659,8 +659,7 @@/* What device it is? */ if (!dev_name || !*dev_name)return ERR_PTR (-EINVAL ); -if (path_init (dev_name,LOOKUP_FOLLOW |LOOKUP_POSITIVE , &nd)) - error =path_walk (dev_name, &nd); + error =path_lookup (dev_name,LOOKUP_FOLLOW |LOOKUP_POSITIVE , &nd);if (error)return ERR_PTR (error); inode = nd.dentry->d_inode;
include/linux/fs.h +1 -0
@@ -1329,6 +1329,7 @@extern int FASTCALL (__user_walk (const char *,unsigned ,struct nameidata *));extern int FASTCALL (path_init (const char *,unsigned ,struct nameidata *));extern int FASTCALL (path_walk (const char *,struct nameidata *)); +extern int FASTCALL (path_lookup (const char *,unsigned ,struct nameidata *));extern int FASTCALL (link_path_walk (const char *,struct nameidata *));extern void path_release (struct nameidata *);extern int follow_down (struct vfsmount **,struct dentry **);