The create, lookup, and permission inode operations are all passed a
full nameidata. This is unfortunate because in nfsd and the mqueue
filesystem, we must instantiate a struct nameidata but cannot provide
all of the same information that a regular lookup would provide. The
unused fields take up space on the stack, but more importantly, it is
not obvious which fields have meaningful values and which don't, and so
things might easily break.
This patch introduces struct nameidata2 with only the fields that make
sense independent of an actual lookup, and uses that struct in those
places where a full nameidat is not needed.
Signed-off-by: Andreas Gruenbacher <agruen@suse.de>
---
fs/9p/vfs_inode.c | 4 +--
fs/adfs/dir.c | 2 -
fs/affs/affs.h | 4 +--
fs/affs/namei.c | 4 +--
fs/afs/dir.c | 12 +++++-----
fs/afs/internal.h | 4 ---
fs/afs/mntpt.c | 4 +--
fs/afs/security.c | 2 -
fs/autofs/root.c | 6 ++---
fs/autofs4/root.c | 8 +++----
fs/bad_inode.c | 6 ++---
fs/befs/linuxvfs.c | 4 +--
fs/bfs/dir.c | 4 +--
fs/cifs/cifsfs.c | 2 -
fs/cifs/cifsfs.h | 4 +--
fs/cifs/dir.c | 6 ++---
fs/coda/dir.c | 14 ++++++------
fs/coda/pioctl.c | 4 +--
fs/configfs/dir.c | 2 -
fs/cramfs/inode.c | 2 -
fs/ecryptfs/dentry.c | 2 -
fs/ecryptfs/inode.c | 10 ++++-----
fs/efs/namei.c | 2 -
fs/exec.c | 8 +++----
fs/ext2/acl.c | 2 -
fs/ext2/acl.h | 2 -
fs/ext2/namei.c | 4 +--
fs/ext3/acl.c | 2 -
fs/ext3/acl.h | 2 -
fs/ext3/namei.c | 4 +--
fs/ext4/acl.c | 2 -
fs/ext4/acl.h | 2 -
fs/ext4/namei.c | 4 +--
fs/freevxfs/vxfs_lookup.c | 4 +--
fs/fuse/dir.c | 10 ++++-----
fs/gfs2/inode.c | 2 -
fs/gfs2/inode.h | 2 -
fs/gfs2/ops_dentry.c | 2 -
fs/gfs2/ops_inode.c | 6 ++---
fs/hfs/dir.c | 4 +--
fs/hfs/inode.c | 4 +--
fs/hfs/sysdep.c | 2 -
fs/hfsplus/dir.c | 4 +--
fs/hfsplus/inode.c | 4 +--
fs/hpfs/dir.c | 2 -
fs/hpfs/hpfs_fn.h | 2 -
fs/hpfs/namei.c | 2 -
fs/hugetlbfs/inode.c | 2 -
fs/inotify_user.c | 2 -
fs/isofs/isofs.h | 2 -
fs/isofs/namei.c | 2 -
fs/jffs2/acl.c | 2 -
fs/jffs2/acl.h | 2 -
fs/jffs2/dir.c | 8 +++----
fs/jfs/acl.c | 2 -
fs/jfs/jfs_acl.h | 2 -
fs/jfs/namei.c | 4 +--
fs/libfs.c | 2 -
fs/minix/namei.c | 4 +--
fs/msdos/namei.c | 4 +--
fs/namei.c | 45 ++++++++++++++++++++---------------------
fs/ncpfs/dir.c | 14 ++++++------
fs/nfs/dir.c | 30 +++++++++++++--------------
fs/nfs/nfs3proc.c | 2 -
fs/nfs/nfs4_fs.h | 4 +--
fs/nfs/nfs4proc.c | 8 +++----
fs/nfs/proc.c | 2 -
fs/ntfs/namei.c | 2 -
fs/ocfs2/dcache.c | 2 -
fs/ocfs2/dlm/dlmfs.c | 2 -
fs/ocfs2/file.c | 2 -
fs/ocfs2/file.h | 2 -
fs/ocfs2/namei.c | 4 +--
fs/open.c | 15 +++++++------
fs/proc/base.c | 22 ++++++++++----------
fs/proc/generic.c | 2 -
fs/proc/proc_sysctl.c | 6 ++---
fs/proc/root.c | 2 -
fs/qnx4/namei.c | 2 -
fs/ramfs/inode.c | 2 -
fs/reiserfs/namei.c | 4 +--
fs/reiserfs/xattr.c | 2 -
fs/romfs/inode.c | 2 -
fs/smbfs/dir.c | 12 +++++-----
fs/smbfs/file.c | 2 -
fs/sysfs/dir.c | 2 -
fs/sysv/namei.c | 4 +--
fs/udf/namei.c | 4 +--
fs/ufs/namei.c | 4 +--
fs/utimes.c | 2 -
fs/vfat/namei.c | 6 ++---
fs/xfs/linux-2.6/xfs_iops.c | 6 ++---
include/linux/coda_linux.h | 2 -
include/linux/dcache.h | 3 +-
include/linux/efs_fs.h | 2 -
include/linux/fs.h | 15 +++++++------
include/linux/namei.h | 37 ++++++++++++++++++++++++---------
include/linux/nfs_fs.h | 2 -
include/linux/nfs_xdr.h | 2 -
include/linux/proc_fs.h | 4 +--
include/linux/qnx4_fs.h | 2 -
include/linux/reiserfs_xattr.h | 2 -
include/linux/security.h | 6 ++---
include/linux/shmem_fs.h | 2 -
ipc/mqueue.c | 2 -
mm/shmem.c | 2 -
mm/shmem_acl.c | 2 -
net/unix/af_unix.c | 2 -
security/apparmor/lsm.c | 2 -
security/dummy.c | 2 -
security/selinux/hooks.c | 2 -
111 files changed, 282 insertions(+), 263 deletions(-)
--- a/fs/9p/vfs_inode.c
+++ b/fs/9p/vfs_inode.c
@@ -456,7 +456,7 @@ v9fs_open_created(struct inode *inode, s
static int
v9fs_vfs_create(struct inode *dir, struct dentry *dentry, int mode,
- struct nameidata *nd)
+ struct nameidata2 *nd)
{
int err;
u32 fid, perm, iounit;
@@ -614,7 +614,7 @@ error:
*/
static struct dentry *v9fs_vfs_lookup(struct inode *dir, struct dentry *dentry,
- struct nameidata *nameidata)
+ struct nameidata2 *nameidata)
{
struct super_block *sb;
struct v9fs_session_info *v9ses;
--- a/fs/adfs/dir.c
+++ b/fs/adfs/dir.c
@@ -268,7 +268,7 @@ struct dentry_operations adfs_dentry_ope
};
static struct dentry *
-adfs_lookup(struct inode *dir, struct dentry *dentry, struct nameidata *nd)
+adfs_lookup(struct inode *dir, struct dentry *dentry, struct nameidata2 *nd)
{
struct inode *inode = NULL;
struct object_info obj;
--- a/fs/affs/affs.h
+++ b/fs/affs/affs.h
@@ -153,9 +153,9 @@ extern void affs_free_bitmap(struct supe
/* namei.c */
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 nameidata2 *);
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 nameidata2 *);
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
@@ -197,7 +197,7 @@ affs_find_entry(struct inode *dir, struc
}
struct dentry *
-affs_lookup(struct inode *dir, struct dentry *dentry, struct nameidata *nd)
+affs_lookup(struct inode *dir, struct dentry *dentry, struct nameidata2 *nd)
{
struct super_block *sb = dir->i_sb;
struct buffer_head *bh;
@@ -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 nameidata2 *nd)
{
struct super_block *sb = dir->i_sb;
struct inode *inode;
--- a/fs/afs/dir.c
+++ b/fs/afs/dir.c
@@ -19,16 +19,16 @@
#include "internal.h"
static struct dentry *afs_lookup(struct inode *dir, struct dentry *dentry,
- struct nameidata *nd);
+ struct nameidata2 *nd);
static int afs_dir_open(struct inode *inode, struct file *file);
static int afs_readdir(struct file *file, void *dirent, filldir_t filldir);
-static int afs_d_revalidate(struct dentry *dentry, struct nameidata *nd);
+static int afs_d_revalidate(struct dentry *dentry, struct nameidata2 *nd);
static int afs_d_delete(struct dentry *dentry);
static void afs_d_release(struct dentry *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 nameidata2 *nd);
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);
@@ -482,7 +482,7 @@ static int afs_do_lookup(struct inode *d
* look up an entry in a directory
*/
static struct dentry *afs_lookup(struct inode *dir, struct dentry *dentry,
- struct nameidata *nd)
+ struct nameidata2 *nd)
{
struct afs_vnode *vnode;
struct afs_fid fid;
@@ -558,7 +558,7 @@ static struct dentry *afs_lookup(struct
* - NOTE! the hit can be a negative hit too, so we can't assume we have an
* inode
*/
-static int afs_d_revalidate(struct dentry *dentry, struct nameidata *nd)
+static int afs_d_revalidate(struct dentry *dentry, struct nameidata2 *nd)
{
struct afs_vnode *vnode, *dir;
struct afs_fid fid;
@@ -904,7 +904,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 nameidata2 *nd)
{
struct afs_file_status status;
struct afs_callback cb;
--- a/fs/afs/internal.h
+++ b/fs/afs/internal.h
@@ -458,8 +458,6 @@ extern bool afs_cm_incoming_call(struct
extern const struct inode_operations afs_dir_inode_operations;
extern const struct file_operations afs_dir_file_operations;
-extern int afs_permission(struct inode *, int, struct nameidata *);
-
/*
* file.c
*/
@@ -578,7 +576,7 @@ extern void afs_clear_permits(struct afs
extern void afs_cache_permit(struct afs_vnode *, struct key *, long);
extern void afs_zap_permits(struct rcu_head *);
extern struct key *afs_request_key(struct afs_cell *);
-extern int afs_permission(struct inode *, int, struct nameidata *);
+extern int afs_permission(struct inode *, int, struct nameidata2 *);
/*
* server.c
--- a/fs/afs/mntpt.c
+++ b/fs/afs/mntpt.c
@@ -23,7 +23,7 @@
static struct dentry *afs_mntpt_lookup(struct inode *dir,
struct dentry *dentry,
- struct nameidata *nd);
+ struct nameidata2 *nd);
static int afs_mntpt_open(struct inode *inode, struct file *file);
static void *afs_mntpt_follow_link(struct dentry *dentry, struct nameidata *nd);
static void afs_mntpt_expiry_timed_out(struct work_struct *work);
@@ -103,7 +103,7 @@ out:
*/
static struct dentry *afs_mntpt_lookup(struct inode *dir,
struct dentry *dentry,
- struct nameidata *nd)
+ struct nameidata2 *nd)
{
_enter("%p,%p{%p{%s},%s}",
dir,
--- a/fs/afs/security.c
+++ b/fs/afs/security.c
@@ -283,7 +283,7 @@ static int afs_check_permit(struct afs_v
* - AFS ACLs are attached to directories only, and a file is controlled by its
* parent directory's ACL
*/
-int afs_permission(struct inode *inode, int mask, struct nameidata *nd)
+int afs_permission(struct inode *inode, int mask, struct nameidata2 *nd)
{
struct afs_vnode *vnode = AFS_FS_I(inode);
afs_access_t access;
--- a/fs/autofs/root.c
+++ b/fs/autofs/root.c
@@ -19,7 +19,7 @@
#include "autofs_i.h"
static int autofs_root_readdir(struct file *,void *,filldir_t);
-static struct dentry *autofs_root_lookup(struct inode *,struct dentry *, struct nameidata *);
+static struct dentry *autofs_root_lookup(struct inode *,struct dentry *, struct nameidata2 *);
static int autofs_root_symlink(struct inode *,struct dentry *,const char *);
static int autofs_root_unlink(struct inode *,struct dentry *);
static int autofs_root_rmdir(struct inode *,struct dentry *);
@@ -145,7 +145,7 @@ static int try_to_fill_dentry(struct den
* yet completely filled in, and revalidate has to delay such
* lookups..
*/
-static int autofs_revalidate(struct dentry * dentry, struct nameidata *nd)
+static int autofs_revalidate(struct dentry * dentry, struct nameidata2 *nd)
{
struct inode * dir;
struct autofs_sb_info *sbi;
@@ -196,7 +196,7 @@ static struct dentry_operations autofs_d
.d_revalidate = autofs_revalidate,
};
-static struct dentry *autofs_root_lookup(struct inode *dir, struct dentry *dentry, struct nameidata *nd)
+static struct dentry *autofs_root_lookup(struct inode *dir, struct dentry *dentry, struct nameidata2 *nd)
{
struct autofs_sb_info *sbi;
int oz_mode;
--- a/fs/autofs4/root.c
+++ b/fs/autofs4/root.c
@@ -28,7 +28,7 @@ static int autofs4_dir_open(struct inode
static int autofs4_dir_close(struct inode *inode, struct file *file);
static int autofs4_dir_readdir(struct file * filp, void * dirent, filldir_t filldir);
static int autofs4_root_readdir(struct file * filp, void * dirent, filldir_t filldir);
-static struct dentry *autofs4_lookup(struct inode *,struct dentry *, struct nameidata *);
+static struct dentry *autofs4_lookup(struct inode *,struct dentry *, struct nameidata2 *);
static void *autofs4_follow_link(struct dentry *, struct nameidata *);
const struct file_operations autofs4_root_operations = {
@@ -122,7 +122,7 @@ static int autofs4_dir_open(struct inode
status = -ENOENT;
if (!d_mountpoint(dentry) && dentry->d_op && dentry->d_op->d_revalidate) {
- struct nameidata nd;
+ struct nameidata2 nd;
int empty, ret;
/* In case there are stale directory dentrys from a failed mount */
@@ -392,7 +392,7 @@ out_error:
* yet completely filled in, and revalidate has to delay such
* lookups..
*/
-static int autofs4_revalidate(struct dentry *dentry, struct nameidata *nd)
+static int autofs4_revalidate(struct dentry *dentry, struct nameidata2 *nd)
{
struct inode *dir = dentry->d_parent->d_inode;
struct autofs_sb_info *sbi = autofs4_sbi(dir->i_sb);
@@ -565,7 +565,7 @@ next:
}
/* Lookups in the root directory */
-static struct dentry *autofs4_lookup(struct inode *dir, struct dentry *dentry, struct nameidata *nd)
+static struct dentry *autofs4_lookup(struct inode *dir, struct dentry *dentry, struct nameidata2 *nd)
{
struct autofs_sb_info *sbi;
struct dentry *unhashed;
--- a/fs/bad_inode.c
+++ b/fs/bad_inode.c
@@ -193,13 +193,13 @@ 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 nameidata2 *nd)
{
return -EIO;
}
static struct dentry *bad_inode_lookup(struct inode *dir,
- struct dentry *dentry, struct nameidata *nd)
+ struct dentry *dentry, struct nameidata2 *nd)
{
return ERR_PTR(-EIO);
}
@@ -251,7 +251,7 @@ static int bad_inode_readlink(struct den
}
static int bad_inode_permission(struct inode *inode, int mask,
- struct nameidata *nd)
+ struct nameidata2 *nd)
{
return -EIO;
}
--- a/fs/befs/linuxvfs.c
+++ b/fs/befs/linuxvfs.c
@@ -34,7 +34,7 @@ static int befs_readdir(struct file *, v
static int befs_get_block(struct inode *, sector_t, struct buffer_head *, int);
static int befs_readpage(struct file *file, struct page *page);
static sector_t befs_bmap(struct address_space *mapping, sector_t block);
-static struct dentry *befs_lookup(struct inode *, struct dentry *, struct nameidata *);
+static struct dentry *befs_lookup(struct inode *, struct dentry *, struct nameidata2 *);
static void befs_read_inode(struct inode *ino);
static struct inode *befs_alloc_inode(struct super_block *sb);
static void befs_destroy_inode(struct inode *inode);
@@ -159,7 +159,7 @@ befs_get_block(struct inode *inode, sect
}
static struct dentry *
-befs_lookup(struct inode *dir, struct dentry *dentry, struct nameidata *nd)
+befs_lookup(struct inode *dir, struct dentry *dentry, struct nameidata2 *nd)
{
struct inode *inode = NULL;
struct super_block *sb = dir->i_sb;
--- 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 nameidata2 *nd)
{
int err;
struct inode * inode;
@@ -127,7 +127,7 @@ static int bfs_create(struct inode * dir
return 0;
}
-static struct dentry * bfs_lookup(struct inode * dir, struct dentry * dentry, struct nameidata *nd)
+static struct dentry * bfs_lookup(struct inode * dir, struct dentry * dentry, struct nameidata2 *nd)
{
struct inode * inode = NULL;
struct buffer_head * bh;
--- a/fs/cifs/cifsfs.c
+++ b/fs/cifs/cifsfs.c
@@ -227,7 +227,7 @@ cifs_statfs(struct dentry *dentry, struc
longer available? */
}
-static int cifs_permission(struct inode * inode, int mask, struct nameidata *nd)
+static int cifs_permission(struct inode * inode, int mask, struct nameidata2 *nd)
{
struct cifs_sb_info *cifs_sb;
--- a/fs/cifs/cifsfs.h
+++ b/fs/cifs/cifsfs.h
@@ -44,9 +44,9 @@ 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 nameidata2 *);
extern struct dentry * cifs_lookup(struct inode *, struct dentry *,
- struct nameidata *);
+ struct nameidata2 *);
extern int cifs_unlink(struct inode *, struct dentry *);
extern int cifs_hardlink(struct dentry *, struct inode *, struct dentry *);
extern int cifs_mknod(struct inode *, struct dentry *, int, dev_t);
--- a/fs/cifs/dir.c
+++ b/fs/cifs/dir.c
@@ -124,7 +124,7 @@ BB remove above eight lines BB */
int
cifs_create(struct inode *inode, struct dentry *direntry, int mode,
- struct nameidata *nd)
+ struct nameidata2 *nd)
{
int rc = -ENOENT;
int xid;
@@ -432,7 +432,7 @@ int cifs_mknod(struct inode *inode, stru
struct dentry *
-cifs_lookup(struct inode *parent_dir_inode, struct dentry *direntry, struct nameidata *nd)
+cifs_lookup(struct inode *parent_dir_inode, struct dentry *direntry, struct nameidata2 *nd)
{
int xid;
int rc = 0; /* to get around spurious gcc warning, set to zero here */
@@ -527,7 +527,7 @@ cifs_lookup(struct inode *parent_dir_ino
}
static int
-cifs_d_revalidate(struct dentry *direntry, struct nameidata *nd)
+cifs_d_revalidate(struct dentry *direntry, struct nameidata2 *nd)
{
int isValid = 1;
--- a/fs/coda/dir.c
+++ b/fs/coda/dir.c
@@ -30,8 +30,8 @@
#include "coda_int.h"
/* dir inode-ops */
-static int coda_create(struct inode *dir, struct dentry *new, int mode, struct nameidata *nd);
-static struct dentry *coda_lookup(struct inode *dir, struct dentry *target, struct nameidata *nd);
+static int coda_create(struct inode *dir, struct dentry *new, int mode, struct nameidata2 *nd);
+static struct dentry *coda_lookup(struct inode *dir, struct dentry *target, struct nameidata2 *nd);
static int coda_link(struct dentry *old_dentry, struct inode *dir_inode,
struct dentry *entry);
static int coda_unlink(struct inode *dir_inode, struct dentry *entry);
@@ -46,7 +46,7 @@ static int coda_rename(struct inode *old
static int coda_readdir(struct file *file, void *dirent, filldir_t filldir);
/* dentry ops */
-static int coda_dentry_revalidate(struct dentry *de, struct nameidata *nd);
+static int coda_dentry_revalidate(struct dentry *de, struct nameidata2 *nd);
static int coda_dentry_delete(struct dentry *);
/* support routines */
@@ -95,7 +95,7 @@ const struct file_operations coda_dir_op
/* inode operations for directories */
/* access routines: lookup, readlink, permission */
-static struct dentry *coda_lookup(struct inode *dir, struct dentry *entry, struct nameidata *nd)
+static struct dentry *coda_lookup(struct inode *dir, struct dentry *entry, struct nameidata2 *nd)
{
struct inode *res_inode = NULL;
struct CodaFid resfid = { { 0, } };
@@ -152,7 +152,7 @@ exit:
}
-int coda_permission(struct inode *inode, int mask, struct nameidata *nd)
+int coda_permission(struct inode *inode, int mask, struct nameidata2 *nd)
{
int error = 0;
@@ -195,7 +195,7 @@ static inline void coda_dir_changed(stru
}
/* 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 nameidata2 *nd)
{
int error=0;
const char *name=de->d_name.name;
@@ -590,7 +590,7 @@ static int coda_venus_readdir(struct fil
}
/* called when a cache lookup succeeds */
-static int coda_dentry_revalidate(struct dentry *de, struct nameidata *nd)
+static int coda_dentry_revalidate(struct dentry *de, struct nameidata2 *nd)
{
struct inode *inode = de->d_inode;
struct coda_inode_info *cii;
--- a/fs/coda/pioctl.c
+++ b/fs/coda/pioctl.c
@@ -25,7 +25,7 @@
/* pioctl ops */
static int coda_ioctl_permission(struct inode *inode, int mask,
- struct nameidata *nd);
+ struct nameidata2 *nd);
static int coda_pioctl(struct inode * inode, struct file * filp,
unsigned int cmd, unsigned long user_data);
@@ -43,7 +43,7 @@ const struct file_operations coda_ioctl_
/* the coda pioctl inode ops */
static int coda_ioctl_permission(struct inode *inode, int mask,
- struct nameidata *nd)
+ struct nameidata2 *nd)
{
return 0;
}
--- a/fs/configfs/dir.c
+++ b/fs/configfs/dir.c
@@ -297,7 +297,7 @@ static int configfs_attach_attr(struct c
static struct dentry * configfs_lookup(struct inode *dir,
struct dentry *dentry,
- struct nameidata *nd)
+ struct nameidata2 *nd)
{
struct configfs_dirent * parent_sd = dentry->d_parent->d_fsdata;
struct configfs_dirent * sd;
--- a/fs/cramfs/inode.c
+++ b/fs/cramfs/inode.c
@@ -405,7 +405,7 @@ static int cramfs_readdir(struct file *f
/*
* Lookup and fill in the inode data..
*/
-static struct dentry * cramfs_lookup(struct inode *dir, struct dentry *dentry, struct nameidata *nd)
+static struct dentry * cramfs_lookup(struct inode *dir, struct dentry *dentry, struct nameidata2 *nd)
{
unsigned int offset = 0;
int sorted;
--- a/fs/ecryptfs/dentry.c
+++ b/fs/ecryptfs/dentry.c
@@ -41,7 +41,7 @@
* Returns 1 if valid, 0 otherwise.
*
*/
-static int ecryptfs_d_revalidate(struct dentry *dentry, struct nameidata *nd)
+static int ecryptfs_d_revalidate(struct dentry *dentry, struct nameidata2 *nd)
{
struct dentry *lower_dentry = ecryptfs_dentry_to_lower(dentry);
struct vfsmount *lower_mnt = ecryptfs_dentry_to_lower_mnt(dentry);
--- 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 nameidata2 *nd)
{
struct dentry *lower_dentry = ecryptfs_dentry_to_lower(dentry);
struct vfsmount *lower_mnt = ecryptfs_dentry_to_lower_mnt(dentry);
@@ -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 nameidata2 *nd)
{
int rc;
struct dentry *lower_dentry;
@@ -248,7 +248,7 @@ out:
*/
static int
ecryptfs_create(struct inode *directory_inode, struct dentry *ecryptfs_dentry,
- int mode, struct nameidata *nd)
+ int mode, struct nameidata2 *nd)
{
int rc;
@@ -275,7 +275,7 @@ out:
* dentry cache and continue on to read it from the disk.
*/
static struct dentry *ecryptfs_lookup(struct inode *dir, struct dentry *dentry,
- struct nameidata *nd)
+ struct nameidata2 *nd)
{
int rc = 0;
struct dentry *lower_dir_dentry;
@@ -857,7 +857,7 @@ out:
}
static int
-ecryptfs_permission(struct inode *inode, int mask, struct nameidata *nd)
+ecryptfs_permission(struct inode *inode, int mask, struct nameidata2 *nd)
{
int rc;
--- a/fs/efs/namei.c
+++ b/fs/efs/namei.c
@@ -57,7 +57,7 @@ static efs_ino_t efs_find_entry(struct i
return(0);
}
-struct dentry *efs_lookup(struct inode *dir, struct dentry *dentry, struct nameidata *nd) {
+struct dentry *efs_lookup(struct inode *dir, struct dentry *dentry, struct nameidata2 *nd) {
efs_ino_t inodenum;
struct inode * inode = NULL;
--- a/fs/exec.c
+++ b/fs/exec.c
@@ -138,7 +138,7 @@ asmlinkage long sys_uselib(const char __
if (!S_ISREG(nd.dentry->d_inode->i_mode))
goto exit;
- error = vfs_permission(&nd, MAY_READ | MAY_EXEC);
+ error = vfs_permission(ND2(&nd), MAY_READ | MAY_EXEC);
if (error)
goto exit;
@@ -170,7 +170,7 @@ asmlinkage long sys_uselib(const char __
out:
return error;
exit:
- release_open_intent(&nd);
+ release_open_intent(ND2(&nd));
path_release(&nd);
goto out;
}
@@ -486,7 +486,7 @@ struct file *open_exec(const char *name)
file = ERR_PTR(-EACCES);
if (!(nd.mnt->mnt_flags & MNT_NOEXEC) &&
S_ISREG(inode->i_mode)) {
- int err = vfs_permission(&nd, MAY_EXEC);
+ int err = vfs_permission(ND2(&nd), MAY_EXEC);
file = ERR_PTR(err);
if (!err) {
file = nameidata_to_filp(&nd, O_RDONLY);
@@ -501,7 +501,7 @@ out:
return file;
}
}
- release_open_intent(&nd);
+ release_open_intent(ND2(&nd));
path_release(&nd);
}
goto out;
--- a/fs/ext2/acl.c
+++ b/fs/ext2/acl.c
@@ -294,7 +294,7 @@ ext2_check_acl(struct inode *inode, int
}
int
-ext2_permission(struct inode *inode, int mask, struct nameidata *nd)
+ext2_permission(struct inode *inode, int mask, struct nameidata2 *nd)
{
return generic_permission(inode, mask, ext2_check_acl);
}
--- a/fs/ext2/acl.h
+++ b/fs/ext2/acl.h
@@ -58,7 +58,7 @@ static inline int ext2_acl_count(size_t
#define EXT2_ACL_NOT_CACHED ((void *)-1)
/* acl.c */
-extern int ext2_permission (struct inode *, int, struct nameidata *);
+extern int ext2_permission (struct inode *, int, struct nameidata2 *);
extern int ext2_acl_chmod (struct inode *);
extern int ext2_init_acl (struct inode *, struct inode *);
--- a/fs/ext2/namei.c
+++ b/fs/ext2/namei.c
@@ -52,7 +52,7 @@ static inline int ext2_add_nondir(struct
* Methods themselves.
*/
-static struct dentry *ext2_lookup(struct inode * dir, struct dentry *dentry, struct nameidata *nd)
+static struct dentry *ext2_lookup(struct inode * dir, struct dentry *dentry, struct nameidata2 *nd)
{
struct inode * inode;
ino_t ino;
@@ -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 nameidata2 *nd)
{
struct inode * inode = ext2_new_inode (dir, mode);
int err = PTR_ERR(inode);
--- a/fs/ext3/acl.c
+++ b/fs/ext3/acl.c
@@ -299,7 +299,7 @@ ext3_check_acl(struct inode *inode, int
}
int
-ext3_permission(struct inode *inode, int mask, struct nameidata *nd)
+ext3_permission(struct inode *inode, int mask, struct nameidata2 *nd)
{
return generic_permission(inode, mask, ext3_check_acl);
}
--- a/fs/ext3/acl.h
+++ b/fs/ext3/acl.h
@@ -58,7 +58,7 @@ static inline int ext3_acl_count(size_t
#define EXT3_ACL_NOT_CACHED ((void *)-1)
/* acl.c */
-extern int ext3_permission (struct inode *, int, struct nameidata *);
+extern int ext3_permission (struct inode *, int, struct nameidata2 *);
extern int ext3_acl_chmod (struct inode *);
extern int ext3_init_acl (handle_t *, struct inode *, struct inode *);
--- a/fs/ext3/namei.c
+++ b/fs/ext3/namei.c
@@ -996,7 +996,7 @@ errout:
}
#endif
-static struct dentry *ext3_lookup(struct inode * dir, struct dentry *dentry, struct nameidata *nd)
+static struct dentry *ext3_lookup(struct inode * dir, struct dentry *dentry, struct nameidata2 *nd)
{
struct inode * inode;
struct ext3_dir_entry_2 * de;
@@ -1644,7 +1644,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 nameidata2 *nd)
{
handle_t *handle;
struct inode * inode;
--- a/fs/ext4/acl.c
+++ b/fs/ext4/acl.c
@@ -299,7 +299,7 @@ ext4_check_acl(struct inode *inode, int
}
int
-ext4_permission(struct inode *inode, int mask, struct nameidata *nd)
+ext4_permission(struct inode *inode, int mask, struct nameidata2 *nd)
{
return generic_permission(inode, mask, ext4_check_acl);
}
--- a/fs/ext4/acl.h
+++ b/fs/ext4/acl.h
@@ -58,7 +58,7 @@ static inline int ext4_acl_count(size_t
#define EXT4_ACL_NOT_CACHED ((void *)-1)
/* acl.c */
-extern int ext4_permission (struct inode *, int, struct nameidata *);
+extern int ext4_permission (struct inode *, int, struct nameidata2 *);
extern int ext4_acl_chmod (struct inode *);
extern int ext4_init_acl (handle_t *, struct inode *, struct inode *);
--- a/fs/ext4/namei.c
+++ b/fs/ext4/namei.c
@@ -994,7 +994,7 @@ errout:
}
#endif
-static struct dentry *ext4_lookup(struct inode * dir, struct dentry *dentry, struct nameidata *nd)
+static struct dentry *ext4_lookup(struct inode * dir, struct dentry *dentry, struct nameidata2 *nd)
{
struct inode * inode;
struct ext4_dir_entry_2 * de;
@@ -1642,7 +1642,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 nameidata2 *nd)
{
handle_t *handle;
struct inode * inode;
--- a/fs/freevxfs/vxfs_lookup.c
+++ b/fs/freevxfs/vxfs_lookup.c
@@ -49,7 +49,7 @@
#define VXFS_BLOCK_PER_PAGE(sbp) ((PAGE_CACHE_SIZE / (sbp)->s_blocksize))
-static struct dentry * vxfs_lookup(struct inode *, struct dentry *, struct nameidata *);
+static struct dentry * vxfs_lookup(struct inode *, struct dentry *, struct nameidata2 *);
static int vxfs_readdir(struct file *, void *, filldir_t);
const struct inode_operations vxfs_dir_inode_ops = {
@@ -202,7 +202,7 @@ vxfs_inode_by_name(struct inode *dip, st
* in the return pointer.
*/
static struct dentry *
-vxfs_lookup(struct inode *dip, struct dentry *dp, struct nameidata *nd)
+vxfs_lookup(struct inode *dip, struct dentry *dp, struct nameidata2 *nd)
{
struct inode *ip = NULL;
ino_t ino;
--- a/fs/fuse/dir.c
+++ b/fs/fuse/dir.c
@@ -127,7 +127,7 @@ static void fuse_lookup_init(struct fuse
* the lookup once more. If the lookup results in the same inode,
* then refresh the attributes, timeouts and mark the dentry valid.
*/
-static int fuse_dentry_revalidate(struct dentry *entry, struct nameidata *nd)
+static int fuse_dentry_revalidate(struct dentry *entry, struct nameidata2 *nd)
{
struct inode *inode = entry->d_inode;
@@ -220,7 +220,7 @@ static int fuse_d_add_directory(struct d
}
static struct dentry *fuse_lookup(struct inode *dir, struct dentry *entry,
- struct nameidata *nd)
+ struct nameidata2 *nd)
{
int err;
struct fuse_entry_out outarg;
@@ -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 nameidata2 *nd)
{
int err;
struct inode *inode;
@@ -483,7 +483,7 @@ static int fuse_mknod(struct inode *dir,
}
static int fuse_create(struct inode *dir, struct dentry *entry, int mode,
- struct nameidata *nd)
+ struct nameidata2 *nd)
{
if (nd && (nd->flags & LOOKUP_CREATE)) {
int err = fuse_create_open(dir, entry, mode, nd);
@@ -792,7 +792,7 @@ static int fuse_access(struct inode *ino
* access request is sent. Execute permission is still checked
* locally based on file mode.
*/
-static int fuse_permission(struct inode *inode, int mask, struct nameidata *nd)
+static int fuse_permission(struct inode *inode, int mask, struct nameidata2 *nd)
{
struct fuse_conn *fc = get_fuse_conn(inode);
--- a/fs/gfs2/inode.c
+++ b/fs/gfs2/inode.c
@@ -361,7 +361,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 nameidata2 *nd)
{
struct super_block *sb = dir->i_sb;
struct gfs2_inode *dip = GFS2_I(dir);
--- a/fs/gfs2/inode.h
+++ b/fs/gfs2/inode.h
@@ -41,7 +41,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 nameidata2 *nd);
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_dentry.c
+++ b/fs/gfs2/ops_dentry.c
@@ -33,7 +33,7 @@
* Returns: 1 if the dentry is ok, 0 if it isn't
*/
-static int gfs2_drevalidate(struct dentry *dentry, struct nameidata *nd)
+static int gfs2_drevalidate(struct dentry *dentry, struct nameidata2 *nd)
{
struct dentry *parent = dget_parent(dentry);
struct gfs2_sbd *sdp = GFS2_SB(parent->d_inode);
--- 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 nameidata2 *nd)
{
struct gfs2_inode *dip = GFS2_I(dir);
struct gfs2_sbd *sdp = GFS2_SB(dir);
@@ -103,7 +103,7 @@ static int gfs2_create(struct inode *dir
*/
static struct dentry *gfs2_lookup(struct inode *dir, struct dentry *dentry,
- struct nameidata *nd)
+ struct nameidata2 *nd)
{
struct inode *inode = NULL;
@@ -872,7 +872,7 @@ static void *gfs2_follow_link(struct den
* Returns: errno
*/
-static int gfs2_permission(struct inode *inode, int mask, struct nameidata *nd)
+static int gfs2_permission(struct inode *inode, int mask, struct nameidata2 *nd)
{
struct gfs2_inode *ip = GFS2_I(inode);
struct gfs2_holder i_gh;
--- a/fs/hfs/dir.c
+++ b/fs/hfs/dir.c
@@ -18,7 +18,7 @@
* hfs_lookup()
*/
static struct dentry *hfs_lookup(struct inode *dir, struct dentry *dentry,
- struct nameidata *nd)
+ struct nameidata2 *nd)
{
hfs_cat_rec rec;
struct hfs_find_data fd;
@@ -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 nameidata2 *nd)
{
struct inode *inode;
int res;
--- a/fs/hfs/inode.c
+++ b/fs/hfs/inode.c
@@ -458,7 +458,7 @@ out:
}
static struct dentry *hfs_file_lookup(struct inode *dir, struct dentry *dentry,
- struct nameidata *nd)
+ struct nameidata2 *nd)
{
struct inode *inode = NULL;
hfs_cat_rec rec;
@@ -507,7 +507,7 @@ void hfs_clear_inode(struct inode *inode
}
static int hfs_permission(struct inode *inode, int mask,
- struct nameidata *nd)
+ struct nameidata2 *nd)
{
if (S_ISREG(inode->i_mode) && mask & MAY_EXEC)
return 0;
--- a/fs/hfs/sysdep.c
+++ b/fs/hfs/sysdep.c
@@ -12,7 +12,7 @@
/* dentry case-handling: just lowercase everything */
-static int hfs_revalidate_dentry(struct dentry *dentry, struct nameidata *nd)
+static int hfs_revalidate_dentry(struct dentry *dentry, struct nameidata2 *nd)
{
struct inode *inode = dentry->d_inode;
int diff;
--- a/fs/hfsplus/dir.c
+++ b/fs/hfsplus/dir.c
@@ -25,7 +25,7 @@ static inline void hfsplus_instantiate(s
/* Find the entry inside dir named dentry->d_name */
static struct dentry *hfsplus_lookup(struct inode *dir, struct dentry *dentry,
- struct nameidata *nd)
+ struct nameidata2 *nd)
{
struct inode *inode = NULL;
struct hfs_find_data fd;
@@ -234,7 +234,7 @@ static int hfsplus_dir_release(struct in
}
static int hfsplus_create(struct inode *dir, struct dentry *dentry, int mode,
- struct nameidata *nd)
+ struct nameidata2 *nd)
{
struct inode *inode;
int res;
--- a/fs/hfsplus/inode.c
+++ b/fs/hfsplus/inode.c
@@ -131,7 +131,7 @@ const struct address_space_operations hf
};
static struct dentry *hfsplus_file_lookup(struct inode *dir, struct dentry *dentry,
- struct nameidata *nd)
+ struct nameidata2 *nd)
{
struct hfs_find_data fd;
struct super_block *sb = dir->i_sb;
@@ -226,7 +226,7 @@ static void hfsplus_set_perms(struct ino
perms->dev = cpu_to_be32(HFSPLUS_I(inode).dev);
}
-static int hfsplus_permission(struct inode *inode, int mask, struct nameidata *nd)
+static int hfsplus_permission(struct inode *inode, int mask, struct nameidata2 *nd)
{
/* MAY_EXEC is also used for lookup, if no x bit is set allow lookup,
* open_exec has the same test, so it's still not executable, if a x bit
--- a/fs/hpfs/dir.c
+++ b/fs/hpfs/dir.c
@@ -184,7 +184,7 @@ out:
* to tell read_inode to read fnode or not.
*/
-struct dentry *hpfs_lookup(struct inode *dir, struct dentry *dentry, struct nameidata *nd)
+struct dentry *hpfs_lookup(struct inode *dir, struct dentry *dentry, struct nameidata2 *nd)
{
const char *name = dentry->d_name.name;
unsigned len = dentry->d_name.len;
--- a/fs/hpfs/hpfs_fn.h
+++ b/fs/hpfs/hpfs_fn.h
@@ -238,7 +238,7 @@ void hpfs_set_dentry_operations(struct d
/* dir.c */
-struct dentry *hpfs_lookup(struct inode *, struct dentry *, struct nameidata *);
+struct dentry *hpfs_lookup(struct inode *, struct dentry *, struct nameidata2 *);
extern const struct file_operations hpfs_dir_ops;
/* dnode.c */
--- 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 nameidata2 *nd)
{
const char *name = dentry->d_name.name;
unsigned len = dentry->d_name.len;
--- a/fs/hugetlbfs/inode.c
+++ b/fs/hugetlbfs/inode.c
@@ -419,7 +419,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 nameidata2 *nd)
{
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, MAY_READ);
+ error = vfs_permission(ND2(nd), MAY_READ);
if (error)
path_release(nd);
return error;
--- a/fs/isofs/isofs.h
+++ b/fs/isofs/isofs.h
@@ -111,7 +111,7 @@ extern int isofs_name_translate(struct i
int get_joliet_filename(struct iso_directory_record *, unsigned char *, struct inode *);
int get_acorn_filename(struct iso_directory_record *, char *, struct inode *);
-extern struct dentry *isofs_lookup(struct inode *, struct dentry *, struct nameidata *);
+extern struct dentry *isofs_lookup(struct inode *, struct dentry *, struct nameidata2 *);
extern struct buffer_head *isofs_bread(struct inode *, sector_t);
extern int isofs_get_blocks(struct inode *, sector_t, struct buffer_head **, unsigned long);
--- a/fs/isofs/namei.c
+++ b/fs/isofs/namei.c
@@ -155,7 +155,7 @@ isofs_find_entry(struct inode *dir, stru
return 0;
}
-struct dentry *isofs_lookup(struct inode * dir, struct dentry * dentry, struct nameidata *nd)
+struct dentry *isofs_lookup(struct inode * dir, struct dentry * dentry, struct nameidata2 *nd)
{
int found;
unsigned long block, offset;
--- a/fs/jffs2/acl.c
+++ b/fs/jffs2/acl.c
@@ -302,7 +302,7 @@ static int jffs2_check_acl(struct inode
return -EAGAIN;
}
-int jffs2_permission(struct inode *inode, int mask, struct nameidata *nd)
+int jffs2_permission(struct inode *inode, int mask, struct nameidata2 *nd)
{
return generic_permission(inode, mask, jffs2_check_acl);
}
--- a/fs/jffs2/acl.h
+++ b/fs/jffs2/acl.h
@@ -28,7 +28,7 @@ struct jffs2_acl_header {
#define JFFS2_ACL_NOT_CACHED ((void *)-1)
-extern int jffs2_permission(struct inode *, int, struct nameidata *);
+extern int jffs2_permission(struct inode *, int, struct nameidata2 *);
extern int jffs2_acl_chmod(struct inode *);
extern int jffs2_init_acl(struct inode *, struct inode *);
extern void jffs2_clear_acl(struct jffs2_inode_info *);
--- a/fs/jffs2/dir.c
+++ b/fs/jffs2/dir.c
@@ -22,9 +22,9 @@
static int jffs2_readdir (struct file *, void *, filldir_t);
static int jffs2_create (struct inode *,struct dentry *,int,
- struct nameidata *);
+ struct nameidata2 *);
static struct dentry *jffs2_lookup (struct inode *,struct dentry *,
- struct nameidata *);
+ struct nameidata2 *);
static int jffs2_link (struct dentry *,struct inode *,struct dentry *);
static int jffs2_unlink (struct inode *,struct dentry *);
static int jffs2_symlink (struct inode *,struct dentry *,const char *);
@@ -70,7 +70,7 @@ const struct inode_operations jffs2_dir_
nice and simple
*/
static struct dentry *jffs2_lookup(struct inode *dir_i, struct dentry *target,
- struct nameidata *nd)
+ struct nameidata2 *nd)
{
struct jffs2_inode_info *dir_f;
struct jffs2_sb_info *c;
@@ -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 nameidata2 *nd)
{
struct jffs2_raw_inode *ri;
struct jffs2_inode_info *f, *dir_f;
--- a/fs/jfs/acl.c
+++ b/fs/jfs/acl.c
@@ -140,7 +140,7 @@ static int jfs_check_acl(struct inode *i
return -EAGAIN;
}
-int jfs_permission(struct inode *inode, int mask, struct nameidata *nd)
+int jfs_permission(struct inode *inode, int mask, struct nameidata2 *nd)
{
return generic_permission(inode, mask, jfs_check_acl);
}
--- a/fs/jfs/jfs_acl.h
+++ b/fs/jfs/jfs_acl.h
@@ -20,7 +20,7 @@
#ifdef CONFIG_JFS_POSIX_ACL
-int jfs_permission(struct inode *, int, struct nameidata *);
+int jfs_permission(struct inode *, int, struct nameidata2 *);
int jfs_init_acl(tid_t, struct inode *, struct inode *);
int jfs_setattr(struct dentry *, struct iattr *);
--- 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 nameidata2 *nd)
{
int rc = 0;
tid_t tid; /* transaction id */
@@ -1428,7 +1428,7 @@ static int jfs_mknod(struct inode *dir,
return rc;
}
-static struct dentry *jfs_lookup(struct inode *dip, struct dentry *dentry, struct nameidata *nd)
+static struct dentry *jfs_lookup(struct inode *dip, struct dentry *dentry, struct nameidata2 *nd)
{
struct btstack btstack;
ino_t inum;
--- a/fs/libfs.c
+++ b/fs/libfs.c
@@ -41,7 +41,7 @@ static int simple_delete_dentry(struct d
* Lookup the data. This is trivial - if the dentry didn't already
* exist, we know it is negative. Set d_op to delete negative dentries.
*/
-struct dentry *simple_lookup(struct inode *dir, struct dentry *dentry, struct nameidata *nd)
+struct dentry *simple_lookup(struct inode *dir, struct dentry *dentry, struct nameidata2 *nd)
{
static struct dentry_operations simple_dentry_operations = {
.d_delete = simple_delete_dentry,
--- a/fs/minix/namei.c
+++ b/fs/minix/namei.c
@@ -42,7 +42,7 @@ struct dentry_operations minix_dentry_op
.d_hash = minix_hash,
};
-static struct dentry *minix_lookup(struct inode * dir, struct dentry *dentry, struct nameidata *nd)
+static struct dentry *minix_lookup(struct inode * dir, struct dentry *dentry, struct nameidata2 *nd)
{
struct inode * inode = NULL;
ino_t ino;
@@ -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 nameidata2 *nd)
{
return minix_mknod(dir, dentry, mode, 0);
}
--- a/fs/msdos/namei.c
+++ b/fs/msdos/namei.c
@@ -205,7 +205,7 @@ static struct dentry_operations msdos_de
/***** Get inode using directory and name */
static struct dentry *msdos_lookup(struct inode *dir, struct dentry *dentry,
- struct nameidata *nd)
+ struct nameidata2 *nd)
{
struct super_block *sb = dir->i_sb;
struct fat_slot_info sinfo;
@@ -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 nameidata2 *nd)
{
struct super_block *sb = dir->i_sb;
struct inode *inode = NULL;
--- a/fs/namei.c
+++ b/fs/namei.c
@@ -224,7 +224,7 @@ int generic_permission(struct inode *ino
return -EACCES;
}
-int permission(struct inode *inode, int mask, struct nameidata *nd)
+int permission(struct inode *inode, int mask, struct nameidata2 *nd)
{
umode_t mode = inode->i_mode;
int retval, submask;
@@ -277,7 +277,7 @@ int permission(struct inode *inode, int
* for filesystem access without changing the "normal" uids which
* are used for other things.
*/
-int vfs_permission(struct nameidata *nd, int mask)
+int vfs_permission(struct nameidata2 *nd, int mask)
{
return permission(nd->dentry->d_inode, mask, nd);
}
@@ -296,7 +296,7 @@ int vfs_permission(struct nameidata *nd,
*/
int file_permission(struct file *file, int mask)
{
- struct nameidata nd;
+ struct nameidata2 nd;
nd.dentry = file->f_path.dentry;
nd.mnt = file->f_path.mnt;
@@ -371,7 +371,7 @@ 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 nameidata2 *nd)
{
if (nd->intent.open.file->f_path.dentry == NULL)
put_filp(nd->intent.open.file);
@@ -382,7 +382,7 @@ void release_open_intent(struct nameidat
static inline struct dentry *
do_revalidate(struct dentry *dentry, struct nameidata *nd)
{
- int status = dentry->d_op->d_revalidate(dentry, nd);
+ int status = dentry->d_op->d_revalidate(dentry, ND2(nd));
if (unlikely(status <= 0)) {
/*
* The dentry failed validation.
@@ -433,8 +433,7 @@ static struct dentry * cached_lookup(str
* short-cut DAC fails, then call permission() to do more
* complete permission check.
*/
-static int exec_permission_lite(struct inode *inode,
- struct nameidata *nd)
+static int exec_permission_lite(struct inode *inode, struct nameidata2 *nd)
{
umode_t mode = inode->i_mode;
@@ -496,7 +495,7 @@ static struct dentry * real_lookup(struc
struct dentry * dentry = d_alloc(parent, name);
result = ERR_PTR(-ENOMEM);
if (dentry) {
- result = dir->i_op->lookup(dir, dentry, nd);
+ result = dir->i_op->lookup(dir, dentry, ND2(nd));
if (result)
dput(dentry);
else
@@ -835,9 +834,9 @@ static fastcall int __link_path_walk(con
unsigned int c;
nd->flags |= LOOKUP_CONTINUE;
- err = exec_permission_lite(inode, nd);
+ err = exec_permission_lite(inode, ND2(nd));
if (err == -EAGAIN)
- err = vfs_permission(nd, MAY_EXEC);
+ err = vfs_permission(ND2(nd), MAY_EXEC);
if (err)
break;
@@ -983,7 +982,8 @@ return_reval:
(nd->dentry->d_sb->s_type->fs_flags & FS_REVAL_DOT)) {
err = -ESTALE;
/* Note: we do not d_invalidate() */
- if (!nd->dentry->d_op->d_revalidate(nd->dentry, nd))
+ if (!nd->dentry->d_op->d_revalidate(nd->dentry,
+ ND2(nd)))
break;
}
return_base:
@@ -1148,7 +1148,7 @@ static int fastcall do_path_lookup(int d
if (!S_ISDIR(nd->dentry->d_inode->i_mode))
goto fput_fail;
- retval = vfs_permission(nd, MAY_EXEC);
+ retval = vfs_permission(ND2(nd), MAY_EXEC);
if (retval)
goto fput_fail;
@@ -1196,7 +1196,7 @@ static int __path_lookup_intent_open(int
path_release(nd);
}
} else if (err != 0)
- release_open_intent(nd);
+ release_open_intent(ND2(nd));
return err;
}
@@ -1270,7 +1270,7 @@ static inline struct dentry *__lookup_ha
dentry = ERR_PTR(-ENOMEM);
if (!new)
goto out;
- dentry = inode->i_op->lookup(inode, new, nd);
+ dentry = inode->i_op->lookup(inode, new, ND2(nd));
if (!dentry)
dentry = new;
else
@@ -1293,7 +1293,7 @@ static inline struct dentry * __lookup_h
inode = base->d_inode;
- err = permission(inode, MAY_EXEC, nd);
+ err = permission(inode, MAY_EXEC, ND2(nd));
dentry = ERR_PTR(err);
if (err)
goto out;
@@ -1449,7 +1449,7 @@ static int may_delete(struct inode *dir,
* 4. We can't do it if dir is immutable (done in permission())
*/
static inline int may_create(struct inode *dir, struct dentry *child,
- struct nameidata *nd)
+ struct nameidata2 *nd)
{
if (child->d_inode)
return -EEXIST;
@@ -1521,7 +1521,7 @@ void unlock_rename(struct dentry *p1, st
}
int vfs_create(struct inode *dir, struct dentry *dentry, int mode,
- struct nameidata *nd)
+ struct nameidata2 *nd)
{
int error = may_create(dir, dentry, nd);
@@ -1557,7 +1557,7 @@ int may_open(struct nameidata *nd, int a
if (S_ISDIR(inode->i_mode) && (flag & FMODE_WRITE))
return -EISDIR;
- error = vfs_permission(nd, acc_mode);
+ error = vfs_permission(ND2(nd), acc_mode);
if (error)
return error;
@@ -1630,7 +1630,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, ND2(nd));
mutex_unlock(&dir->d_inode->i_mutex);
dput(nd->dentry);
nd->dentry = path->dentry;
@@ -1763,7 +1763,7 @@ exit_dput:
dput_path(&path, nd);
exit:
if (!IS_ERR(nd->intent.open.file))
- release_open_intent(nd);
+ release_open_intent(ND2(nd));
path_release(nd);
return error;
@@ -1791,7 +1791,7 @@ do_link:
* me so stupid? Anathema to whoever designed this non-sense
* with "intent.open".
*/
- release_open_intent(nd);
+ release_open_intent(ND2(nd));
return error;
}
nd->flags &= ~LOOKUP_PARENT;
@@ -1916,7 +1916,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.dentry->d_inode,dentry,mode,&nd);
+ error = vfs_create(nd.dentry->d_inode, dentry, mode,
+ ND2(&nd));
break;
case S_IFCHR: case S_IFBLK:
error = vfs_mknod(nd.dentry->d_inode, dentry, nd.mnt,
--- a/fs/ncpfs/dir.c
+++ b/fs/ncpfs/dir.c
@@ -33,8 +33,8 @@ 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 struct dentry *ncp_lookup(struct inode *, struct dentry *, struct nameidata *);
+static int ncp_create(struct inode *, struct dentry *, int, struct nameidata2 *);
+static struct dentry *ncp_lookup(struct inode *, struct dentry *, struct nameidata2 *);
static int ncp_unlink(struct inode *, struct dentry *);
static int ncp_mkdir(struct inode *, struct dentry *, int);
static int ncp_rmdir(struct inode *, struct dentry *);
@@ -74,7 +74,7 @@ const struct inode_operations ncp_dir_in
/*
* Dentry operations routines
*/
-static int ncp_lookup_validate(struct dentry *, struct nameidata *);
+static int ncp_lookup_validate(struct dentry *, struct nameidata2 *);
static int ncp_hash_dentry(struct dentry *, struct qstr *);
static int ncp_compare_dentry (struct dentry *, struct qstr *, struct qstr *);
static int ncp_delete_dentry(struct dentry *);
@@ -266,7 +266,7 @@ leave_me:;
static int
-__ncp_lookup_validate(struct dentry * dentry, struct nameidata *nd)
+__ncp_lookup_validate(struct dentry * dentry, struct nameidata2 *nd)
{
struct ncp_server *server;
struct dentry *parent;
@@ -336,7 +336,7 @@ finished:
}
static int
-ncp_lookup_validate(struct dentry * dentry, struct nameidata *nd)
+ncp_lookup_validate(struct dentry * dentry, struct nameidata2 *nd)
{
int res;
lock_kernel();
@@ -791,7 +791,7 @@ out:
return result;
}
-static struct dentry *ncp_lookup(struct inode *dir, struct dentry *dentry, struct nameidata *nd)
+static struct dentry *ncp_lookup(struct inode *dir, struct dentry *dentry, struct nameidata2 *nd)
{
struct ncp_server *server = NCP_SERVER(dir);
struct inode *inode = NULL;
@@ -940,7 +940,7 @@ out:
}
static int ncp_create(struct inode *dir, struct dentry *dentry, int mode,
- struct nameidata *nd)
+ struct nameidata2 *nd)
{
return ncp_create_new(dir, dentry, mode, 0, 0);
}
--- a/fs/nfs/dir.c
+++ b/fs/nfs/dir.c
@@ -42,8 +42,8 @@
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 struct dentry *nfs_lookup(struct inode *, struct dentry *, struct nameidata2 *);
+static int nfs_create(struct inode *, struct dentry *, int, struct nameidata2 *);
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 *);
@@ -102,7 +102,7 @@ const struct inode_operations nfs3_dir_i
#ifdef CONFIG_NFS_V4
-static struct dentry *nfs_atomic_lookup(struct inode *, struct dentry *, struct nameidata *);
+static struct dentry *nfs_atomic_lookup(struct inode *, struct dentry *, struct nameidata2 *);
const struct inode_operations nfs4_dir_inode_operations = {
.create = nfs_create,
.lookup = nfs_atomic_lookup,
@@ -686,7 +686,7 @@ 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 nameidata2 *nd, unsigned int mask)
{
if (nd->flags & (LOOKUP_CONTINUE|LOOKUP_PARENT))
return 0;
@@ -702,7 +702,7 @@ static inline unsigned int nfs_lookup_ch
*
*/
static inline
-int nfs_lookup_verify_inode(struct inode *inode, struct nameidata *nd)
+int nfs_lookup_verify_inode(struct inode *inode, struct nameidata2 *nd)
{
struct nfs_server *server = NFS_SERVER(inode);
@@ -731,7 +731,7 @@ out_force:
*/
static inline
int nfs_neg_need_reval(struct inode *dir, struct dentry *dentry,
- struct nameidata *nd)
+ struct nameidata2 *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)
@@ -750,7 +750,7 @@ int nfs_neg_need_reval(struct inode *dir
* If the parent directory is seen to have changed, we throw out the
* cached dentry and do a new lookup.
*/
-static int nfs_lookup_revalidate(struct dentry * dentry, struct nameidata *nd)
+static int nfs_lookup_revalidate(struct dentry * dentry, struct nameidata2 *nd)
{
struct inode *dir;
struct inode *inode;
@@ -887,7 +887,7 @@ 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 nameidata2 *nd)
{
if (NFS_PROTO(dir)->version == 2)
return 0;
@@ -907,7 +907,7 @@ static inline int nfs_reval_fsid(struct
return 0;
}
-static struct dentry *nfs_lookup(struct inode *dir, struct dentry * dentry, struct nameidata *nd)
+static struct dentry *nfs_lookup(struct inode *dir, struct dentry * dentry, struct nameidata2 *nd)
{
struct dentry *res;
struct inode *inode = NULL;
@@ -977,7 +977,7 @@ out:
}
#ifdef CONFIG_NFS_V4
-static int nfs_open_revalidate(struct dentry *, struct nameidata *);
+static int nfs_open_revalidate(struct dentry *, struct nameidata2 *);
struct dentry_operations nfs4_dentry_operations = {
.d_revalidate = nfs_open_revalidate,
@@ -989,7 +989,7 @@ struct dentry_operations nfs4_dentry_ope
* Use intent information to determine whether we need to substitute
* the NFSv4-style stateful OPEN for the LOOKUP call
*/
-static int is_atomic_open(struct inode *dir, struct nameidata *nd)
+static int is_atomic_open(struct inode *dir, struct nameidata2 *nd)
{
if (nd == NULL || nfs_lookup_check_intent(nd, LOOKUP_OPEN) == 0)
return 0;
@@ -1002,7 +1002,7 @@ static int is_atomic_open(struct inode *
return 1;
}
-static struct dentry *nfs_atomic_lookup(struct inode *dir, struct dentry *dentry, struct nameidata *nd)
+static struct dentry *nfs_atomic_lookup(struct inode *dir, struct dentry *dentry, struct nameidata2 *nd)
{
struct dentry *res = NULL;
int error;
@@ -1071,7 +1071,7 @@ no_open:
return nfs_lookup(dir, dentry, nd);
}
-static int nfs_open_revalidate(struct dentry *dentry, struct nameidata *nd)
+static int nfs_open_revalidate(struct dentry *dentry, struct nameidata2 *nd)
{
struct dentry *parent = NULL;
struct inode *inode = dentry->d_inode;
@@ -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 nameidata2 *nd)
{
struct iattr attr;
int error;
@@ -1954,7 +1954,7 @@ out:
return -EACCES;
}
-int nfs_permission(struct inode *inode, int mask, struct nameidata *nd)
+int nfs_permission(struct inode *inode, int mask, struct nameidata2 *nd)
{
struct rpc_cred *cred;
int res = 0;
--- 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 nameidata2 *nd)
{
struct nfs_fh fhandle;
struct nfs_fattr fattr;
--- a/fs/nfs/nfs4_fs.h
+++ b/fs/nfs/nfs4_fs.h
@@ -166,8 +166,8 @@ extern int nfs4_proc_setclientid_confirm
extern int nfs4_proc_async_renew(struct nfs_client *, struct rpc_cred *);
extern int nfs4_proc_renew(struct nfs_client *, struct rpc_cred *);
extern int nfs4_do_close(struct inode *inode, struct nfs4_state *state);
-extern struct dentry *nfs4_atomic_open(struct inode *, struct dentry *, struct nameidata *);
-extern int nfs4_open_revalidate(struct inode *, struct dentry *, int, struct nameidata *);
+extern struct dentry *nfs4_atomic_open(struct inode *, struct dentry *, struct nameidata2 *);
+extern int nfs4_open_revalidate(struct inode *, struct dentry *, int, struct nameidata2 *);
extern int nfs4_server_capabilities(struct nfs_server *server, struct nfs_fh *fhandle);
extern int nfs4_proc_fs_locations(struct inode *dir, struct qstr *name,
struct nfs4_fs_locations *fs_locations, struct page *page);
--- a/fs/nfs/nfs4proc.c
+++ b/fs/nfs/nfs4proc.c
@@ -1241,7 +1241,7 @@ out:
return status;
}
-static int nfs4_intent_set_file(struct nameidata *nd, struct dentry *dentry, struct nfs4_state *state)
+static int nfs4_intent_set_file(struct nameidata2 *nd, struct dentry *dentry, struct nfs4_state *state)
{
struct file *filp;
@@ -1257,7 +1257,7 @@ static int nfs4_intent_set_file(struct n
}
struct dentry *
-nfs4_atomic_open(struct inode *dir, struct dentry *dentry, struct nameidata *nd)
+nfs4_atomic_open(struct inode *dir, struct dentry *dentry, struct nameidata2 *nd)
{
struct iattr attr;
struct rpc_cred *cred;
@@ -1292,7 +1292,7 @@ nfs4_atomic_open(struct inode *dir, stru
}
int
-nfs4_open_revalidate(struct inode *dir, struct dentry *dentry, int openflags, struct nameidata *nd)
+nfs4_open_revalidate(struct inode *dir, struct dentry *dentry, int openflags, struct nameidata2 *nd)
{
struct rpc_cred *cred;
struct nfs4_state *state;
@@ -1750,7 +1750,7 @@ 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 nameidata2 *nd)
{
struct nfs4_state *state;
struct rpc_cred *cred;
--- 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 nameidata2 *nd)
{
struct nfs_fh fhandle;
struct nfs_fattr fattr;
--- a/fs/ntfs/namei.c
+++ b/fs/ntfs/namei.c
@@ -99,7 +99,7 @@
* Locking: Caller must hold i_mutex on the directory.
*/
static struct dentry *ntfs_lookup(struct inode *dir_ino, struct dentry *dent,
- struct nameidata *nd)
+ struct nameidata2 *nd)
{
ntfs_volume *vol = NTFS_SB(dir_ino->i_sb);
struct inode *dent_inode;
--- a/fs/ocfs2/dcache.c
+++ b/fs/ocfs2/dcache.c
@@ -41,7 +41,7 @@
static int ocfs2_dentry_revalidate(struct dentry *dentry,
- struct nameidata *nd)
+ struct nameidata2 *nd)
{
struct inode *inode = dentry->d_inode;
int ret = 0; /* if all else fails, just return false */
--- a/fs/ocfs2/dlm/dlmfs.c
+++ b/fs/ocfs2/dlm/dlmfs.c
@@ -461,7 +461,7 @@ bail:
static int dlmfs_create(struct inode *dir,
struct dentry *dentry,
int mode,
- struct nameidata *nd)
+ struct nameidata2 *nd)
{
int status = 0;
struct inode *inode;
--- a/fs/ocfs2/file.c
+++ b/fs/ocfs2/file.c
@@ -1048,7 +1048,7 @@ bail:
return err;
}
-int ocfs2_permission(struct inode *inode, int mask, struct nameidata *nd)
+int ocfs2_permission(struct inode *inode, int mask, struct nameidata2 *nd)
{
int ret;
--- a/fs/ocfs2/file.h
+++ b/fs/ocfs2/file.h
@@ -54,7 +54,7 @@ int ocfs2_setattr(struct dentry *dentry,
int ocfs2_getattr(struct vfsmount *mnt, struct dentry *dentry,
struct kstat *stat);
int ocfs2_permission(struct inode *inode, int mask,
- struct nameidata *nd);
+ struct nameidata2 *nd);
int ocfs2_should_update_atime(struct inode *inode,
struct vfsmount *vfsmnt);
--- a/fs/ocfs2/namei.c
+++ b/fs/ocfs2/namei.c
@@ -138,7 +138,7 @@ static inline int ocfs2_add_entry(handle
#define OCFS2_ORPHAN_NAMELEN ((int)(2 * sizeof(u64)))
static struct dentry *ocfs2_lookup(struct inode *dir, struct dentry *dentry,
- struct nameidata *nd)
+ struct nameidata2 *nd)
{
int status;
u64 blkno;
@@ -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 nameidata2 *nd)
{
int ret;
--- a/fs/open.c
+++ b/fs/open.c
@@ -243,7 +243,7 @@ static long do_sys_truncate(const char _
if (!S_ISREG(inode->i_mode))
goto dput_and_out;
- error = vfs_permission(&nd, MAY_WRITE);
+ error = vfs_permission(ND2(&nd), MAY_WRITE);
if (error)
goto dput_and_out;
@@ -392,7 +392,7 @@ asmlinkage long sys_faccessat(int dfd, c
if (res)
goto out;
- res = vfs_permission(&nd, mode);
+ res = vfs_permission(ND2(&nd), mode);
/* SuS v2 requires we report a read only fs too */
if(res || !(mode & S_IWOT
| David Miller | Slow DOWN, please!!! |
| KAMEZAWA Hiroyuki | Re: 2.6.22-rc1-mm1 |
| Steven Rostedt | [RFC PATCH 1/3] Unified trace buffer |
| Steven Rostedt | [RFC PATCH 0/6] Convert all tasklets to workqueues |
git: | |
| Peter Klavins | Re: CRLF problems with Git on Win32 |
| J. Bruce Fields | Re: Git User's Survey 2007 unfinished summary continued |
| Linus Torvalds | Re: VCS comparison table |
| Junichi Uekawa | Re: [ANNOUNCE] GIT 1.5.4 |
| Arjan van de Ven | Re: [GIT]: Networking |
| Rémi | [PATCH 0/6] [RFC] Phonet pipes protocol (v2) |
| Jarek Poplawski | Re: [PATCH] pkt_sched: Destroy gen estimators under rtnl_lock(). |
| Jozsef Kadlecsik | Re: TCP connection stalls under 2.6.24.7 |
| Richard Stallman | Real men don't attack straw men |
| Rogier Krieger | Re: bcw(4) is gone |
| Leon Dippenaar | New tcp stack attack |
| Brandon Lee | DELL PERC 5iR slow performance |
| high memory | 6 hours ago | Linux kernel |
| semaphore access speed | 9 hours ago | Applications and Utilities |
| the kernel how to power off the machine | 10 hours ago | Linux kernel |
| Easter Eggs in windows XP | 12 hours ago | Windows |
| Shared swap partition | 13 hours ago | Linux general |
| Root password | 14 hours ago | Linux general |
| Where/when DNOTIFY is used? | 15 hours ago | Linux kernel |
| How to convert Linux Kernel built-in module into a loadable module | 18 hours ago | Linux kernel |
| Linux 2.6.24 and I/O schedulers | 18 hours ago | Linux kernel |
| USB Driver -- Interrupt Polling -- A Little Help Please | 1 day ago | Linux general |
