All of lore.kernel.org
 help / color / mirror / Atom feed
From: Andreas Gruenbacher <agruen@suse.de>
To: linux-kernel@vger.kernel.org
Cc: John Johansen <jjohansen@suse.de>, Jan Blunck <jblunck@suse.de>,
	Erez Zadok <ezk@cs.sunysb.edu>,
	"Josef 'Jeff' Sipek" <jsipek@cs.sunysb.edu>
Subject: [RFC 07/10] Pass no unnecessary information to iop->create
Date: Wed, 08 Aug 2007 19:16:29 +0200	[thread overview]
Message-ID: <20070808171644.286775287@suse.de> (raw)
In-Reply-To: 20070808171622.632749741@suse.de

[-- Attachment #1: create-args.diff --]
[-- Type: text/plain, Size: 39375 bytes --]

vfs_create() and the create inode operation do not need a full nameidata.
Pass a struct vfs_lookup instead.

Signed-off-by: Andreas Gruenbacher <ag@bestbits.at>

---
 fs/9p/vfs_inode.c           |   13 +++++++------
 fs/affs/affs.h              |    2 +-
 fs/affs/namei.c             |    2 +-
 fs/afs/dir.c                |    4 ++--
 fs/bad_inode.c              |    2 +-
 fs/bfs/dir.c                |    2 +-
 fs/cifs/cifsfs.h            |    2 +-
 fs/cifs/dir.c               |   10 +++++-----
 fs/coda/dir.c               |    4 ++--
 fs/ecryptfs/inode.c         |   24 ++++++++++++------------
 fs/exec.c                   |    4 ++--
 fs/ext2/namei.c             |    2 +-
 fs/ext3/namei.c             |    2 +-
 fs/ext4/namei.c             |    2 +-
 fs/fuse/dir.c               |   12 ++++++------
 fs/gfs2/inode.c             |    2 +-
 fs/gfs2/inode.h             |    2 +-
 fs/gfs2/ops_inode.c         |    8 ++++----
 fs/hfs/dir.c                |    2 +-
 fs/hfsplus/dir.c            |    2 +-
 fs/hpfs/namei.c             |    2 +-
 fs/hugetlbfs/inode.c        |    2 +-
 fs/inotify_user.c           |    2 +-
 fs/jffs2/dir.c              |    4 ++--
 fs/jfs/namei.c              |    2 +-
 fs/minix/namei.c            |    2 +-
 fs/msdos/namei.c            |    2 +-
 fs/namei.c                  |   27 +++++++++++++++------------
 fs/ncpfs/dir.c              |    4 ++--
 fs/nfs/dir.c                |   30 +++++++++++++++---------------
 fs/nfs/nfs3proc.c           |    2 +-
 fs/nfs/nfs4proc.c           |   24 ++++++++++++------------
 fs/nfs/proc.c               |    2 +-
 fs/ocfs2/dlm/dlmfs.c        |    2 +-
 fs/ocfs2/namei.c            |    2 +-
 fs/open.c                   |   22 ++++++++++++----------
 fs/qnx4/namei.c             |    2 +-
 fs/ramfs/inode.c            |    2 +-
 fs/reiserfs/namei.c         |    2 +-
 fs/smbfs/dir.c              |    4 ++--
 fs/sysv/namei.c             |    2 +-
 fs/udf/namei.c              |    2 +-
 fs/ufs/namei.c              |    2 +-
 fs/vfat/namei.c             |    2 +-
 fs/xfs/linux-2.6/xfs_iops.c |    2 +-
 include/linux/fs.h          |    4 ++--
 include/linux/namei.h       |    5 +++--
 include/linux/nfs_xdr.h     |    2 +-
 include/linux/qnx4_fs.h     |    2 +-
 ipc/mqueue.c                |    2 +-
 mm/shmem.c                  |    2 +-
 51 files changed, 139 insertions(+), 132 deletions(-)

--- a/fs/9p/vfs_inode.c
+++ b/fs/9p/vfs_inode.c
@@ -459,13 +459,13 @@ error:
  * @inode: directory inode that is being created
  * @dentry:  dentry that is being deleted
  * @mode: create permissions
- * @nd: path information
+ * @lookup: path information
  *
  */
 
 static int
 v9fs_vfs_create(struct inode *dir, struct dentry *dentry, int mode,
-		struct nameidata *nd)
+		struct vfs_lookup *lookup)
 {
 	int err;
 	u32 perm;
@@ -478,8 +478,8 @@ v9fs_vfs_create(struct inode *dir, struc
 	fid = NULL;
 	v9ses = v9fs_inode2v9ses(dir);
 	perm = unixmode2p9mode(v9ses, mode);
-	if (nd && nd->lookup.flags & LOOKUP_OPEN)
-		flags = nd->lookup.intent.open.flags - 1;
+	if (lookup && lookup->flags & LOOKUP_OPEN)
+		flags = lookup->intent.open.flags - 1;
 	else
 		flags = O_RDWR;
 
@@ -492,8 +492,9 @@ v9fs_vfs_create(struct inode *dir, struc
 	}
 
 	/* if we are opening a file, assign the open fid to the file */
-	if (nd && nd->lookup.flags & LOOKUP_OPEN) {
-		filp = lookup_instantiate_filp(nd, dentry, v9fs_open_created);
+	if (lookup && lookup->flags & LOOKUP_OPEN) {
+		filp = lookup_instantiate_filp(lookup, dentry,
+					       v9fs_open_created);
 		if (IS_ERR(filp)) {
 			err = PTR_ERR(filp);
 			goto error;
--- a/fs/affs/affs.h
+++ b/fs/affs/affs.h
@@ -155,7 +155,7 @@ extern void	affs_free_bitmap(struct supe
 extern int	affs_hash_name(struct super_block *sb, const u8 *name, unsigned int len);
 extern struct dentry *affs_lookup(struct inode *dir, struct dentry *dentry, struct nameidata *);
 extern int	affs_unlink(struct inode *dir, struct dentry *dentry);
-extern int	affs_create(struct inode *dir, struct dentry *dentry, int mode, struct nameidata *);
+extern int	affs_create(struct inode *dir, struct dentry *dentry, int mode, struct vfs_lookup *);
 extern int	affs_mkdir(struct inode *dir, struct dentry *dentry, int mode);
 extern int	affs_rmdir(struct inode *dir, struct dentry *dentry);
 extern int	affs_link(struct dentry *olddentry, struct inode *dir,
--- a/fs/affs/namei.c
+++ b/fs/affs/namei.c
@@ -243,7 +243,7 @@ affs_unlink(struct inode *dir, struct de
 }
 
 int
-affs_create(struct inode *dir, struct dentry *dentry, int mode, struct nameidata *nd)
+affs_create(struct inode *dir, struct dentry *dentry, int mode, struct vfs_lookup *lookup)
 {
 	struct super_block *sb = dir->i_sb;
 	struct inode	*inode;
--- a/fs/afs/dir.c
+++ b/fs/afs/dir.c
@@ -29,7 +29,7 @@ static void afs_d_release(struct dentry 
 static int afs_lookup_filldir(void *_cookie, const char *name, int nlen,
 				  loff_t fpos, u64 ino, unsigned dtype);
 static int afs_create(struct inode *dir, struct dentry *dentry, int mode,
-		      struct nameidata *nd);
+		      struct vfs_lookup *lookup);
 static int afs_mkdir(struct inode *dir, struct dentry *dentry, int mode);
 static int afs_rmdir(struct inode *dir, struct dentry *dentry);
 static int afs_unlink(struct inode *dir, struct dentry *dentry);
@@ -906,7 +906,7 @@ error:
  * create a regular file on an AFS filesystem
  */
 static int afs_create(struct inode *dir, struct dentry *dentry, int mode,
-		      struct nameidata *nd)
+		      struct vfs_lookup *lookup)
 {
 	struct afs_file_status status;
 	struct afs_callback cb;
--- a/fs/bad_inode.c
+++ b/fs/bad_inode.c
@@ -186,7 +186,7 @@ static const struct file_operations bad_
 };
 
 static int bad_inode_create (struct inode *dir, struct dentry *dentry,
-		int mode, struct nameidata *nd)
+		int mode, struct vfs_lookup *lookup)
 {
 	return -EIO;
 }
--- a/fs/bfs/dir.c
+++ b/fs/bfs/dir.c
@@ -79,7 +79,7 @@ const struct file_operations bfs_dir_ope
 extern void dump_imap(const char *, struct super_block *);
 
 static int bfs_create(struct inode * dir, struct dentry * dentry, int mode,
-		struct nameidata *nd)
+		struct vfs_lookup *lookup)
 {
 	int err;
 	struct inode * inode;
--- a/fs/cifs/cifsfs.h
+++ b/fs/cifs/cifsfs.h
@@ -44,7 +44,7 @@ extern void cifs_read_inode(struct inode
 /* Functions related to inodes */
 extern const struct inode_operations cifs_dir_inode_ops;
 extern int cifs_create(struct inode *, struct dentry *, int,
-		       struct nameidata *);
+		       struct vfs_lookup *);
 extern struct dentry *cifs_lookup(struct inode *, struct dentry *,
 				  struct nameidata *);
 extern int cifs_unlink(struct inode *, struct dentry *);
--- a/fs/cifs/dir.c
+++ b/fs/cifs/dir.c
@@ -125,7 +125,7 @@ BB remove above eight lines BB */
 
 int
 cifs_create(struct inode *inode, struct dentry *direntry, int mode,
-		struct nameidata *nd)
+		struct vfs_lookup *lookup)
 {
 	int rc = -ENOENT;
 	int xid;
@@ -153,8 +153,8 @@ cifs_create(struct inode *inode, struct 
 		return -ENOMEM;
 	}
 
-	if (nd && (nd->lookup.flags & LOOKUP_OPEN)) {
-		int oflags = nd->lookup.intent.open.flags;
+	if (lookup && (lookup->flags & LOOKUP_OPEN)) {
+		int oflags = lookup->intent.open.flags;
 
 		desiredAccess = 0;
 		if (oflags & FMODE_READ)
@@ -263,8 +263,8 @@ cifs_create(struct inode *inode, struct 
 				direntry->d_op = &cifs_dentry_ops;
 			d_instantiate(direntry, newinode);
 		}
-		if ((nd == NULL /* nfsd case - nfs srv does not set nd */) ||
-			((nd->lookup.flags & LOOKUP_OPEN) == FALSE)) {
+		if ((!lookup /* nfsd case - nfs srv does not set lookup */) ||
+			((lookup->flags & LOOKUP_OPEN) == FALSE)) {
 			/* mknod case - do not leave file open */
 			CIFSSMBClose(xid, pTcon, fileHandle);
 		} else if (newinode) {
--- a/fs/coda/dir.c
+++ b/fs/coda/dir.c
@@ -29,7 +29,7 @@
 #include "coda_int.h"
 
 /* dir inode-ops */
-static int coda_create(struct inode *dir, struct dentry *new, int mode, struct nameidata *nd);
+static int coda_create(struct inode *dir, struct dentry *new, int mode, struct vfs_lookup *lookup);
 static struct dentry *coda_lookup(struct inode *dir, struct dentry *target, struct nameidata *nd);
 static int coda_link(struct dentry *old_dentry, struct inode *dir_inode, 
 		     struct dentry *entry);
@@ -192,7 +192,7 @@ static inline void coda_dir_drop_nlink(s
 }
 
 /* creation routines: create, mknod, mkdir, link, symlink */
-static int coda_create(struct inode *dir, struct dentry *de, int mode, struct nameidata *nd)
+static int coda_create(struct inode *dir, struct dentry *de, int mode, struct vfs_lookup *lookup)
 {
         int error=0;
 	const char *name=de->d_name.name;
--- a/fs/ecryptfs/inode.c
+++ b/fs/ecryptfs/inode.c
@@ -69,7 +69,7 @@ static void unlock_dir(struct dentry *di
 static int
 ecryptfs_create_underlying_file(struct inode *lower_dir_inode,
 				struct dentry *dentry, int mode,
-				struct nameidata *nd)
+				struct vfs_lookup *lookup)
 {
 	struct dentry *lower_dentry = ecryptfs_dentry_to_lower(dentry);
 	struct vfsmount *lower_mnt = ecryptfs_dentry_to_lower_mnt(dentry);
@@ -77,13 +77,13 @@ ecryptfs_create_underlying_file(struct i
 	struct vfsmount *vfsmount_save;
 	int rc;
 
-	dentry_save = nd->lookup.path.dentry;
-	vfsmount_save = nd->lookup.path.mnt;
-	nd->lookup.path.dentry = lower_dentry;
-	nd->lookup.path.mnt = lower_mnt;
-	rc = vfs_create(lower_dir_inode, lower_dentry, mode, nd);
-	nd->lookup.path.dentry = dentry_save;
-	nd->lookup.path.mnt = vfsmount_save;
+	dentry_save = lookup->path.dentry;
+	vfsmount_save = lookup->path.mnt;
+	lookup->path.dentry = lower_dentry;
+	lookup->path.mnt = lower_mnt;
+	rc = vfs_create(lower_dir_inode, lower_dentry, mode, lookup);
+	lookup->path.dentry = dentry_save;
+	lookup->path.mnt = vfsmount_save;
 	return rc;
 }
 
@@ -103,7 +103,7 @@ ecryptfs_create_underlying_file(struct i
 static int
 ecryptfs_do_create(struct inode *directory_inode,
 		   struct dentry *ecryptfs_dentry, int mode,
-		   struct nameidata *nd)
+		   struct vfs_lookup *lookup)
 {
 	int rc;
 	struct dentry *lower_dentry;
@@ -118,7 +118,7 @@ ecryptfs_do_create(struct inode *directo
 		goto out;
 	}
 	rc = ecryptfs_create_underlying_file(lower_dir_dentry->d_inode,
-					     ecryptfs_dentry, mode, nd);
+					     ecryptfs_dentry, mode, lookup);
 	if (unlikely(rc)) {
 		ecryptfs_printk(KERN_ERR,
 				"Failure to create underlying file\n");
@@ -248,11 +248,11 @@ out:
  */
 static int
 ecryptfs_create(struct inode *directory_inode, struct dentry *ecryptfs_dentry,
-		int mode, struct nameidata *nd)
+		int mode, struct vfs_lookup *lookup)
 {
 	int rc;
 
-	rc = ecryptfs_do_create(directory_inode, ecryptfs_dentry, mode, nd);
+	rc = ecryptfs_do_create(directory_inode, ecryptfs_dentry, mode, lookup);
 	if (unlikely(rc)) {
 		ecryptfs_printk(KERN_WARNING, "Failed to create file in"
 				"lower filesystem\n");
--- a/fs/exec.c
+++ b/fs/exec.c
@@ -174,7 +174,7 @@ asmlinkage long sys_uselib(const char __
 out:
   	return error;
 exit:
-	release_open_intent(&nd);
+	release_open_intent(&nd.lookup.intent.open);
 	path_release(&nd);
 	goto out;
 }
@@ -698,7 +698,7 @@ out:
 				return file;
 			}
 		}
-		release_open_intent(&nd);
+		release_open_intent(&nd.lookup.intent.open);
 		path_release(&nd);
 	}
 	goto out;
--- a/fs/ext2/namei.c
+++ b/fs/ext2/namei.c
@@ -103,7 +103,7 @@ struct dentry *ext2_get_parent(struct de
  * If the create succeeds, we fill in the inode information
  * with d_instantiate(). 
  */
-static int ext2_create (struct inode * dir, struct dentry * dentry, int mode, struct nameidata *nd)
+static int ext2_create (struct inode * dir, struct dentry * dentry, int mode, struct vfs_lookup *lookup)
 {
 	struct inode * inode = ext2_new_inode (dir, mode);
 	int err = PTR_ERR(inode);
--- a/fs/ext3/namei.c
+++ b/fs/ext3/namei.c
@@ -1654,7 +1654,7 @@ static int ext3_add_nondir(handle_t *han
  * with d_instantiate().
  */
 static int ext3_create (struct inode * dir, struct dentry * dentry, int mode,
-		struct nameidata *nd)
+		struct vfs_lookup *lookup)
 {
 	handle_t *handle;
 	struct inode * inode;
--- a/fs/ext4/namei.c
+++ b/fs/ext4/namei.c
@@ -1681,7 +1681,7 @@ static int ext4_add_nondir(handle_t *han
  * with d_instantiate().
  */
 static int ext4_create (struct inode * dir, struct dentry * dentry, int mode,
-		struct nameidata *nd)
+		struct vfs_lookup *lookup)
 {
 	handle_t *handle;
 	struct inode * inode;
--- a/fs/fuse/dir.c
+++ b/fs/fuse/dir.c
@@ -303,7 +303,7 @@ static void fuse_sync_release(struct fus
  * 'mknod' + 'open' requests.
  */
 static int fuse_create_open(struct inode *dir, struct dentry *entry, int mode,
-			    struct nameidata *nd)
+			    struct vfs_lookup *lookup)
 {
 	int err;
 	struct inode *inode;
@@ -315,7 +315,7 @@ static int fuse_create_open(struct inode
 	struct fuse_entry_out outentry;
 	struct fuse_file *ff;
 	struct file *file;
-	int flags = nd->lookup.intent.open.flags - 1;
+	int flags = lookup->intent.open.flags - 1;
 
 	if (fc->no_create)
 		return -ENOSYS;
@@ -375,7 +375,7 @@ static int fuse_create_open(struct inode
 	fuse_put_request(fc, forget_req);
 	d_instantiate(entry, inode);
 	fuse_change_timeout(entry, &outentry);
-	file = lookup_instantiate_filp(nd, entry, generic_file_open);
+	file = lookup_instantiate_filp(lookup, entry, generic_file_open);
 	if (IS_ERR(file)) {
 		ff->fh = outopen.fh;
 		fuse_sync_release(fc, ff, outentry.nodeid, flags);
@@ -483,10 +483,10 @@ static int fuse_mknod(struct inode *dir,
 }
 
 static int fuse_create(struct inode *dir, struct dentry *entry, int mode,
-		       struct nameidata *nd)
+		       struct vfs_lookup *lookup)
 {
-	if (nd && (nd->lookup.flags & LOOKUP_OPEN)) {
-		int err = fuse_create_open(dir, entry, mode, nd);
+	if (lookup && (lookup->flags & LOOKUP_OPEN)) {
+		int err = fuse_create_open(dir, entry, mode, lookup);
 		if (err != -ENOSYS)
 			return err;
 		/* Fall back on mknod */
--- a/fs/gfs2/inode.c
+++ b/fs/gfs2/inode.c
@@ -409,7 +409,7 @@ struct inode *gfs2_lookup_simple(struct 
  */
 
 struct inode *gfs2_lookupi(struct inode *dir, const struct qstr *name,
-			   int is_root, struct nameidata *nd)
+			   int is_root, struct vfs_lookup *lookup)
 {
 	struct super_block *sb = dir->i_sb;
 	struct gfs2_inode *dip = GFS2_I(dir);
--- a/fs/gfs2/inode.h
+++ b/fs/gfs2/inode.h
@@ -57,7 +57,7 @@ int gfs2_inode_refresh(struct gfs2_inode
 int gfs2_dinode_dealloc(struct gfs2_inode *inode);
 int gfs2_change_nlink(struct gfs2_inode *ip, int diff);
 struct inode *gfs2_lookupi(struct inode *dir, const struct qstr *name,
-			   int is_root, struct nameidata *nd);
+			   int is_root, struct vfs_lookup *lookup);
 struct inode *gfs2_createi(struct gfs2_holder *ghs, const struct qstr *name,
 			   unsigned int mode, dev_t dev);
 int gfs2_rmdiri(struct gfs2_inode *dip, const struct qstr *name,
--- a/fs/gfs2/ops_inode.c
+++ b/fs/gfs2/ops_inode.c
@@ -48,7 +48,7 @@
  */
 
 static int gfs2_create(struct inode *dir, struct dentry *dentry,
-		       int mode, struct nameidata *nd)
+		       int mode, struct vfs_lookup *lookup)
 {
 	struct gfs2_inode *dip = GFS2_I(dir);
 	struct gfs2_sbd *sdp = GFS2_SB(dir);
@@ -69,12 +69,12 @@ static int gfs2_create(struct inode *dir
 			mark_inode_dirty(inode);
 			break;
 		} else if (PTR_ERR(inode) != -EEXIST ||
-			   (nd->lookup.intent.open.flags & O_EXCL)) {
+			   (lookup->intent.open.flags & O_EXCL)) {
 			gfs2_holder_uninit(ghs);
 			return PTR_ERR(inode);
 		}
 
-		inode = gfs2_lookupi(dir, &dentry->d_name, 0, nd);
+		inode = gfs2_lookupi(dir, &dentry->d_name, 0, lookup);
 		if (inode) {
 			if (!IS_ERR(inode)) {
 				gfs2_holder_uninit(ghs);
@@ -109,7 +109,7 @@ static struct dentry *gfs2_lookup(struct
 
 	dentry->d_op = &gfs2_dops;
 
-	inode = gfs2_lookupi(dir, &dentry->d_name, 0, nd);
+	inode = gfs2_lookupi(dir, &dentry->d_name, 0, &nd->lookup);
 	if (inode && IS_ERR(inode))
 		return ERR_PTR(PTR_ERR(inode));
 
--- a/fs/hfs/dir.c
+++ b/fs/hfs/dir.c
@@ -178,7 +178,7 @@ static int hfs_dir_release(struct inode 
  * the directory and the name (and its length) of the new file.
  */
 static int hfs_create(struct inode *dir, struct dentry *dentry, int mode,
-		      struct nameidata *nd)
+		      struct vfs_lookup *lookup)
 {
 	struct inode *inode;
 	int res;
--- a/fs/hfsplus/dir.c
+++ b/fs/hfsplus/dir.c
@@ -236,7 +236,7 @@ static int hfsplus_dir_release(struct in
 }
 
 static int hfsplus_create(struct inode *dir, struct dentry *dentry, int mode,
-			  struct nameidata *nd)
+			  struct vfs_lookup *lookup)
 {
 	struct inode *inode;
 	int res;
--- a/fs/hpfs/namei.c
+++ b/fs/hpfs/namei.c
@@ -118,7 +118,7 @@ bail:
 	return err;
 }
 
-static int hpfs_create(struct inode *dir, struct dentry *dentry, int mode, struct nameidata *nd)
+static int hpfs_create(struct inode *dir, struct dentry *dentry, int mode, struct vfs_lookup *lookup)
 {
 	const char *name = dentry->d_name.name;
 	unsigned len = dentry->d_name.len;
--- a/fs/hugetlbfs/inode.c
+++ b/fs/hugetlbfs/inode.c
@@ -437,7 +437,7 @@ static int hugetlbfs_mkdir(struct inode 
 	return retval;
 }
 
-static int hugetlbfs_create(struct inode *dir, struct dentry *dentry, int mode, struct nameidata *nd)
+static int hugetlbfs_create(struct inode *dir, struct dentry *dentry, int mode, struct vfs_lookup *lookup)
 {
 	return hugetlbfs_mknod(dir, dentry, mode | S_IFREG, 0);
 }
--- a/fs/inotify_user.c
+++ b/fs/inotify_user.c
@@ -349,7 +349,7 @@ static int find_inode(const char __user 
 	if (error)
 		return error;
 	/* you can only watch an inode if you have read permissions on it */
-	error = vfs_permission(nd.lookup, MAY_READ);
+	error = vfs_permission(&nd->lookup, MAY_READ);
 	if (error)
 		path_release(nd);
 	return error;
--- a/fs/jffs2/dir.c
+++ b/fs/jffs2/dir.c
@@ -22,7 +22,7 @@
 static int jffs2_readdir (struct file *, void *, filldir_t);
 
 static int jffs2_create (struct inode *,struct dentry *,int,
-			 struct nameidata *);
+			 struct vfs_lookup *);
 static struct dentry *jffs2_lookup (struct inode *,struct dentry *,
 				    struct nameidata *);
 static int jffs2_link (struct dentry *,struct inode *,struct dentry *);
@@ -176,7 +176,7 @@ static int jffs2_readdir(struct file *fi
 
 
 static int jffs2_create(struct inode *dir_i, struct dentry *dentry, int mode,
-			struct nameidata *nd)
+			struct vfs_lookup *lookup)
 {
 	struct jffs2_raw_inode *ri;
 	struct jffs2_inode_info *f, *dir_f;
--- a/fs/jfs/namei.c
+++ b/fs/jfs/namei.c
@@ -71,7 +71,7 @@ static inline void free_ea_wmap(struct i
  *
  */
 static int jfs_create(struct inode *dip, struct dentry *dentry, int mode,
-		struct nameidata *nd)
+		struct vfs_lookup *lookup)
 {
 	int rc = 0;
 	tid_t tid;		/* transaction id */
--- a/fs/minix/namei.c
+++ b/fs/minix/namei.c
@@ -83,7 +83,7 @@ static int minix_mknod(struct inode * di
 }
 
 static int minix_create(struct inode * dir, struct dentry *dentry, int mode,
-		struct nameidata *nd)
+		struct vfs_lookup *lookup)
 {
 	return minix_mknod(dir, dentry, mode, 0);
 }
--- a/fs/msdos/namei.c
+++ b/fs/msdos/namei.c
@@ -277,7 +277,7 @@ static int msdos_add_entry(struct inode 
 
 /***** Create a file */
 static int msdos_create(struct inode *dir, struct dentry *dentry, int mode,
-			struct nameidata *nd)
+			struct vfs_lookup *lookup)
 {
 	struct super_block *sb = dir->i_sb;
 	struct inode *inode = NULL;
--- a/fs/namei.c
+++ b/fs/namei.c
@@ -369,12 +369,14 @@ void path_release_on_umount(struct namei
  * release_open_intent - free up open intent resources
  * @nd: pointer to nameidata
  */
-void release_open_intent(struct nameidata *nd)
+void release_open_intent(struct open_intent *intent)
 {
-	if (nd->lookup.intent.open.file->f_path.dentry == NULL)
-		put_filp(nd->lookup.intent.open.file);
+	struct file *file = intent->file;
+
+	if (file->f_path.dentry == NULL)
+		put_filp(file);
 	else
-		fput(nd->lookup.intent.open.file);
+		fput(file);
 }
 
 static inline struct dentry *
@@ -1223,7 +1225,7 @@ static int __path_lookup_intent_open(int
 			path_release(nd);
 		}
 	} else if (err != 0)
-		release_open_intent(nd);
+		release_open_intent(&nd->lookup.intent.open);
 	return err;
 }
 
@@ -1542,9 +1544,9 @@ void unlock_rename(struct dentry *p1, st
 }
 
 int vfs_create(struct inode *dir, struct dentry *dentry, int mode,
-		struct nameidata *nd)
+	       struct vfs_lookup *lookup)
 {
-	int error = may_create(dir, dentry, &nd->lookup);
+	int error = may_create(dir, dentry, lookup);
 
 	if (error)
 		return error;
@@ -1557,7 +1559,7 @@ int vfs_create(struct inode *dir, struct
 	if (error)
 		return error;
 	DQUOT_INIT(dir);
-	error = dir->i_op->create(dir, dentry, mode, nd);
+	error = dir->i_op->create(dir, dentry, mode, lookup);
 	if (!error)
 		fsnotify_create(dir, dentry);
 	return error;
@@ -1650,7 +1652,7 @@ static int open_namei_create(struct name
 
 	if (!IS_POSIXACL(dir->d_inode))
 		mode &= ~current->fs->umask;
-	error = vfs_create(dir->d_inode, path->dentry, mode, nd);
+	error = vfs_create(dir->d_inode, path->dentry, mode, &nd->lookup);
 	mutex_unlock(&dir->d_inode->i_mutex);
 	dput(nd->lookup.path.dentry);
 	nd->lookup.path.dentry = path->dentry;
@@ -1783,7 +1785,7 @@ exit_dput:
 	dput_path(&path, nd);
 exit:
 	if (!IS_ERR(nd->lookup.intent.open.file))
-		release_open_intent(nd);
+		release_open_intent(&nd->lookup.intent.open);
 	path_release(nd);
 	return error;
 
@@ -1811,7 +1813,7 @@ do_link:
 		 * me so stupid? Anathema to whoever designed this non-sense
 		 * with "intent.open".
 		 */
-		release_open_intent(nd);
+		release_open_intent(&nd->lookup.intent.open);
 		return error;
 	}
 	nd->lookup.flags &= ~LOOKUP_PARENT;
@@ -1935,7 +1937,8 @@ asmlinkage long sys_mknodat(int dfd, con
 	if (!IS_ERR(dentry)) {
 		switch (mode & S_IFMT) {
 		case 0: case S_IFREG:
-			error = vfs_create(nd.lookup.path.dentry->d_inode,dentry,mode,&nd);
+			error = vfs_create(nd.lookup.path.dentry->d_inode,
+					   dentry, mode, &nd.lookup);
 			break;
 		case S_IFCHR: case S_IFBLK:
 			error = vfs_mknod(nd.lookup.path.dentry->d_inode,dentry,mode,
--- a/fs/ncpfs/dir.c
+++ b/fs/ncpfs/dir.c
@@ -33,7 +33,7 @@ static void ncp_do_readdir(struct file *
 
 static int ncp_readdir(struct file *, void *, filldir_t);
 
-static int ncp_create(struct inode *, struct dentry *, int, struct nameidata *);
+static int ncp_create(struct inode *, struct dentry *, int, struct vfs_lookup *);
 static struct dentry *ncp_lookup(struct inode *, struct dentry *, struct nameidata *);
 static int ncp_unlink(struct inode *, struct dentry *);
 static int ncp_mkdir(struct inode *, struct dentry *, int);
@@ -940,7 +940,7 @@ out:
 }
 
 static int ncp_create(struct inode *dir, struct dentry *dentry, int mode,
-		struct nameidata *nd)
+		struct vfs_lookup *lookup)
 {
 	return ncp_create_new(dir, dentry, mode, 0, 0);
 }
--- a/fs/nfs/dir.c
+++ b/fs/nfs/dir.c
@@ -44,7 +44,7 @@
 static int nfs_opendir(struct inode *, struct file *);
 static int nfs_readdir(struct file *, void *, filldir_t);
 static struct dentry *nfs_lookup(struct inode *, struct dentry *, struct nameidata *);
-static int nfs_create(struct inode *, struct dentry *, int, struct nameidata *);
+static int nfs_create(struct inode *, struct dentry *, int, struct vfs_lookup *);
 static int nfs_mkdir(struct inode *, struct dentry *, int);
 static int nfs_rmdir(struct inode *, struct dentry *);
 static int nfs_unlink(struct inode *, struct dentry *);
@@ -687,11 +687,11 @@ static inline void nfs_renew_times(struc
  * component of the path.
  * We check for this using LOOKUP_CONTINUE and LOOKUP_PARENT.
  */
-static inline unsigned int nfs_lookup_check_intent(struct nameidata *nd, unsigned int mask)
+static inline unsigned int nfs_lookup_check_intent(struct vfs_lookup *lookup, unsigned int mask)
 {
-	if (nd->lookup.flags & (LOOKUP_CONTINUE|LOOKUP_PARENT))
+	if (lookup->flags & (LOOKUP_CONTINUE|LOOKUP_PARENT))
 		return 0;
-	return nd->lookup.flags & mask;
+	return lookup->flags & mask;
 }
 
 /*
@@ -712,7 +712,7 @@ int nfs_lookup_verify_inode(struct inode
 		if (nd->lookup.flags & LOOKUP_REVAL)
 			goto out_force;
 		/* This is an open(2) */
-		if (nfs_lookup_check_intent(nd, LOOKUP_OPEN) != 0 &&
+		if (nfs_lookup_check_intent(&nd->lookup, LOOKUP_OPEN) != 0 &&
 				!(server->flags & NFS_MOUNT_NOCTO) &&
 				(S_ISREG(inode->i_mode) ||
 				 S_ISDIR(inode->i_mode)))
@@ -735,7 +735,7 @@ int nfs_neg_need_reval(struct inode *dir
 		       struct nameidata *nd)
 {
 	/* Don't revalidate a negative dentry if we're creating a new file */
-	if (nd != NULL && nfs_lookup_check_intent(nd, LOOKUP_CREATE) != 0)
+	if (nd != NULL && nfs_lookup_check_intent(&nd->lookup, LOOKUP_CREATE) != 0)
 		return 0;
 	return !nfs_check_verifier(dir, dentry);
 }
@@ -888,13 +888,13 @@ struct dentry_operations nfs_dentry_oper
  * an O_EXCL create using this path component.
  */
 static inline
-int nfs_is_exclusive_create(struct inode *dir, struct nameidata *nd)
+int nfs_is_exclusive_create(struct inode *dir, struct vfs_lookup *lookup)
 {
 	if (NFS_PROTO(dir)->version == 2)
 		return 0;
-	if (nd == NULL || nfs_lookup_check_intent(nd, LOOKUP_CREATE) == 0)
+	if (!lookup || nfs_lookup_check_intent(lookup, LOOKUP_CREATE) == 0)
 		return 0;
-	return (nd->lookup.intent.open.flags & O_EXCL) != 0;
+	return (lookup->intent.open.flags & O_EXCL) != 0;
 }
 
 static inline int nfs_reval_fsid(struct inode *dir, const struct nfs_fattr *fattr)
@@ -932,7 +932,7 @@ static struct dentry *nfs_lookup(struct 
 	 * If we're doing an exclusive create, optimize away the lookup
 	 * but don't hash the dentry.
 	 */
-	if (nfs_is_exclusive_create(dir, nd)) {
+	if (nfs_is_exclusive_create(dir, &nd->lookup)) {
 		d_instantiate(dentry, NULL);
 		res = NULL;
 		goto out_unlock;
@@ -991,7 +991,7 @@ struct dentry_operations nfs4_dentry_ope
  */
 static int is_atomic_open(struct inode *dir, struct nameidata *nd)
 {
-	if (nd == NULL || nfs_lookup_check_intent(nd, LOOKUP_OPEN) == 0)
+	if (nd == NULL || nfs_lookup_check_intent(&nd->lookup, LOOKUP_OPEN) == 0)
 		return 0;
 	/* NFS does not (yet) have a stateful open for directories */
 	if (nd->lookup.flags & LOOKUP_DIRECTORY)
@@ -1231,7 +1231,7 @@ int nfs_instantiate(struct dentry *dentr
  * reply path made it appear to have failed.
  */
 static int nfs_create(struct inode *dir, struct dentry *dentry, int mode,
-		struct nameidata *nd)
+		struct vfs_lookup *lookup)
 {
 	struct iattr attr;
 	int error;
@@ -1243,12 +1243,12 @@ static int nfs_create(struct inode *dir,
 	attr.ia_mode = mode;
 	attr.ia_valid = ATTR_MODE;
 
-	if ((nd->lookup.flags & LOOKUP_CREATE) != 0)
-		open_flags = nd->lookup.intent.open.flags;
+	if ((lookup->flags & LOOKUP_CREATE) != 0)
+		open_flags = lookup->intent.open.flags;
 
 	lock_kernel();
 	nfs_begin_data_update(dir);
-	error = NFS_PROTO(dir)->create(dir, dentry, &attr, open_flags, nd);
+	error = NFS_PROTO(dir)->create(dir, dentry, &attr, open_flags, lookup);
 	nfs_end_data_update(dir);
 	if (error != 0)
 		goto out_err;
--- a/fs/nfs/nfs3proc.c
+++ b/fs/nfs/nfs3proc.c
@@ -258,7 +258,7 @@ static int nfs3_proc_readlink(struct ino
  */
 static int
 nfs3_proc_create(struct inode *dir, struct dentry *dentry, struct iattr *sattr,
-		 int flags, struct nameidata *nd)
+		 int flags, struct vfs_lookup *lookup)
 {
 	struct nfs_fh		fhandle;
 	struct nfs_fattr	fattr;
--- a/fs/nfs/nfs4proc.c
+++ b/fs/nfs/nfs4proc.c
@@ -1376,20 +1376,20 @@ out:
 	return status;
 }
 
-static int nfs4_intent_set_file(struct nameidata *nd, struct path *path, struct nfs4_state *state)
+static int nfs4_intent_set_file(struct vfs_lookup *lookup, struct path *path, struct nfs4_state *state)
 {
 	struct file *filp;
 	int ret;
 
 	/* If the open_intent is for execute, we have an extra check to make */
-	if (nd->lookup.intent.open.flags & FMODE_EXEC) {
+	if (lookup->intent.open.flags & FMODE_EXEC) {
 		ret = _nfs4_do_access(state->inode,
 				state->owner->so_cred,
-				nd->lookup.intent.open.flags);
+				lookup->intent.open.flags);
 		if (ret < 0)
 			goto out_close;
 	}
-	filp = lookup_instantiate_filp(nd, path->dentry, NULL);
+	filp = lookup_instantiate_filp(lookup, path->dentry, NULL);
 	if (!IS_ERR(filp)) {
 		struct nfs_open_context *ctx;
 		ctx = (struct nfs_open_context *)filp->private_data;
@@ -1398,7 +1398,7 @@ static int nfs4_intent_set_file(struct n
 	}
 	ret = PTR_ERR(filp);
 out_close:
-	nfs4_close_state(path, state, nd->lookup.intent.open.flags);
+	nfs4_close_state(path, state, lookup->intent.open.flags);
 	return ret;
 }
 
@@ -1437,7 +1437,7 @@ nfs4_atomic_open(struct inode *dir, stru
 	res = d_add_unique(dentry, igrab(state->inode));
 	if (res != NULL)
 		dentry = res;
-	nfs4_intent_set_file(nd, &path, state);
+	nfs4_intent_set_file(&nd->lookup, &path, state);
 	return res;
 }
 
@@ -1463,14 +1463,14 @@ nfs4_open_revalidate(struct inode *dir, 
 			case -EDQUOT:
 			case -ENOSPC:
 			case -EROFS:
-				lookup_instantiate_filp(nd, (struct dentry *)state, NULL);
+				lookup_instantiate_filp(&nd->lookup, (struct dentry *)state, NULL);
 				return 1;
 			default:
 				goto out_drop;
 		}
 	}
 	if (state->inode == dentry->d_inode) {
-		nfs4_intent_set_file(nd, &path, state);
+		nfs4_intent_set_file(&nd->lookup, &path, state);
 		return 1;
 	}
 	nfs4_close_state(&path, state, openflags);
@@ -1885,10 +1885,10 @@ static int nfs4_proc_readlink(struct ino
 
 static int
 nfs4_proc_create(struct inode *dir, struct dentry *dentry, struct iattr *sattr,
-                 int flags, struct nameidata *nd)
+                 int flags, struct vfs_lookup *lookup)
 {
 	struct path path = {
-		.mnt = nd->lookup.path.mnt,
+		.mnt = lookup->path.mnt,
 		.dentry = dentry,
 	};
 	struct nfs4_state *state;
@@ -1914,8 +1914,8 @@ nfs4_proc_create(struct inode *dir, stru
 			nfs_setattr_update_inode(state->inode, sattr);
 		nfs_post_op_update_inode(state->inode, &fattr);
 	}
-	if (status == 0 && (nd->lookup.flags & LOOKUP_OPEN) != 0)
-		status = nfs4_intent_set_file(nd, &path, state);
+	if (status == 0 && (lookup->flags & LOOKUP_OPEN) != 0)
+		status = nfs4_intent_set_file(lookup, &path, state);
 	else
 		nfs4_close_state(&path, state, flags);
 out:
--- a/fs/nfs/proc.c
+++ b/fs/nfs/proc.c
@@ -187,7 +187,7 @@ static int nfs_proc_readlink(struct inod
 
 static int
 nfs_proc_create(struct inode *dir, struct dentry *dentry, struct iattr *sattr,
-		int flags, struct nameidata *nd)
+		int flags, struct vfs_lookup *lookup)
 {
 	struct nfs_fh		fhandle;
 	struct nfs_fattr	fattr;
--- a/fs/ocfs2/dlm/dlmfs.c
+++ b/fs/ocfs2/dlm/dlmfs.c
@@ -459,7 +459,7 @@ bail:
 static int dlmfs_create(struct inode *dir,
 			struct dentry *dentry,
 			int mode,
-			struct nameidata *nd)
+			struct vfs_lookup *lookup)
 {
 	int status = 0;
 	struct inode *inode;
--- a/fs/ocfs2/namei.c
+++ b/fs/ocfs2/namei.c
@@ -626,7 +626,7 @@ static int ocfs2_mkdir(struct inode *dir
 static int ocfs2_create(struct inode *dir,
 			struct dentry *dentry,
 			int mode,
-			struct nameidata *nd)
+			struct vfs_lookup *lookup)
 {
 	int ret;
 
--- a/fs/open.c
+++ b/fs/open.c
@@ -831,7 +831,7 @@ EXPORT_SYMBOL(filp_open);
 
 /**
  * lookup_instantiate_filp - instantiates the open intent filp
- * @nd: pointer to nameidata
+ * @lookup: pointer to vfs_lookup
  * @dentry: pointer to dentry
  * @open: open callback
  *
@@ -848,22 +848,24 @@ EXPORT_SYMBOL(filp_open);
  * If the open callback is set to NULL, then the standard f_op->open()
  * filesystem callback is substituted.
  */
-struct file *lookup_instantiate_filp(struct nameidata *nd, struct dentry *dentry,
+struct file *lookup_instantiate_filp(struct vfs_lookup *lookup,
+		struct dentry *dentry,
 		int (*open)(struct inode *, struct file *))
 {
-	if (IS_ERR(nd->lookup.intent.open.file))
+	if (IS_ERR(lookup->intent.open.file))
 		goto out;
 	if (IS_ERR(dentry))
 		goto out_err;
-	nd->lookup.intent.open.file = __dentry_open(dget(dentry), mntget(nd->lookup.path.mnt),
-					     nd->lookup.intent.open.flags - 1,
-					     nd->lookup.intent.open.file,
-					     open);
+	lookup->intent.open.file = __dentry_open(dget(dentry),
+						 mntget(lookup->path.mnt),
+						 lookup->intent.open.flags - 1,
+						 lookup->intent.open.file,
+						 open);
 out:
-	return nd->lookup.intent.open.file;
+	return lookup->intent.open.file;
 out_err:
-	release_open_intent(nd);
-	nd->lookup.intent.open.file = (struct file *)dentry;
+	release_open_intent(&lookup->intent.open);
+	lookup->intent.open.file = (struct file *)dentry;
 	goto out;
 }
 EXPORT_SYMBOL_GPL(lookup_instantiate_filp);
--- a/fs/qnx4/namei.c
+++ b/fs/qnx4/namei.c
@@ -142,7 +142,7 @@ out:
 
 #ifdef CONFIG_QNX4FS_RW
 int qnx4_create(struct inode *dir, struct dentry *dentry, int mode,
-		struct nameidata *nd)
+		struct vfs_lookup *lookup)
 {
 	QNX4DEBUG(("qnx4: qnx4_create\n"));
 	if (dir == NULL) {
--- a/fs/ramfs/inode.c
+++ b/fs/ramfs/inode.c
@@ -117,7 +117,7 @@ static int ramfs_mkdir(struct inode * di
 	return retval;
 }
 
-static int ramfs_create(struct inode *dir, struct dentry *dentry, int mode, struct nameidata *nd)
+static int ramfs_create(struct inode *dir, struct dentry *dentry, int mode, struct vfs_lookup *lookup)
 {
 	return ramfs_mknod(dir, dentry, mode | S_IFREG, 0);
 }
--- a/fs/reiserfs/namei.c
+++ b/fs/reiserfs/namei.c
@@ -600,7 +600,7 @@ static int new_inode_init(struct inode *
 }
 
 static int reiserfs_create(struct inode *dir, struct dentry *dentry, int mode,
-			   struct nameidata *nd)
+			   struct vfs_lookup *lookup)
 {
 	int retval;
 	struct inode *inode;
--- a/fs/smbfs/dir.c
+++ b/fs/smbfs/dir.c
@@ -26,7 +26,7 @@ static int smb_readdir(struct file *, vo
 static int smb_dir_open(struct inode *, struct file *);
 
 static struct dentry *smb_lookup(struct inode *, struct dentry *, struct nameidata *);
-static int smb_create(struct inode *, struct dentry *, int, struct nameidata *);
+static int smb_create(struct inode *, struct dentry *, int, struct vfs_lookup *);
 static int smb_mkdir(struct inode *, struct dentry *, int);
 static int smb_rmdir(struct inode *, struct dentry *);
 static int smb_unlink(struct inode *, struct dentry *);
@@ -520,7 +520,7 @@ out_close:
 /* N.B. How should the mode argument be used? */
 static int
 smb_create(struct inode *dir, struct dentry *dentry, int mode,
-		struct nameidata *nd)
+		struct vfs_lookup *lookup)
 {
 	struct smb_sb_info *server = server_from_dentry(dentry);
 	__u16 fileid;
--- a/fs/sysv/namei.c
+++ b/fs/sysv/namei.c
@@ -80,7 +80,7 @@ static int sysv_mknod(struct inode * dir
 	return err;
 }
 
-static int sysv_create(struct inode * dir, struct dentry * dentry, int mode, struct nameidata *nd)
+static int sysv_create(struct inode * dir, struct dentry * dentry, int mode, struct vfs_lookup *lookup)
 {
 	return sysv_mknod(dir, dentry, mode, 0);
 }
--- a/fs/udf/namei.c
+++ b/fs/udf/namei.c
@@ -572,7 +572,7 @@ static int udf_delete_entry(struct inode
 }
 
 static int udf_create(struct inode *dir, struct dentry *dentry, int mode,
-		      struct nameidata *nd)
+		      struct vfs_lookup *lookup)
 {
 	struct udf_fileident_bh fibh;
 	struct inode *inode;
--- a/fs/ufs/namei.c
+++ b/fs/ufs/namei.c
@@ -77,7 +77,7 @@ static struct dentry *ufs_lookup(struct 
  * with d_instantiate(). 
  */
 static int ufs_create (struct inode * dir, struct dentry * dentry, int mode,
-		struct nameidata *nd)
+		struct vfs_lookup *lookup)
 {
 	struct inode *inode;
 	int err;
--- a/fs/vfat/namei.c
+++ b/fs/vfat/namei.c
@@ -731,7 +731,7 @@ error:
 }
 
 static int vfat_create(struct inode *dir, struct dentry *dentry, int mode,
-		       struct nameidata *nd)
+		       struct vfs_lookup *lookup)
 {
 	struct super_block *sb = dir->i_sb;
 	struct inode *inode;
--- a/fs/xfs/linux-2.6/xfs_iops.c
+++ b/fs/xfs/linux-2.6/xfs_iops.c
@@ -367,7 +367,7 @@ xfs_vn_create(
 	struct inode	*dir,
 	struct dentry	*dentry,
 	int		mode,
-	struct nameidata *nd)
+	struct vfs_lookup *lookup)
 {
 	return xfs_vn_mknod(dir, dentry, mode, 0);
 }
--- a/include/linux/fs.h
+++ b/include/linux/fs.h
@@ -1009,7 +1009,7 @@ extern void unlock_super(struct super_bl
  * VFS helper functions..
  */
 extern int vfs_permission(struct vfs_lookup *, int);
-extern int vfs_create(struct inode *, struct dentry *, int, struct nameidata *);
+extern int vfs_create(struct inode *, struct dentry *, int, struct vfs_lookup *);
 extern int vfs_mkdir(struct inode *, struct dentry *, int);
 extern int vfs_mknod(struct inode *, struct dentry *, int, dev_t);
 extern int vfs_symlink(struct inode *, struct dentry *, const char *, int);
@@ -1133,7 +1133,7 @@ struct file_operations {
 };
 
 struct inode_operations {
-	int (*create) (struct inode *,struct dentry *,int, struct nameidata *);
+	int (*create) (struct inode *,struct dentry *,int, struct vfs_lookup *);
 	struct dentry * (*lookup) (struct inode *,struct dentry *, struct nameidata *);
 	int (*link) (struct dentry *,struct inode *,struct dentry *);
 	int (*unlink) (struct inode *,struct dentry *);
--- a/include/linux/namei.h
+++ b/include/linux/namei.h
@@ -79,10 +79,11 @@ extern void path_release_on_umount(struc
 
 extern int __user_path_lookup_open(const char __user *, unsigned lookup_flags, struct nameidata *nd, int open_flags);
 extern int path_lookup_open(int dfd, const char *name, unsigned lookup_flags, struct nameidata *, int open_flags);
-extern struct file *lookup_instantiate_filp(struct nameidata *nd, struct dentry *dentry,
+extern struct file *lookup_instantiate_filp(struct vfs_lookup *lookup,
+		struct dentry *dentry,
 		int (*open)(struct inode *, struct file *));
 extern struct file *nameidata_to_filp(struct nameidata *nd, int flags);
-extern void release_open_intent(struct nameidata *);
+extern void release_open_intent(struct open_intent *);
 
 extern struct dentry * lookup_one_len(const char *, struct dentry *, int);
 extern struct dentry *lookup_one_len_kern(const char *, struct dentry *, int);
--- a/include/linux/nfs_xdr.h
+++ b/include/linux/nfs_xdr.h
@@ -789,7 +789,7 @@ struct nfs_rpc_ops {
 	int	(*readlink)(struct inode *, struct page *, unsigned int,
 			    unsigned int);
 	int	(*create)  (struct inode *, struct dentry *,
-			    struct iattr *, int, struct nameidata *);
+			    struct iattr *, int, struct vfs_lookup *);
 	int	(*remove)  (struct inode *, struct qstr *);
 	void	(*unlink_setup)  (struct rpc_message *, struct inode *dir);
 	int	(*unlink_done) (struct rpc_task *, struct inode *);
--- a/include/linux/qnx4_fs.h
+++ b/include/linux/qnx4_fs.h
@@ -122,7 +122,7 @@ extern const struct file_operations qnx4
 extern const struct file_operations qnx4_dir_operations;
 extern int qnx4_is_free(struct super_block *sb, long block);
 extern int qnx4_set_bitmap(struct super_block *sb, long block, int busy);
-extern int qnx4_create(struct inode *inode, struct dentry *dentry, int mode, struct nameidata *nd);
+extern int qnx4_create(struct inode *inode, struct dentry *dentry, int mode, struct vfs_lookup *lookup);
 extern void qnx4_truncate(struct inode *inode);
 extern void qnx4_free_inode(struct inode *inode);
 extern int qnx4_unlink(struct inode *dir, struct dentry *dentry);
--- a/ipc/mqueue.c
+++ b/ipc/mqueue.c
@@ -266,7 +266,7 @@ static void mqueue_delete_inode(struct i
 }
 
 static int mqueue_create(struct inode *dir, struct dentry *dentry,
-				int mode, struct nameidata *nd)
+				int mode, struct vfs_lookup *lookup)
 {
 	struct inode *inode;
 	struct mq_attr *attr = dentry->d_fsdata;
--- a/mm/shmem.c
+++ b/mm/shmem.c
@@ -1749,7 +1749,7 @@ static int shmem_mkdir(struct inode *dir
 }
 
 static int shmem_create(struct inode *dir, struct dentry *dentry, int mode,
-		struct nameidata *nd)
+		struct vfs_lookup *lookup)
 {
 	return shmem_mknod(dir, dentry, mode | S_IFREG, 0);
 }


  parent reply	other threads:[~2007-08-08 17:23 UTC|newest]

Thread overview: 35+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-08-08 17:16 [RFC 00/10] Split up struct nameidata (take 3) Andreas Gruenbacher
2007-08-08 17:16 ` [RFC 01/10] Split up struct nameidata Andreas Gruenbacher
2007-08-08 19:32   ` Christoph Hellwig
2007-08-09  8:26     ` atomic open (was Re: [RFC 01/10] Split up struct nameidata) Miklos Szeredi
2007-08-10 14:42     ` [RFC 01/10] Split up struct nameidata Andreas Gruenbacher
2007-08-10 14:22       ` [patch 1/4] Introduce pathput Andreas Gruenbacher
2007-08-29 19:07         ` Christoph Hellwig
2007-09-14 16:36           ` Christoph Hellwig
2007-08-10 14:22       ` [patch 2/4] Use pathput in a few more places Andreas Gruenbacher
2007-08-29 19:08         ` Christoph Hellwig
2007-08-30 15:01           ` [FIX] mntput called before dput in afs Andreas Gruenbacher
2007-08-30 15:15             ` David Howells
2007-08-30 15:56             ` David Howells
2007-08-10 14:22       ` [patch 3/4] Introduce pathget Andreas Gruenbacher
2007-08-29 19:09         ` Christoph Hellwig
2007-08-10 14:22       ` [patch 4/4] Switch to struct path in fs_struct Andreas Gruenbacher
2007-08-29 19:12         ` Christoph Hellwig
2007-08-08 17:16 ` [RFC 02/10] Switch from nd->{mnt,dentry} to nd->lookup.path.{mnt,dentry} Andreas Gruenbacher
2007-08-08 17:16 ` [RFC 03/10] Pass no unnecessary information to iop->permission Andreas Gruenbacher
2007-08-08 17:16 ` [RFC 04/10] Temporary struct vfs_lookup in file_permission Andreas Gruenbacher
2007-08-08 17:58   ` Josef Sipek
2007-08-08 18:56     ` Andreas Gruenbacher
2007-08-08 19:25   ` Christoph Hellwig
2007-08-08 21:41     ` Andreas Gruenbacher
2007-08-08 23:24       ` Christoph Hellwig
2007-08-09 17:23         ` Andreas Gruenbacher
2007-08-08 17:16 ` [RFC 05/10] Use vfs_permission instead of file_permission in sys_fchdir Andreas Gruenbacher
2007-08-08 19:26   ` Christoph Hellwig
2007-08-08 17:16 ` [RFC 06/10] Use vfs_permission instead of file_permission in do_path_lookup Andreas Gruenbacher
2007-08-08 19:27   ` Christoph Hellwig
2007-08-08 17:16 ` Andreas Gruenbacher [this message]
2007-08-08 17:16 ` [RFC 08/10] Pass no NULL vfs_lookup to vfs_create Andreas Gruenbacher
2007-08-08 19:36   ` Christoph Hellwig
2007-08-08 17:16 ` [RFC 09/10] Pass no unnecessary information to dop->d_revalidate Andreas Gruenbacher
2007-08-08 17:16 ` [RFC 10/10] Pass no unnecessary information to iop->lookup Andreas Gruenbacher

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20070808171644.286775287@suse.de \
    --to=agruen@suse.de \
    --cc=ezk@cs.sunysb.edu \
    --cc=jblunck@suse.de \
    --cc=jjohansen@suse.de \
    --cc=jsipek@cs.sunysb.edu \
    --cc=linux-kernel@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.