fs/dcache.c | 20 ++
+ fs/exec.c | 12 -
fs/namei.c | 356 +++++++++++++++++++++++++++++++++++++++++--------
fs/nfsd/vfs.c | 2
fs/open.c | 126 ++++++++++++++---
include/linux/dcache.h | 28 +++
include/linux/fs.h | 31 +++-
kernel/ksyms.c | 1
- 8 files changed, 504 insertions(+), 84 deletions(-)
+ 9 files changed, 511 insertions(+), 89 deletions(-)
+--- linux-2.4.20/fs/exec.c~vfs_intent-2.4.20-vanilla 2002-11-28 16:53:15.000000000 -0700
++++ linux-2.4.20-braam/fs/exec.c 2003-04-22 15:39:47.000000000 -0600
+@@ -107,8 +107,9 @@ asmlinkage long sys_uselib(const char *
+ struct file * file;
+ struct nameidata nd;
+ int error;
++ struct lookup_intent it = { .it_op = IT_OPEN, .it_flags = O_RDONLY };
+
+- error = user_path_walk(library, &nd);
++ error = user_path_walk_it(library, &nd, &it);
+ if (error)
+ goto out;
+
+@@ -120,7 +121,7 @@ asmlinkage long sys_uselib(const char *
+ if (error)
+ goto exit;
+
+- file = dentry_open(nd.dentry, nd.mnt, O_RDONLY);
++ file = dentry_open_it(nd.dentry, nd.mnt, O_RDONLY, &it);
+ error = PTR_ERR(file);
+ if (IS_ERR(file))
+ goto out;
+@@ -363,8 +364,9 @@ struct file *open_exec(const char *name)
+ struct inode *inode;
+ struct file *file;
+ int err = 0;
++ struct lookup_intent it = { .it_op = IT_OPEN, .it_flags = O_RDONLY };
+
+- err = path_lookup(name, LOOKUP_FOLLOW|LOOKUP_POSITIVE, &nd);
++ err = path_lookup_it(name, LOOKUP_FOLLOW|LOOKUP_POSITIVE, &nd, &it);
+ file = ERR_PTR(err);
+ if (!err) {
+ inode = nd.dentry->d_inode;
+@@ -376,7 +378,7 @@ struct file *open_exec(const char *name)
+ err = -EACCES;
+ file = ERR_PTR(err);
+ if (!err) {
+- file = dentry_open(nd.dentry, nd.mnt, O_RDONLY);
++ file = dentry_open_it(nd.dentry, nd.mnt, O_RDONLY, &it);
+ if (!IS_ERR(file)) {
+ err = deny_write_access(file);
+ if (err) {
+@@ -989,7 +991,7 @@ int do_coredump(long signr, struct pt_re
+ goto close_fail;
+ if (!file->f_op->write)
+ goto close_fail;
+- if (do_truncate(file->f_dentry, 0) != 0)
++ if (do_truncate(file->f_dentry, 0, 0) != 0)
+ goto close_fail;
+
+ retval = binfmt->core_dump(signr, regs, file);
--- linux-2.4.20/fs/dcache.c~vfs_intent-2.4.20-vanilla 2002-11-28 16:53:15.000000000 -0700
-+++ linux-2.4.20-braam/fs/dcache.c 2003-04-22 13:50:56.000000000 -0600
++++ linux-2.4.20-braam/fs/dcache.c 2003-04-22 15:38:48.000000000 -0600
@@ -181,6 +181,13 @@ int d_invalidate(struct dentry * dentry)
spin_unlock(&dcache_lock);
return 0;
#define do_switch(x,y) do { \
--- linux-2.4.20/fs/namei.c~vfs_intent-2.4.20-vanilla 2002-11-28 16:53:15.000000000 -0700
-+++ linux-2.4.20-braam/fs/namei.c 2003-04-22 13:50:56.000000000 -0600
++++ linux-2.4.20-braam/fs/namei.c 2003-04-22 15:38:48.000000000 -0600
@@ -94,6 +94,13 @@
* XEmacs seems to be relying on it...
*/
kunmap(page);
page_cache_release(page);
--- linux-2.4.20/fs/nfsd/vfs.c~vfs_intent-2.4.20-vanilla 2002-11-28 16:53:15.000000000 -0700
-+++ linux-2.4.20-braam/fs/nfsd/vfs.c 2003-04-22 13:50:56.000000000 -0600
++++ linux-2.4.20-braam/fs/nfsd/vfs.c 2003-04-22 15:38:48.000000000 -0600
@@ -1291,7 +1291,7 @@ nfsd_rename(struct svc_rqst *rqstp, stru
err = nfserr_perm;
} else
nfsd_sync_dir(tdentry);
nfsd_sync_dir(fdentry);
--- linux-2.4.20/fs/open.c~vfs_intent-2.4.20-vanilla 2002-11-28 16:53:15.000000000 -0700
-+++ linux-2.4.20-braam/fs/open.c 2003-04-22 13:50:56.000000000 -0600
++++ linux-2.4.20-braam/fs/open.c 2003-04-22 15:38:48.000000000 -0600
@@ -19,6 +19,8 @@
#include <asm/uaccess.h>
* Find an empty file descriptor entry, and mark it busy.
*/
--- linux-2.4.20/fs/stat.c~vfs_intent-2.4.20-vanilla 2001-09-13 17:04:43.000000000 -0600
-+++ linux-2.4.20-braam/fs/stat.c 2003-04-22 13:50:56.000000000 -0600
++++ linux-2.4.20-braam/fs/stat.c 2003-04-22 15:38:48.000000000 -0600
@@ -135,13 +135,15 @@ static int cp_new_stat(struct inode * in
asmlinkage long sys_stat(char * filename, struct __old_kernel_stat * statbuf)
{
}
return error;
--- linux-2.4.20/include/linux/dcache.h~vfs_intent-2.4.20-vanilla 2002-11-28 16:53:15.000000000 -0700
-+++ linux-2.4.20-braam/include/linux/dcache.h 2003-04-22 14:20:23.000000000 -0600
++++ linux-2.4.20-braam/include/linux/dcache.h 2003-04-22 15:38:48.000000000 -0600
@@ -7,6 +7,25 @@
#include <linux/mount.h>
#include <linux/kernel.h>
extern spinlock_t dcache_lock;
---- linux-2.4.20/include/linux/fs.h~vfs_intent-2.4.20-vanilla 2003-04-22 13:50:52.000000000 -0600
-+++ linux-2.4.20-braam/include/linux/fs.h 2003-04-22 13:50:56.000000000 -0600
+--- linux-2.4.20/include/linux/fs.h~vfs_intent-2.4.20-vanilla 2003-04-22 15:38:15.000000000 -0600
++++ linux-2.4.20-braam/include/linux/fs.h 2003-04-22 15:38:48.000000000 -0600
@@ -338,6 +338,8 @@ extern void set_bh_page(struct buffer_he
#define ATTR_MTIME_SET 256
#define ATTR_FORCE 512 /* Not a change, but a change it */
extern int page_readlink(struct dentry *, char *, int);
extern int page_follow_link(struct dentry *, struct nameidata *);
extern struct inode_operations page_symlink_inode_operations;
---- linux-2.4.20/kernel/ksyms.c~vfs_intent-2.4.20-vanilla 2003-04-22 13:50:53.000000000 -0600
-+++ linux-2.4.20-braam/kernel/ksyms.c 2003-04-22 13:50:56.000000000 -0600
+--- linux-2.4.20/kernel/ksyms.c~vfs_intent-2.4.20-vanilla 2003-04-22 15:38:16.000000000 -0600
++++ linux-2.4.20-braam/kernel/ksyms.c 2003-04-22 15:38:48.000000000 -0600
@@ -269,6 +269,7 @@ EXPORT_SYMBOL(read_cache_page);
EXPORT_SYMBOL(set_page_dirty);
EXPORT_SYMBOL(vfs_readlink);