Commit 675b5da0 authored by Trond Myklebust's avatar Trond Myklebust

[PATCH] Pass 'nameidata' to ->create()

  - Make the VFS pass the struct nameidata as an optional argument
    to the create inode operation.
  - Patch vfs_create() to take a struct nameidata as an optional
    argument.
parent fc8b427e
...@@ -256,7 +256,7 @@ affs_unlink(struct inode *dir, struct dentry *dentry) ...@@ -256,7 +256,7 @@ affs_unlink(struct inode *dir, struct dentry *dentry)
} }
int int
affs_create(struct inode *dir, struct dentry *dentry, int mode) affs_create(struct inode *dir, struct dentry *dentry, int mode, struct nameidata *nd)
{ {
struct super_block *sb = dir->i_sb; struct super_block *sb = dir->i_sb;
struct inode *inode; struct inode *inode;
......
...@@ -78,7 +78,8 @@ struct file_operations bfs_dir_operations = { ...@@ -78,7 +78,8 @@ struct file_operations bfs_dir_operations = {
extern void dump_imap(const char *, struct super_block *); extern void dump_imap(const char *, struct super_block *);
static int bfs_create(struct inode * dir, struct dentry * dentry, int mode) static int bfs_create(struct inode * dir, struct dentry * dentry, int mode,
struct nameidata *nd)
{ {
int err; int err;
struct inode * inode; struct inode * inode;
......
...@@ -46,7 +46,7 @@ extern void cifs_delete_inode(struct inode *); ...@@ -46,7 +46,7 @@ extern void cifs_delete_inode(struct inode *);
/* Functions related to inodes */ /* Functions related to inodes */
extern struct inode_operations cifs_dir_inode_ops; extern struct inode_operations cifs_dir_inode_ops;
extern int cifs_create(struct inode *, struct dentry *, int); extern int cifs_create(struct inode *, struct dentry *, int, struct nameidata *);
extern struct dentry *cifs_lookup(struct inode *, struct dentry *, struct nameidata *); extern struct dentry *cifs_lookup(struct inode *, struct dentry *, struct nameidata *);
extern int cifs_unlink(struct inode *, struct dentry *); extern int cifs_unlink(struct inode *, struct dentry *);
extern int cifs_hardlink(struct dentry *, struct inode *, struct dentry *); extern int cifs_hardlink(struct dentry *, struct inode *, struct dentry *);
......
...@@ -119,7 +119,8 @@ build_wildcard_path_from_dentry(struct dentry *direntry) ...@@ -119,7 +119,8 @@ build_wildcard_path_from_dentry(struct dentry *direntry)
/* Inode operations in similar order to how they appear in the Linux file fs.h */ /* Inode operations in similar order to how they appear in the Linux file fs.h */
int int
cifs_create(struct inode *inode, struct dentry *direntry, int mode) cifs_create(struct inode *inode, struct dentry *direntry, int mode,
struct nameidata *nd)
{ {
int rc = -ENOENT; int rc = -ENOENT;
int xid; int xid;
......
...@@ -28,7 +28,7 @@ ...@@ -28,7 +28,7 @@
#include <linux/coda_proc.h> #include <linux/coda_proc.h>
/* dir inode-ops */ /* dir inode-ops */
static int coda_create(struct inode *dir, struct dentry *new, int mode); static int coda_create(struct inode *dir, struct dentry *new, int mode, struct nameidata *nd);
static int coda_mknod(struct inode *dir, struct dentry *new, int mode, dev_t rdev); static int coda_mknod(struct inode *dir, struct dentry *new, int mode, dev_t rdev);
static struct dentry *coda_lookup(struct inode *dir, struct dentry *target, struct nameidata *nd); 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, static int coda_link(struct dentry *old_dentry, struct inode *dir_inode,
...@@ -190,7 +190,7 @@ static inline void coda_dir_changed(struct inode *dir, int link) ...@@ -190,7 +190,7 @@ static inline void coda_dir_changed(struct inode *dir, int link)
} }
/* creation routines: create, mknod, mkdir, link, symlink */ /* creation routines: create, mknod, mkdir, link, symlink */
static int coda_create(struct inode *dir, struct dentry *de, int mode) static int coda_create(struct inode *dir, struct dentry *de, int mode, struct nameidata *nd)
{ {
int error=0; int error=0;
const char *name=de->d_name.name; const char *name=de->d_name.name;
......
...@@ -120,7 +120,7 @@ struct dentry *ext2_get_parent(struct dentry *child) ...@@ -120,7 +120,7 @@ struct dentry *ext2_get_parent(struct dentry *child)
* If the create succeeds, we fill in the inode information * If the create succeeds, we fill in the inode information
* with d_instantiate(). * with d_instantiate().
*/ */
static int ext2_create (struct inode * dir, struct dentry * dentry, int mode) static int ext2_create (struct inode * dir, struct dentry * dentry, int mode, struct nameidata *nd)
{ {
struct inode * inode = ext2_new_inode (dir, mode); struct inode * inode = ext2_new_inode (dir, mode);
int err = PTR_ERR(inode); int err = PTR_ERR(inode);
......
...@@ -1623,7 +1623,8 @@ static int ext3_add_nondir(handle_t *handle, ...@@ -1623,7 +1623,8 @@ static int ext3_add_nondir(handle_t *handle,
* If the create succeeds, we fill in the inode information * If the create succeeds, we fill in the inode information
* with d_instantiate(). * with d_instantiate().
*/ */
static int ext3_create (struct inode * dir, struct dentry * dentry, int mode) static int ext3_create (struct inode * dir, struct dentry * dentry, int mode,
struct nameidata *nd)
{ {
handle_t *handle; handle_t *handle;
struct inode * inode; struct inode * inode;
......
...@@ -163,7 +163,7 @@ static inline void mark_inodes_deleted(struct hfs_cat_entry *entry, ...@@ -163,7 +163,7 @@ static inline void mark_inodes_deleted(struct hfs_cat_entry *entry,
* a directory and return a corresponding inode, given the inode for * a directory and return a corresponding inode, given the inode for
* the directory and the name (and its length) of the new file. * the directory and the name (and its length) of the new file.
*/ */
int hfs_create(struct inode * dir, struct dentry *dentry, int mode) int hfs_create(struct inode * dir, struct dentry *dentry, int mode, struct nameidata *nd)
{ {
struct hfs_cat_entry *entry = HFS_I(dir)->entry; struct hfs_cat_entry *entry = HFS_I(dir)->entry;
struct hfs_cat_entry *new; struct hfs_cat_entry *new;
......
...@@ -26,7 +26,7 @@ ...@@ -26,7 +26,7 @@
static struct dentry *dbl_lookup(struct inode *, struct dentry *, struct nameidata *); static struct dentry *dbl_lookup(struct inode *, struct dentry *, struct nameidata *);
static int dbl_readdir(struct file *, void *, filldir_t); static int dbl_readdir(struct file *, void *, filldir_t);
static int dbl_create(struct inode *, struct dentry *, int); static int dbl_create(struct inode *, struct dentry *, int, struct nameidata *);
static int dbl_mkdir(struct inode *, struct dentry *, int); static int dbl_mkdir(struct inode *, struct dentry *, int);
static int dbl_unlink(struct inode *, struct dentry *); static int dbl_unlink(struct inode *, struct dentry *);
static int dbl_rmdir(struct inode *, struct dentry *); static int dbl_rmdir(struct inode *, struct dentry *);
...@@ -272,7 +272,7 @@ static int dbl_readdir(struct file * filp, ...@@ -272,7 +272,7 @@ static int dbl_readdir(struct file * filp,
* the directory and the name (and its length) of the new file. * the directory and the name (and its length) of the new file.
*/ */
static int dbl_create(struct inode * dir, struct dentry *dentry, static int dbl_create(struct inode * dir, struct dentry *dentry,
int mode) int mode, struct nameidata *nd)
{ {
int error; int error;
...@@ -280,7 +280,7 @@ static int dbl_create(struct inode * dir, struct dentry *dentry, ...@@ -280,7 +280,7 @@ static int dbl_create(struct inode * dir, struct dentry *dentry,
if (is_hdr(dir, dentry->d_name.name, dentry->d_name.len)) { if (is_hdr(dir, dentry->d_name.name, dentry->d_name.len)) {
error = -EEXIST; error = -EEXIST;
} else { } else {
error = hfs_create(dir, dentry, mode); error = hfs_create(dir, dentry, mode, nd);
} }
unlock_kernel(); unlock_kernel();
return error; return error;
......
...@@ -285,7 +285,7 @@ void hpfs_decide_conv(struct inode *, unsigned char *, unsigned); ...@@ -285,7 +285,7 @@ void hpfs_decide_conv(struct inode *, unsigned char *, unsigned);
/* namei.c */ /* namei.c */
int hpfs_mkdir(struct inode *, struct dentry *, int); int hpfs_mkdir(struct inode *, struct dentry *, int);
int hpfs_create(struct inode *, struct dentry *, int); int hpfs_create(struct inode *, struct dentry *, int, struct nameidata *);
int hpfs_mknod(struct inode *, struct dentry *, int, dev_t); int hpfs_mknod(struct inode *, struct dentry *, int, dev_t);
int hpfs_symlink(struct inode *, struct dentry *, const char *); int hpfs_symlink(struct inode *, struct dentry *, const char *);
int hpfs_unlink(struct inode *, struct dentry *); int hpfs_unlink(struct inode *, struct dentry *);
......
...@@ -106,7 +106,7 @@ int hpfs_mkdir(struct inode *dir, struct dentry *dentry, int mode) ...@@ -106,7 +106,7 @@ int hpfs_mkdir(struct inode *dir, struct dentry *dentry, int mode)
return -ENOSPC; return -ENOSPC;
} }
int hpfs_create(struct inode *dir, struct dentry *dentry, int mode) int hpfs_create(struct inode *dir, struct dentry *dentry, int mode, struct nameidata *nd)
{ {
const char *name = dentry->d_name.name; const char *name = dentry->d_name.name;
unsigned len = dentry->d_name.len; unsigned len = dentry->d_name.len;
......
...@@ -462,7 +462,7 @@ static int hugetlbfs_mkdir(struct inode *dir, struct dentry *dentry, int mode) ...@@ -462,7 +462,7 @@ static int hugetlbfs_mkdir(struct inode *dir, struct dentry *dentry, int mode)
return retval; return retval;
} }
static int hugetlbfs_create(struct inode *dir, struct dentry *dentry, int mode) static int hugetlbfs_create(struct inode *dir, struct dentry *dentry, int mode, struct nameidata *nd)
{ {
return hugetlbfs_mknod(dir, dentry, mode | S_IFREG, 0); return hugetlbfs_mknod(dir, dentry, mode | S_IFREG, 0);
} }
......
...@@ -412,7 +412,8 @@ int presto_prep(struct dentry *dentry, struct presto_cache **cache, ...@@ -412,7 +412,8 @@ int presto_prep(struct dentry *dentry, struct presto_cache **cache,
return 0; return 0;
} }
static int presto_create(struct inode * dir, struct dentry * dentry, int mode) static int presto_create(struct inode * dir, struct dentry * dentry, int mode,
struct nameidata *nd)
{ {
int error; int error;
struct presto_cache *cache; struct presto_cache *cache;
......
...@@ -598,7 +598,7 @@ int presto_do_create(struct presto_file_set *fset, struct dentry *dir, ...@@ -598,7 +598,7 @@ int presto_do_create(struct presto_file_set *fset, struct dentry *dir,
} }
DQUOT_INIT(dir->d_inode); DQUOT_INIT(dir->d_inode);
lock_kernel(); lock_kernel();
error = iops->create(dir->d_inode, dentry, mode); error = iops->create(dir->d_inode, dentry, mode, NULL);
if (error) { if (error) {
EXIT; EXIT;
goto exit_lock; goto exit_lock;
......
...@@ -1273,7 +1273,8 @@ jffs_symlink(struct inode *dir, struct dentry *dentry, const char *symname) ...@@ -1273,7 +1273,8 @@ jffs_symlink(struct inode *dir, struct dentry *dentry, const char *symname)
* with d_instantiate(). * with d_instantiate().
*/ */
static int static int
jffs_create(struct inode *dir, struct dentry *dentry, int mode) jffs_create(struct inode *dir, struct dentry *dentry, int mode,
struct nameidata *nd)
{ {
struct jffs_raw_inode raw_inode; struct jffs_raw_inode raw_inode;
struct jffs_control *c; struct jffs_control *c;
......
...@@ -32,7 +32,7 @@ typedef dev_t mknod_arg_t; ...@@ -32,7 +32,7 @@ typedef dev_t mknod_arg_t;
static int jffs2_readdir (struct file *, void *, filldir_t); static int jffs2_readdir (struct file *, void *, filldir_t);
static int jffs2_create (struct inode *,struct dentry *,int); static int jffs2_create (struct inode *,struct dentry *,int, struct nameidata *);
static struct dentry *jffs2_lookup (struct inode *,struct dentry *, struct nameidata *); static struct dentry *jffs2_lookup (struct inode *,struct dentry *, struct nameidata *);
static int jffs2_link (struct dentry *,struct inode *,struct dentry *); static int jffs2_link (struct dentry *,struct inode *,struct dentry *);
static int jffs2_unlink (struct inode *,struct dentry *); static int jffs2_unlink (struct inode *,struct dentry *);
...@@ -175,7 +175,8 @@ static int jffs2_readdir(struct file *filp, void *dirent, filldir_t filldir) ...@@ -175,7 +175,8 @@ static int jffs2_readdir(struct file *filp, void *dirent, filldir_t filldir)
/***********************************************************************/ /***********************************************************************/
static int jffs2_create(struct inode *dir_i, struct dentry *dentry, int mode) static int jffs2_create(struct inode *dir_i, struct dentry *dentry, int mode,
struct nameidata *nd)
{ {
struct jffs2_raw_inode *ri; struct jffs2_raw_inode *ri;
struct jffs2_inode_info *f, *dir_f; struct jffs2_inode_info *f, *dir_f;
......
...@@ -54,11 +54,13 @@ s64 commitZeroLink(tid_t, struct inode *); ...@@ -54,11 +54,13 @@ s64 commitZeroLink(tid_t, struct inode *);
* PARAMETER: dip - parent directory vnode * PARAMETER: dip - parent directory vnode
* dentry - dentry of new file * dentry - dentry of new file
* mode - create mode (rwxrwxrwx). * mode - create mode (rwxrwxrwx).
* nd- nd struct
* *
* RETURN: Errors from subroutines * RETURN: Errors from subroutines
* *
*/ */
int jfs_create(struct inode *dip, struct dentry *dentry, int mode) int jfs_create(struct inode *dip, struct dentry *dentry, int mode,
struct nameidata *nd)
{ {
int rc = 0; int rc = 0;
tid_t tid; /* transaction id */ tid_t tid; /* transaction id */
......
...@@ -89,7 +89,8 @@ static int minix_mknod(struct inode * dir, struct dentry *dentry, int mode, dev_ ...@@ -89,7 +89,8 @@ static int minix_mknod(struct inode * dir, struct dentry *dentry, int mode, dev_
return error; return error;
} }
static int minix_create(struct inode * dir, struct dentry *dentry, int mode) static int minix_create(struct inode * dir, struct dentry *dentry, int mode,
struct nameidata *nd)
{ {
return minix_mknod(dir, dentry, mode, 0); return minix_mknod(dir, dentry, mode, 0);
} }
......
...@@ -261,7 +261,8 @@ static int msdos_add_entry(struct inode *dir, const char *name, ...@@ -261,7 +261,8 @@ static int msdos_add_entry(struct inode *dir, const char *name,
*/ */
/***** Create a file */ /***** Create a file */
int msdos_create(struct inode *dir,struct dentry *dentry,int mode) int msdos_create(struct inode *dir,struct dentry *dentry,int mode,
struct nameidata *nd)
{ {
struct super_block *sb = dir->i_sb; struct super_block *sb = dir->i_sb;
struct buffer_head *bh; struct buffer_head *bh;
......
...@@ -1105,7 +1105,8 @@ void unlock_rename(struct dentry *p1, struct dentry *p2) ...@@ -1105,7 +1105,8 @@ void unlock_rename(struct dentry *p1, struct dentry *p2)
} }
} }
int vfs_create(struct inode *dir, struct dentry *dentry, int mode) int vfs_create(struct inode *dir, struct dentry *dentry, int mode,
struct nameidata *nd)
{ {
int error = may_create(dir, dentry); int error = may_create(dir, dentry);
...@@ -1120,7 +1121,7 @@ int vfs_create(struct inode *dir, struct dentry *dentry, int mode) ...@@ -1120,7 +1121,7 @@ int vfs_create(struct inode *dir, struct dentry *dentry, int mode)
if (error) if (error)
return error; return error;
DQUOT_INIT(dir); DQUOT_INIT(dir);
error = dir->i_op->create(dir, dentry, mode); error = dir->i_op->create(dir, dentry, mode, nd);
if (!error) { if (!error) {
inode_dir_notify(dir, DN_CREATE); inode_dir_notify(dir, DN_CREATE);
security_inode_post_create(dir, dentry, mode); security_inode_post_create(dir, dentry, mode);
...@@ -1277,7 +1278,7 @@ int open_namei(const char * pathname, int flag, int mode, struct nameidata *nd) ...@@ -1277,7 +1278,7 @@ int open_namei(const char * pathname, int flag, int mode, struct nameidata *nd)
if (!dentry->d_inode) { if (!dentry->d_inode) {
if (!IS_POSIXACL(dir->d_inode)) if (!IS_POSIXACL(dir->d_inode))
mode &= ~current->fs->umask; mode &= ~current->fs->umask;
error = vfs_create(dir->d_inode, dentry, mode); error = vfs_create(dir->d_inode, dentry, mode, nd);
up(&dir->d_inode->i_sem); up(&dir->d_inode->i_sem);
dput(nd->dentry); dput(nd->dentry);
nd->dentry = dentry; nd->dentry = dentry;
...@@ -1445,7 +1446,7 @@ asmlinkage long sys_mknod(const char __user * filename, int mode, dev_t dev) ...@@ -1445,7 +1446,7 @@ asmlinkage long sys_mknod(const char __user * filename, int mode, dev_t dev)
if (!IS_ERR(dentry)) { if (!IS_ERR(dentry)) {
switch (mode & S_IFMT) { switch (mode & S_IFMT) {
case 0: case S_IFREG: case 0: case S_IFREG:
error = vfs_create(nd.dentry->d_inode,dentry,mode); error = vfs_create(nd.dentry->d_inode,dentry,mode,&nd);
break; break;
case S_IFCHR: case S_IFBLK: case S_IFIFO: case S_IFSOCK: case S_IFCHR: case S_IFBLK: case S_IFIFO: case S_IFSOCK:
error = vfs_mknod(nd.dentry->d_inode,dentry,mode,dev); error = vfs_mknod(nd.dentry->d_inode,dentry,mode,dev);
......
...@@ -34,7 +34,7 @@ static void ncp_do_readdir(struct file *, void *, filldir_t, ...@@ -34,7 +34,7 @@ static void ncp_do_readdir(struct file *, void *, filldir_t,
static int ncp_readdir(struct file *, void *, filldir_t); static int ncp_readdir(struct file *, void *, filldir_t);
static int ncp_create(struct inode *, struct dentry *, int); static int ncp_create(struct inode *, struct dentry *, int, struct nameidata *);
static struct dentry *ncp_lookup(struct inode *, struct dentry *, struct nameidata *); static struct dentry *ncp_lookup(struct inode *, struct dentry *, struct nameidata *);
static int ncp_unlink(struct inode *, struct dentry *); static int ncp_unlink(struct inode *, struct dentry *);
static int ncp_mkdir(struct inode *, struct dentry *, int); static int ncp_mkdir(struct inode *, struct dentry *, int);
...@@ -942,7 +942,8 @@ int ncp_create_new(struct inode *dir, struct dentry *dentry, int mode, ...@@ -942,7 +942,8 @@ int ncp_create_new(struct inode *dir, struct dentry *dentry, int mode,
return error; return error;
} }
static int ncp_create(struct inode *dir, struct dentry *dentry, int mode) static int ncp_create(struct inode *dir, struct dentry *dentry, int mode,
struct nameidata *nd)
{ {
return ncp_create_new(dir, dentry, mode, 0, 0); return ncp_create_new(dir, dentry, mode, 0, 0);
} }
......
...@@ -40,7 +40,7 @@ static int nfs_readdir(struct file *, void *, filldir_t); ...@@ -40,7 +40,7 @@ static int nfs_readdir(struct file *, void *, filldir_t);
static struct dentry *nfs_lookup(struct inode *, struct dentry *, struct nameidata *); static struct dentry *nfs_lookup(struct inode *, struct dentry *, struct nameidata *);
static int nfs_cached_lookup(struct inode *, struct dentry *, static int nfs_cached_lookup(struct inode *, struct dentry *,
struct nfs_fh *, struct nfs_fattr *); struct nfs_fh *, struct nfs_fattr *);
static int nfs_create(struct inode *, struct dentry *, int); static int nfs_create(struct inode *, struct dentry *, int, struct nameidata *);
static int nfs_mkdir(struct inode *, struct dentry *, int); static int nfs_mkdir(struct inode *, struct dentry *, int);
static int nfs_rmdir(struct inode *, struct dentry *); static int nfs_rmdir(struct inode *, struct dentry *);
static int nfs_unlink(struct inode *, struct dentry *); static int nfs_unlink(struct inode *, struct dentry *);
...@@ -787,7 +787,8 @@ static int nfs_instantiate(struct dentry *dentry, struct nfs_fh *fhandle, ...@@ -787,7 +787,8 @@ static int nfs_instantiate(struct dentry *dentry, struct nfs_fh *fhandle,
* that the operation succeeded on the server, but an error in the * that the operation succeeded on the server, but an error in the
* reply path made it appear to have failed. * reply path made it appear to have failed.
*/ */
static int nfs_create(struct inode *dir, struct dentry *dentry, int mode) static int nfs_create(struct inode *dir, struct dentry *dentry, int mode,
struct nameidata *nd)
{ {
struct iattr attr; struct iattr attr;
struct nfs_fattr fattr; struct nfs_fattr fattr;
......
...@@ -924,7 +924,7 @@ nfsd_create(struct svc_rqst *rqstp, struct svc_fh *fhp, ...@@ -924,7 +924,7 @@ nfsd_create(struct svc_rqst *rqstp, struct svc_fh *fhp,
err = nfserr_perm; err = nfserr_perm;
switch (type) { switch (type) {
case S_IFREG: case S_IFREG:
err = vfs_create(dirp, dchild, iap->ia_mode); err = vfs_create(dirp, dchild, iap->ia_mode, NULL);
break; break;
case S_IFDIR: case S_IFDIR:
err = vfs_mkdir(dirp, dchild, iap->ia_mode); err = vfs_mkdir(dirp, dchild, iap->ia_mode);
...@@ -1067,7 +1067,7 @@ nfsd_create_v3(struct svc_rqst *rqstp, struct svc_fh *fhp, ...@@ -1067,7 +1067,7 @@ nfsd_create_v3(struct svc_rqst *rqstp, struct svc_fh *fhp,
goto out; goto out;
} }
err = vfs_create(dirp, dchild, iap->ia_mode); err = vfs_create(dirp, dchild, iap->ia_mode, NULL);
if (err < 0) if (err < 0)
goto out_nfserr; goto out_nfserr;
......
...@@ -59,7 +59,7 @@ static char *alias_names [ALIASES_NNODES]; ...@@ -59,7 +59,7 @@ static char *alias_names [ALIASES_NNODES];
#define NODE2INO(node) (node + OPENPROM_FIRST_INO) #define NODE2INO(node) (node + OPENPROM_FIRST_INO)
#define NODEP2INO(no) (no + OPENPROM_FIRST_INO + last_node) #define NODEP2INO(no) (no + OPENPROM_FIRST_INO + last_node)
static int openpromfs_create (struct inode *, struct dentry *, int); static int openpromfs_create (struct inode *, struct dentry *, int, struct nameidata *);
static int openpromfs_readdir(struct file *, void *, filldir_t); static int openpromfs_readdir(struct file *, void *, filldir_t);
static struct dentry *openpromfs_lookup(struct inode *, struct dentry *dentry, struct nameidata *nd); static struct dentry *openpromfs_lookup(struct inode *, struct dentry *dentry, struct nameidata *nd);
static int openpromfs_unlink (struct inode *, struct dentry *dentry); static int openpromfs_unlink (struct inode *, struct dentry *dentry);
...@@ -854,7 +854,8 @@ static int openpromfs_readdir(struct file * filp, void * dirent, filldir_t filld ...@@ -854,7 +854,8 @@ static int openpromfs_readdir(struct file * filp, void * dirent, filldir_t filld
return 0; return 0;
} }
static int openpromfs_create (struct inode *dir, struct dentry *dentry, int mode) static int openpromfs_create (struct inode *dir, struct dentry *dentry, int mode,
struct nameidata *nd)
{ {
char *p; char *p;
struct inode *inode; struct inode *inode;
......
...@@ -142,7 +142,8 @@ struct dentry * qnx4_lookup(struct inode *dir, struct dentry *dentry, struct nam ...@@ -142,7 +142,8 @@ struct dentry * qnx4_lookup(struct inode *dir, struct dentry *dentry, struct nam
} }
#ifdef CONFIG_QNX4FS_RW #ifdef CONFIG_QNX4FS_RW
int qnx4_create(struct inode *dir, struct dentry *dentry, int mode) int qnx4_create(struct inode *dir, struct dentry *dentry, int mode,
struct nameidata *nd)
{ {
QNX4DEBUG(("qnx4: qnx4_create\n")); QNX4DEBUG(("qnx4: qnx4_create\n"));
if (dir == NULL) { if (dir == NULL) {
......
...@@ -111,7 +111,7 @@ static int ramfs_mkdir(struct inode * dir, struct dentry * dentry, int mode) ...@@ -111,7 +111,7 @@ static int ramfs_mkdir(struct inode * dir, struct dentry * dentry, int mode)
return retval; return retval;
} }
static int ramfs_create(struct inode *dir, struct dentry *dentry, int mode) static int ramfs_create(struct inode *dir, struct dentry *dentry, int mode, struct nameidata *nd)
{ {
return ramfs_mknod(dir, dentry, mode | S_IFREG, 0); return ramfs_mknod(dir, dentry, mode | S_IFREG, 0);
} }
......
...@@ -558,7 +558,8 @@ static int new_inode_init(struct inode *inode, struct inode *dir, int mode) { ...@@ -558,7 +558,8 @@ static int new_inode_init(struct inode *inode, struct inode *dir, int mode) {
return 0 ; return 0 ;
} }
static int reiserfs_create (struct inode * dir, struct dentry *dentry, int mode) static int reiserfs_create (struct inode * dir, struct dentry *dentry, int mode,
struct nameidata *nd)
{ {
int retval; int retval;
struct inode * inode; struct inode * inode;
......
...@@ -25,7 +25,7 @@ static int smb_readdir(struct file *, void *, filldir_t); ...@@ -25,7 +25,7 @@ static int smb_readdir(struct file *, void *, filldir_t);
static int smb_dir_open(struct inode *, struct file *); static int smb_dir_open(struct inode *, struct file *);
static struct dentry *smb_lookup(struct inode *, struct dentry *, struct nameidata *); static struct dentry *smb_lookup(struct inode *, struct dentry *, struct nameidata *);
static int smb_create(struct inode *, struct dentry *, int); static int smb_create(struct inode *, struct dentry *, int, struct nameidata *);
static int smb_mkdir(struct inode *, struct dentry *, int); static int smb_mkdir(struct inode *, struct dentry *, int);
static int smb_rmdir(struct inode *, struct dentry *); static int smb_rmdir(struct inode *, struct dentry *);
static int smb_unlink(struct inode *, struct dentry *); static int smb_unlink(struct inode *, struct dentry *);
...@@ -510,7 +510,8 @@ smb_instantiate(struct dentry *dentry, __u16 fileid, int have_id) ...@@ -510,7 +510,8 @@ smb_instantiate(struct dentry *dentry, __u16 fileid, int have_id)
/* N.B. How should the mode argument be used? */ /* N.B. How should the mode argument be used? */
static int static int
smb_create(struct inode *dir, struct dentry *dentry, int mode) smb_create(struct inode *dir, struct dentry *dentry, int mode,
struct nameidata *nd)
{ {
struct smb_sb_info *server = server_from_dentry(dentry); struct smb_sb_info *server = server_from_dentry(dentry);
__u16 fileid; __u16 fileid;
......
...@@ -96,7 +96,7 @@ static int sysv_mknod(struct inode * dir, struct dentry * dentry, int mode, dev_ ...@@ -96,7 +96,7 @@ static int sysv_mknod(struct inode * dir, struct dentry * dentry, int mode, dev_
return err; return err;
} }
static int sysv_create(struct inode * dir, struct dentry * dentry, int mode) static int sysv_create(struct inode * dir, struct dentry * dentry, int mode, struct nameidata *nd)
{ {
return sysv_mknod(dir, dentry, mode, 0); return sysv_mknod(dir, dentry, mode, 0);
} }
......
...@@ -621,7 +621,7 @@ static int udf_delete_entry(struct inode *inode, struct fileIdentDesc *fi, ...@@ -621,7 +621,7 @@ static int udf_delete_entry(struct inode *inode, struct fileIdentDesc *fi,
return udf_write_fi(inode, cfi, fi, fibh, NULL, NULL); return udf_write_fi(inode, cfi, fi, fibh, NULL, NULL);
} }
static int udf_create(struct inode *dir, struct dentry *dentry, int mode) static int udf_create(struct inode *dir, struct dentry *dentry, int mode, struct nameidata *nd)
{ {
struct udf_fileident_bh fibh; struct udf_fileident_bh fibh;
struct inode *inode; struct inode *inode;
......
...@@ -92,7 +92,8 @@ static struct dentry *ufs_lookup(struct inode * dir, struct dentry *dentry, stru ...@@ -92,7 +92,8 @@ static struct dentry *ufs_lookup(struct inode * dir, struct dentry *dentry, stru
* If the create succeeds, we fill in the inode information * If the create succeeds, we fill in the inode information
* with d_instantiate(). * with d_instantiate().
*/ */
static int ufs_create (struct inode * dir, struct dentry * dentry, int mode) static int ufs_create (struct inode * dir, struct dentry * dentry, int mode,
struct nameidata *nd)
{ {
struct inode * inode = ufs_new_inode(dir, mode); struct inode * inode = ufs_new_inode(dir, mode);
int err = PTR_ERR(inode); int err = PTR_ERR(inode);
......
...@@ -105,7 +105,7 @@ int umsdos_make_emd(struct dentry *parent) ...@@ -105,7 +105,7 @@ int umsdos_make_emd(struct dentry *parent)
Printk(("umsdos_make_emd: creating EMD %s/%s\n", Printk(("umsdos_make_emd: creating EMD %s/%s\n",
parent->d_name.name, demd->d_name.name)); parent->d_name.name, demd->d_name.name));
err = msdos_create(parent->d_inode, demd, S_IFREG | 0777); err = msdos_create(parent->d_inode, demd, S_IFREG | 0777, NULL);
if (err) { if (err) {
printk (KERN_WARNING printk (KERN_WARNING
"umsdos_make_emd: create %s/%s failed, err=%d\n", "umsdos_make_emd: create %s/%s failed, err=%d\n",
......
...@@ -274,7 +274,7 @@ static int umsdos_create_any (struct inode *dir, struct dentry *dentry, ...@@ -274,7 +274,7 @@ static int umsdos_create_any (struct inode *dir, struct dentry *dentry,
if (fake->d_inode) if (fake->d_inode)
goto out_remove_dput; goto out_remove_dput;
ret = msdos_create (dir, fake, S_IFREG | 0777); ret = msdos_create (dir, fake, S_IFREG | 0777, NULL);
if (ret) if (ret)
goto out_remove_dput; goto out_remove_dput;
...@@ -311,7 +311,7 @@ static int umsdos_create_any (struct inode *dir, struct dentry *dentry, ...@@ -311,7 +311,7 @@ static int umsdos_create_any (struct inode *dir, struct dentry *dentry,
* *
* Return the status of the operation. 0 mean success. * Return the status of the operation. 0 mean success.
*/ */
int UMSDOS_create (struct inode *dir, struct dentry *dentry, int mode) int UMSDOS_create (struct inode *dir, struct dentry *dentry, int mode, struct nameidata *nd)
{ {
return umsdos_create_any (dir, dentry, mode, 0, 0); return umsdos_create_any (dir, dentry, mode, 0, 0);
} }
......
...@@ -912,7 +912,8 @@ struct dentry *vfat_lookup(struct inode *dir,struct dentry *dentry, struct namei ...@@ -912,7 +912,8 @@ struct dentry *vfat_lookup(struct inode *dir,struct dentry *dentry, struct namei
return dentry; return dentry;
} }
int vfat_create(struct inode *dir,struct dentry* dentry,int mode) int vfat_create(struct inode *dir,struct dentry* dentry,int mode,
struct nameidata *nd)
{ {
struct super_block *sb = dir->i_sb; struct super_block *sb = dir->i_sb;
struct inode *inode = NULL; struct inode *inode = NULL;
......
...@@ -175,7 +175,8 @@ STATIC int ...@@ -175,7 +175,8 @@ STATIC int
linvfs_create( linvfs_create(
struct inode *dir, struct inode *dir,
struct dentry *dentry, struct dentry *dentry,
int mode) int mode,
struct nameidata *nd)
{ {
return linvfs_mknod(dir, dentry, mode, 0); return linvfs_mknod(dir, dentry, mode, 0);
} }
......
...@@ -43,7 +43,7 @@ extern int affs_init_bitmap(struct super_block *sb); ...@@ -43,7 +43,7 @@ extern int affs_init_bitmap(struct super_block *sb);
extern int affs_hash_name(struct super_block *sb, const u8 *name, unsigned int len); 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 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_unlink(struct inode *dir, struct dentry *dentry);
extern int affs_create(struct inode *dir, struct dentry *dentry, int mode); extern int affs_create(struct inode *dir, struct dentry *dentry, int mode, struct nameidata *);
extern int affs_mkdir(struct inode *dir, struct dentry *dentry, int mode); 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_rmdir(struct inode *dir, struct dentry *dentry);
extern int affs_link(struct dentry *olddentry, struct inode *dir, extern int affs_link(struct dentry *olddentry, struct inode *dir,
......
...@@ -639,7 +639,7 @@ static inline void unlock_super(struct super_block * sb) ...@@ -639,7 +639,7 @@ static inline void unlock_super(struct super_block * sb)
/* /*
* VFS helper functions.. * VFS helper functions..
*/ */
extern int vfs_create(struct inode *, struct dentry *, int); extern int vfs_create(struct inode *, struct dentry *, int, struct nameidata *);
extern int vfs_mkdir(struct inode *, struct dentry *, int); extern int vfs_mkdir(struct inode *, struct dentry *, int);
extern int vfs_mknod(struct inode *, struct dentry *, int, dev_t); extern int vfs_mknod(struct inode *, struct dentry *, int, dev_t);
extern int vfs_symlink(struct inode *, struct dentry *, const char *); extern int vfs_symlink(struct inode *, struct dentry *, const char *);
...@@ -730,7 +730,7 @@ struct file_operations { ...@@ -730,7 +730,7 @@ struct file_operations {
}; };
struct inode_operations { struct inode_operations {
int (*create) (struct inode *,struct dentry *,int); int (*create) (struct inode *,struct dentry *,int, struct nameidata *);
struct dentry * (*lookup) (struct inode *,struct dentry *, struct nameidata *); struct dentry * (*lookup) (struct inode *,struct dentry *, struct nameidata *);
int (*link) (struct dentry *,struct inode *,struct dentry *); int (*link) (struct dentry *,struct inode *,struct dentry *);
int (*unlink) (struct inode *,struct dentry *); int (*unlink) (struct inode *,struct dentry *);
......
...@@ -234,7 +234,7 @@ extern struct hfs_cat_entry *hfs_cat_get(struct hfs_mdb *, ...@@ -234,7 +234,7 @@ extern struct hfs_cat_entry *hfs_cat_get(struct hfs_mdb *,
const struct hfs_cat_key *); const struct hfs_cat_key *);
/* dir.c */ /* dir.c */
extern int hfs_create(struct inode *, struct dentry *, int); extern int hfs_create(struct inode *, struct dentry *, int, struct nameidata *);
extern int hfs_mkdir(struct inode *, struct dentry *, int); extern int hfs_mkdir(struct inode *, struct dentry *, int);
extern int hfs_unlink(struct inode *, struct dentry *); extern int hfs_unlink(struct inode *, struct dentry *);
extern int hfs_rmdir(struct inode *, struct dentry *); extern int hfs_rmdir(struct inode *, struct dentry *);
......
...@@ -308,7 +308,7 @@ extern int fat_scan(struct inode *dir, const char *name, ...@@ -308,7 +308,7 @@ extern int fat_scan(struct inode *dir, const char *name,
/* msdos/namei.c - these are for Umsdos */ /* msdos/namei.c - these are for Umsdos */
extern struct dentry *msdos_lookup(struct inode *dir, struct dentry *, struct nameidata *); extern struct dentry *msdos_lookup(struct inode *dir, struct dentry *, struct nameidata *);
extern int msdos_create(struct inode *dir, struct dentry *dentry, int mode); extern int msdos_create(struct inode *dir, struct dentry *dentry, int mode, struct nameidata *);
extern int msdos_rmdir(struct inode *dir, struct dentry *dentry); extern int msdos_rmdir(struct inode *dir, struct dentry *dentry);
extern int msdos_mkdir(struct inode *dir, struct dentry *dentry, int mode); extern int msdos_mkdir(struct inode *dir, struct dentry *dentry, int mode);
extern int msdos_unlink(struct inode *dir, struct dentry *dentry); extern int msdos_unlink(struct inode *dir, struct dentry *dentry);
...@@ -318,7 +318,7 @@ extern int msdos_fill_super(struct super_block *sb, void *data, int silent); ...@@ -318,7 +318,7 @@ extern int msdos_fill_super(struct super_block *sb, void *data, int silent);
/* vfat/namei.c - these are for dmsdos */ /* vfat/namei.c - these are for dmsdos */
extern struct dentry *vfat_lookup(struct inode *dir, struct dentry *, struct nameidata *); extern struct dentry *vfat_lookup(struct inode *dir, struct dentry *, struct nameidata *);
extern int vfat_create(struct inode *dir, struct dentry *dentry, int mode); extern int vfat_create(struct inode *dir, struct dentry *dentry, int mode, struct nameidata *);
extern int vfat_rmdir(struct inode *dir, struct dentry *dentry); extern int vfat_rmdir(struct inode *dir, struct dentry *dentry);
extern int vfat_unlink(struct inode *dir, struct dentry *dentry); extern int vfat_unlink(struct inode *dir, struct dentry *dentry);
extern int vfat_mkdir(struct inode *dir, struct dentry *dentry, int mode); extern int vfat_mkdir(struct inode *dir, struct dentry *dentry, int mode);
......
...@@ -117,14 +117,13 @@ extern unsigned long qnx4_block_map(struct inode *inode, long iblock); ...@@ -117,14 +117,13 @@ extern unsigned long qnx4_block_map(struct inode *inode, long iblock);
extern struct buffer_head *qnx4_getblk(struct inode *, int, int); extern struct buffer_head *qnx4_getblk(struct inode *, int, int);
extern struct buffer_head *qnx4_bread(struct inode *, int, int); extern struct buffer_head *qnx4_bread(struct inode *, int, int);
extern int qnx4_create(struct inode *dir, struct dentry *dentry, int mode);
extern struct inode_operations qnx4_file_inode_operations; extern struct inode_operations qnx4_file_inode_operations;
extern struct inode_operations qnx4_dir_inode_operations; extern struct inode_operations qnx4_dir_inode_operations;
extern struct file_operations qnx4_file_operations; extern struct file_operations qnx4_file_operations;
extern struct file_operations qnx4_dir_operations; extern struct file_operations qnx4_dir_operations;
extern int qnx4_is_free(struct super_block *sb, long block); 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_set_bitmap(struct super_block *sb, long block, int busy);
extern int qnx4_create(struct inode *inode, struct dentry *dentry, int mode); extern int qnx4_create(struct inode *inode, struct dentry *dentry, int mode, struct nameidata *nd);
extern void qnx4_truncate(struct inode *inode); extern void qnx4_truncate(struct inode *inode);
extern void qnx4_free_inode(struct inode *inode); extern void qnx4_free_inode(struct inode *inode);
extern int qnx4_unlink(struct inode *dir, struct dentry *dentry); extern int qnx4_unlink(struct inode *dir, struct dentry *dentry);
......
...@@ -1398,7 +1398,8 @@ static int shmem_mkdir(struct inode *dir, struct dentry *dentry, int mode) ...@@ -1398,7 +1398,8 @@ static int shmem_mkdir(struct inode *dir, struct dentry *dentry, int mode)
return 0; return 0;
} }
static int shmem_create(struct inode *dir, struct dentry *dentry, int mode) static int shmem_create(struct inode *dir, struct dentry *dentry, int mode,
struct nameidata *nd)
{ {
return shmem_mknod(dir, dentry, mode | S_IFREG, 0); return shmem_mknod(dir, dentry, mode | S_IFREG, 0);
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment