- 0 files changed
+ fs/dcache.c | 3
+ fs/namei.c | 230 ++++++++++++++++++++++++++++++++++++++-----------
+ fs/nfsd/vfs.c | 2
+ fs/open.c | 53 ++++++++---
+ fs/stat.c | 9 +
+ include/linux/dcache.h | 31 ++++++
+ include/linux/fs.h | 13 ++
+ kernel/ksyms.c | 1
+ 8 files changed, 280 insertions(+), 62 deletions(-)
---- linux-2.4.18-17.8.0/fs/dcache.c~vfs_intent 2002-12-06 14:52:31.000000000 -0800
-+++ linux-2.4.18-17.8.0-zab/fs/dcache.c 2002-12-06 14:52:31.000000000 -0800
+--- linux-2.4.18-p4smp-l6/fs/dcache.c~vfs_intent Fri Jan 17 12:44:40 2003
++++ linux-2.4.18-p4smp-l6-root/fs/dcache.c Fri Jan 17 12:44:40 2003
@@ -150,6 +150,8 @@ repeat:
unhash_it:
list_del_init(&dentry->d_hash);
INIT_LIST_HEAD(&dentry->d_hash);
INIT_LIST_HEAD(&dentry->d_lru);
INIT_LIST_HEAD(&dentry->d_subdirs);
---- linux-2.4.18-17.8.0/fs/namei.c~vfs_intent 2002-12-06 14:52:31.000000000 -0800
-+++ linux-2.4.18-17.8.0-zab/fs/namei.c 2002-12-06 14:52:31.000000000 -0800
+--- linux-2.4.18-p4smp-l6/fs/namei.c~vfs_intent Fri Jan 17 12:44:40 2003
++++ linux-2.4.18-p4smp-l6-root/fs/namei.c Fri Jan 17 12:46:08 2003
@@ -1,3 +1,6 @@
+
+
break;
}
goto return_base;
-@@ -663,10 +702,21 @@ return_err:
+@@ -658,15 +697,28 @@ out_dput:
+ dput(dentry);
+ break;
+ }
++ if (err)
++ intent_release(nd->dentry, it);
+ path_release(nd);
+ return_err:
return err;
}
}
/* SMP-safe */
-@@ -751,6 +801,17 @@ walk_init_root(const char *name, struct
+@@ -751,6 +803,17 @@ walk_init_root(const char *name, struct
}
/* SMP-safe */
int path_lookup(const char *path, unsigned flags, struct nameidata *nd)
{
int error = 0;
-@@ -779,7 +840,8 @@ int path_init(const char *name, unsigned
+@@ -779,7 +842,8 @@ int path_init(const char *name, unsigned
* needs parent already locked. Doesn't follow mounts.
* SMP-safe.
*/
{
struct dentry * dentry;
struct inode *inode;
-@@ -802,13 +864,16 @@ struct dentry * lookup_hash(struct qstr
+@@ -802,13 +866,16 @@ struct dentry * lookup_hash(struct qstr
goto out;
}
dentry = inode->i_op->lookup(inode, new);
unlock_kernel();
if (!dentry)
-@@ -820,6 +885,12 @@ out:
+@@ -820,6 +887,12 @@ out:
return dentry;
}
/* SMP-safe */
struct dentry * lookup_one_len(const char * name, struct dentry * base, int len)
{
-@@ -841,7 +912,7 @@ struct dentry * lookup_one_len(const cha
+@@ -841,7 +914,7 @@ struct dentry * lookup_one_len(const cha
}
this.hash = end_name_hash(hash);
access:
return ERR_PTR(-EACCES);
}
-@@ -872,6 +943,23 @@ int __user_walk(const char *name, unsign
+@@ -872,6 +945,23 @@ int __user_walk(const char *name, unsign
return err;
}
/*
* It's inline, so penalty for filesystems that don't use sticky bit is
* minimal.
-@@ -1010,7 +1098,8 @@ exit_lock:
- * for symlinks (where the permissions are checked later).
- * SMP-safe
- */
--int open_namei(const char * pathname, int flag, int mode, struct nameidata *nd)
-+int open_namei_it(const char *pathname, int flag, int mode,
-+ struct nameidata *nd, struct lookup_intent *it)
+@@ -1045,14 +1135,17 @@ int may_open(struct nameidata *nd, int a
+ return get_lease(inode, flag);
+ }
+
++extern struct file *dentry_open_it(struct dentry *dentry, struct vfsmount *mnt,
++ int flags, struct lookup_intent *it);
++
+ struct file *filp_open(const char * pathname, int open_flags, int mode)
{
int acc_mode, error = 0;
- struct inode *inode;
-@@ -1024,7 +1113,7 @@ int open_namei(const char * pathname, in
+- struct inode *inode;
+ struct dentry *dentry;
+ struct dentry *dir;
+ int flag = open_flags;
+ struct nameidata nd;
++ struct lookup_intent it = { .it_op = IT_OPEN };
+ int count = 0;
+
+ if ((flag+1) & O_ACCMODE)
+@@ -1066,7 +1159,7 @@ struct file *filp_open(const char * path
* The simplest case - just a plain lookup.
*/
if (!(flag & O_CREAT)) {
-- error = path_lookup(pathname, lookup_flags(flag), nd);
-+ error = path_lookup_it(pathname, lookup_flags(flag), nd, it);
+- error = path_lookup(pathname, lookup_flags(flag), &nd);
++ error = path_lookup_it(pathname, lookup_flags(flag), &nd, &it);
if (error)
- return error;
- dentry = nd->dentry;
-@@ -1034,6 +1123,10 @@ int open_namei(const char * pathname, in
+ return ERR_PTR(error);
+ dentry = nd.dentry;
+@@ -1076,6 +1169,8 @@ struct file *filp_open(const char * path
/*
* Create - we need to know the parent.
*/
-+ if (it) {
-+ it->it_mode = mode;
-+ it->it_op |= IT_CREAT;
-+ }
- error = path_lookup(pathname, LOOKUP_PARENT, nd);
++ it.it_mode = mode;
++ it.it_op |= IT_CREAT;
+ error = path_lookup(pathname, LOOKUP_PARENT, &nd);
if (error)
- return error;
-@@ -1049,7 +1142,7 @@ int open_namei(const char * pathname, in
+ return ERR_PTR(error);
+@@ -1091,7 +1186,7 @@ struct file *filp_open(const char * path
- dir = nd->dentry;
+ dir = nd.dentry;
down(&dir->d_inode->i_sem);
-- dentry = lookup_hash(&nd->last, nd->dentry);
-+ dentry = lookup_hash_it(&nd->last, nd->dentry, it);
+- dentry = lookup_hash(&nd.last, nd.dentry);
++ dentry = lookup_hash_it(&nd.last, nd.dentry, &it);
do_last:
error = PTR_ERR(dentry);
-@@ -1058,6 +1151,7 @@ do_last:
+@@ -1100,6 +1195,7 @@ do_last:
goto exit;
}
-+ it->it_mode = mode;
++ it.it_mode = mode;
/* Negative dentry, just create the file */
if (!dentry->d_inode) {
error = vfs_create(dir->d_inode, dentry,
-@@ -1091,7 +1185,8 @@ do_last:
+@@ -1134,7 +1230,8 @@ do_last:
error = -ENOENT;
if (!dentry->d_inode)
goto exit_dput;
+ dentry->d_inode->i_op->follow_link2))
goto do_link;
- dput(nd->dentry);
-@@ -1177,8 +1272,10 @@ ok:
- return 0;
+ dput(nd.dentry);
+@@ -1149,11 +1246,13 @@ ok:
+ if (!S_ISREG(nd.dentry->d_inode->i_mode))
+ open_flags &= ~O_TRUNC;
+
+- return dentry_open(nd.dentry, nd.mnt, open_flags);
++ return dentry_open_it(nd.dentry, nd.mnt, open_flags, &it);
exit_dput:
-+ intent_release(dentry, it);
++ intent_release(dentry, &it);
dput(dentry);
exit:
-+ intent_release(nd->dentry, it);
- path_release(nd);
- return error;
++ intent_release(nd.dentry, &it);
+ path_release(&nd);
+ return ERR_PTR(error);
-@@ -1197,7 +1294,12 @@ do_link:
+@@ -1172,7 +1271,12 @@ do_link:
* are done. Procfs-like symlinks just set LAST_BIND.
*/
UPDATE_ATIME(dentry->d_inode);
-- error = dentry->d_inode->i_op->follow_link(dentry, nd);
+- error = dentry->d_inode->i_op->follow_link(dentry, &nd);
+ if (dentry->d_inode->i_op->follow_link2)
-+ error = dentry->d_inode->i_op->follow_link2(dentry, nd, it);
++ error = dentry->d_inode->i_op->follow_link2(dentry, &nd, &it);
+ else
-+ error = dentry->d_inode->i_op->follow_link(dentry, nd);
++ error = dentry->d_inode->i_op->follow_link(dentry, &nd);
+ if (error)
-+ intent_release(dentry, it);
++ intent_release(dentry, &it);
dput(dentry);
if (error)
return error;
-@@ -1219,13 +1321,20 @@ do_link:
+@@ -1194,13 +1298,15 @@ do_link:
}
- dir = nd->dentry;
+ dir = nd.dentry;
down(&dir->d_inode->i_sem);
-- dentry = lookup_hash(&nd->last, nd->dentry);
-+ dentry = lookup_hash_it(&nd->last, nd->dentry, it);
- putname(nd->last.name);
+- dentry = lookup_hash(&nd.last, nd.dentry);
++ dentry = lookup_hash_it(&nd.last, nd.dentry, &it);
+ putname(nd.last.name);
goto do_last;
}
-+int open_namei(const char *pathname, int flag, int mode, struct nameidata *nd)
-+{
-+ return open_namei_it(pathname, flag, mode, nd, NULL);
-+}
-+
+
/* SMP-safe */
-static struct dentry *lookup_create(struct nameidata *nd, int is_dir)
{
struct dentry *dentry;
-@@ -1233,7 +1342,7 @@ static struct dentry *lookup_create(stru
+@@ -1208,7 +1314,7 @@ static struct dentry *lookup_create(stru
dentry = ERR_PTR(-EEXIST);
if (nd->last_type != LAST_NORM)
goto fail;
if (IS_ERR(dentry))
goto fail;
if (!is_dir && nd->last.name[nd->last.len] && !dentry->d_inode)
-@@ -1279,6 +1388,7 @@ asmlinkage long sys_mknod(const char * f
+@@ -1254,6 +1360,7 @@ asmlinkage long sys_mknod(const char * f
char * tmp;
struct dentry * dentry;
struct nameidata nd;
if (S_ISDIR(mode))
return -EPERM;
-@@ -1289,7 +1399,7 @@ asmlinkage long sys_mknod(const char * f
+@@ -1264,7 +1371,7 @@ asmlinkage long sys_mknod(const char * f
error = path_lookup(tmp, LOOKUP_PARENT, &nd);
if (error)
goto out;
error = PTR_ERR(dentry);
mode &= ~current->fs->umask;
-@@ -1307,6 +1417,7 @@ asmlinkage long sys_mknod(const char * f
+@@ -1282,6 +1389,7 @@ asmlinkage long sys_mknod(const char * f
default:
error = -EINVAL;
}
dput(dentry);
}
up(&nd.dentry->d_inode->i_sem);
-@@ -1347,6 +1458,7 @@ asmlinkage long sys_mkdir(const char * p
+@@ -1322,6 +1430,7 @@ asmlinkage long sys_mkdir(const char * p
{
int error = 0;
char * tmp;
tmp = getname(pathname);
error = PTR_ERR(tmp);
-@@ -1357,11 +1469,12 @@ asmlinkage long sys_mkdir(const char * p
+@@ -1332,11 +1441,12 @@ asmlinkage long sys_mkdir(const char * p
error = path_lookup(tmp, LOOKUP_PARENT, &nd);
if (error)
goto out;
dput(dentry);
}
up(&nd.dentry->d_inode->i_sem);
-@@ -1445,6 +1558,7 @@ asmlinkage long sys_rmdir(const char * p
+@@ -1420,6 +1530,7 @@ asmlinkage long sys_rmdir(const char * p
char * name;
struct dentry *dentry;
struct nameidata nd;
name = getname(pathname);
if(IS_ERR(name))
-@@ -1466,10 +1580,11 @@ asmlinkage long sys_rmdir(const char * p
+@@ -1441,10 +1552,11 @@ asmlinkage long sys_rmdir(const char * p
goto exit1;
}
down(&nd.dentry->d_inode->i_sem);
dput(dentry);
}
up(&nd.dentry->d_inode->i_sem);
-@@ -1513,6 +1628,7 @@ asmlinkage long sys_unlink(const char *
+@@ -1488,6 +1600,7 @@ asmlinkage long sys_unlink(const char *
char * name;
struct dentry *dentry;
struct nameidata nd;
name = getname(pathname);
if(IS_ERR(name))
-@@ -1525,7 +1641,7 @@ asmlinkage long sys_unlink(const char *
+@@ -1500,7 +1613,7 @@ asmlinkage long sys_unlink(const char *
if (nd.last_type != LAST_NORM)
goto exit1;
down(&nd.dentry->d_inode->i_sem);
error = PTR_ERR(dentry);
if (!IS_ERR(dentry)) {
/* Why not before? Because we want correct error value */
-@@ -1533,6 +1649,7 @@ asmlinkage long sys_unlink(const char *
+@@ -1508,6 +1621,7 @@ asmlinkage long sys_unlink(const char *
goto slashes;
error = vfs_unlink(nd.dentry->d_inode, dentry);
exit2:
dput(dentry);
}
up(&nd.dentry->d_inode->i_sem);
-@@ -1579,6 +1696,7 @@ asmlinkage long sys_symlink(const char *
+@@ -1554,6 +1668,7 @@ asmlinkage long sys_symlink(const char *
int error = 0;
char * from;
char * to;
from = getname(oldname);
if(IS_ERR(from))
-@@ -1592,10 +1710,12 @@ asmlinkage long sys_symlink(const char *
+@@ -1567,10 +1682,12 @@ asmlinkage long sys_symlink(const char *
error = path_lookup(to, LOOKUP_PARENT, &nd);
if (error)
goto out;
dput(dentry);
}
up(&nd.dentry->d_inode->i_sem);
-@@ -1660,6 +1780,7 @@ asmlinkage long sys_link(const char * ol
+@@ -1635,6 +1752,7 @@ asmlinkage long sys_link(const char * ol
{
int error;
char * to;
to = getname(newname);
error = PTR_ERR(to);
-@@ -1667,7 +1788,7 @@ asmlinkage long sys_link(const char * ol
+@@ -1642,7 +1760,7 @@ asmlinkage long sys_link(const char * ol
struct dentry *new_dentry;
struct nameidata nd, old_nd;
if (error)
goto exit;
error = path_lookup(to, LOOKUP_PARENT, &nd);
-@@ -1676,10 +1797,12 @@ asmlinkage long sys_link(const char * ol
+@@ -1651,10 +1769,12 @@ asmlinkage long sys_link(const char * ol
error = -EXDEV;
if (old_nd.mnt != nd.mnt)
goto out_release;
dput(new_dentry);
}
up(&nd.dentry->d_inode->i_sem);
-@@ -1720,7 +1843,8 @@ exit:
+@@ -1695,7 +1815,8 @@ exit:
* locking].
*/
int vfs_rename_dir(struct inode *old_dir, struct dentry *old_dentry,
{
int error;
struct inode *target;
-@@ -1778,6 +1902,7 @@ int vfs_rename_dir(struct inode *old_dir
+@@ -1753,6 +1874,7 @@ int vfs_rename_dir(struct inode *old_dir
error = -EBUSY;
else
error = old_dir->i_op->rename(old_dir, old_dentry, new_dir, new_dentry);
if (target) {
if (!error)
target->i_flags |= S_DEAD;
-@@ -1799,7 +1924,8 @@ out_unlock:
+@@ -1774,7 +1896,8 @@ out_unlock:
}
int vfs_rename_other(struct inode *old_dir, struct dentry *old_dentry,
{
int error;
-@@ -1830,6 +1956,7 @@ int vfs_rename_other(struct inode *old_d
+@@ -1805,6 +1928,7 @@ int vfs_rename_other(struct inode *old_d
error = -EBUSY;
else
error = old_dir->i_op->rename(old_dir, old_dentry, new_dir, new_dentry);
double_up(&old_dir->i_zombie, &new_dir->i_zombie);
if (error)
return error;
-@@ -1841,13 +1968,14 @@ int vfs_rename_other(struct inode *old_d
+@@ -1816,13 +1940,14 @@ int vfs_rename_other(struct inode *old_d
}
int vfs_rename(struct inode *old_dir, struct dentry *old_dentry,
if (!error) {
if (old_dir == new_dir)
inode_dir_notify(old_dir, DN_RENAME);
-@@ -1864,6 +1992,7 @@ static inline int do_rename(const char *
+@@ -1839,6 +1964,7 @@ static inline int do_rename(const char *
int error = 0;
struct dentry * old_dir, * new_dir;
struct dentry * old_dentry, *new_dentry;
struct nameidata oldnd, newnd;
error = path_lookup(oldname, LOOKUP_PARENT, &oldnd);
-@@ -1889,7 +2018,7 @@ static inline int do_rename(const char *
+@@ -1864,7 +1990,7 @@ static inline int do_rename(const char *
double_lock(new_dir, old_dir);
error = PTR_ERR(old_dentry);
if (IS_ERR(old_dentry))
goto exit3;
-@@ -1905,18 +2034,21 @@ static inline int do_rename(const char *
+@@ -1880,18 +2006,21 @@ static inline int do_rename(const char *
if (newnd.last.name[newnd.last.len])
goto exit4;
}
dput(old_dentry);
exit3:
double_up(&new_dir->d_inode->i_sem, &old_dir->d_inode->i_sem);
-@@ -1965,7 +2097,8 @@ out:
+@@ -1940,7 +2069,8 @@ out:
}
static inline int
{
int res = 0;
char *name;
-@@ -1978,7 +2111,7 @@ __vfs_follow_link(struct nameidata *nd,
+@@ -1953,7 +2083,7 @@ __vfs_follow_link(struct nameidata *nd,
/* weird __emul_prefix() stuff did it */
goto out;
}
out:
if (current->link_count || res || nd->last_type!=LAST_NORM)
return res;
-@@ -2000,7 +2133,13 @@ fail:
+@@ -1975,7 +2105,13 @@ fail:
int vfs_follow_link(struct nameidata *nd, const char *link)
{
}
/* get the link contents into pagecache */
-@@ -2042,7 +2181,7 @@ int page_follow_link(struct dentry *dent
+@@ -2017,7 +2153,7 @@ int page_follow_link(struct dentry *dent
{
struct page *page = NULL;
char *s = page_getlink(dentry, &page);
if (page) {
kunmap(page);
page_cache_release(page);
---- linux-2.4.18-17.8.0/fs/nfsd/vfs.c~vfs_intent 2002-12-06 14:52:31.000000000 -0800
-+++ linux-2.4.18-17.8.0-zab/fs/nfsd/vfs.c 2002-12-06 14:52:31.000000000 -0800
+--- linux-2.4.18-p4smp-l6/fs/nfsd/vfs.c~vfs_intent Fri Jan 17 12:44:40 2003
++++ linux-2.4.18-p4smp-l6-root/fs/nfsd/vfs.c Fri Jan 17 12:44:40 2003
@@ -1298,7 +1298,7 @@ nfsd_rename(struct svc_rqst *rqstp, stru
err = nfserr_perm;
} else
unlock_kernel();
if (!err && EX_ISSYNC(tfhp->fh_export)) {
nfsd_sync_dir(tdentry);
---- linux-2.4.18-17.8.0/fs/open.c~vfs_intent 2002-12-06 14:52:31.000000000 -0800
-+++ linux-2.4.18-17.8.0-zab/fs/open.c 2002-12-06 14:52:31.000000000 -0800
+--- linux-2.4.18-p4smp-l6/fs/open.c~vfs_intent Fri Jan 17 12:44:40 2003
++++ linux-2.4.18-p4smp-l6-root/fs/open.c Fri Jan 17 12:44:40 2003
@@ -19,6 +19,9 @@
#include <asm/uaccess.h>
path_release(&nd);
}
return error;
-@@ -638,10 +661,16 @@ asmlinkage long sys_fchown(unsigned int
- * for the internal routines (ie open_namei()/follow_link() etc). 00 is
- * used by symlinks.
- */
-+extern int open_namei_it(const char *filename, int namei_flags, int mode,
-+ struct nameidata *nd, struct lookup_intent *it);
-+struct file *dentry_open_it(struct dentry *dentry, struct vfsmount *mnt,
-+ int flags, struct lookup_intent *it);
-+
- struct file *filp_open(const char * filename, int flags, int mode)
- {
- int namei_flags, error;
- struct nameidata nd;
-+ struct lookup_intent it = { .it_op = IT_OPEN };
-
- namei_flags = flags;
- if ((namei_flags+1) & O_ACCMODE)
-@@ -649,18 +678,19 @@ struct file *filp_open(const char * file
- if (namei_flags & O_TRUNC)
- namei_flags |= 2;
-
-- error = open_namei(filename, namei_flags, mode, &nd);
-- if (!error)
-- return dentry_open(nd.dentry, nd.mnt, flags);
-+ error = open_namei_it(filename, namei_flags, mode, &nd, &it);
-+ if (error)
-+ return ERR_PTR(error);
-
-- return ERR_PTR(error);
-+ return dentry_open_it(nd.dentry, nd.mnt, flags, &it);
- }
-
- extern ssize_t do_readahead(struct file *file, unsigned long index, unsigned long nr);
+@@ -628,7 +651,8 @@ extern ssize_t do_readahead(struct file
/* for files over a certains size it doesn't pay to do readahead on open */
#define READAHEAD_CUTOFF 48000
{
struct file * f;
struct inode *inode;
-@@ -711,6 +741,7 @@ struct file *dentry_open(struct dentry *
+@@ -693,6 +717,7 @@ struct file *dentry_open(struct dentry *
do_readahead(f, 0, (48 * 1024) >> PAGE_SHIFT);
return f;
cleanup_all:
-@@ -725,11 +756,17 @@ cleanup_all:
+@@ -707,11 +732,17 @@ cleanup_all:
cleanup_file:
put_filp(f);
cleanup_dentry:
/*
* Find an empty file descriptor entry, and mark it busy.
*/
---- linux-2.4.18-17.8.0/fs/stat.c~vfs_intent 2002-12-06 14:52:31.000000000 -0800
-+++ linux-2.4.18-17.8.0-zab/fs/stat.c 2002-12-06 14:52:31.000000000 -0800
+--- linux-2.4.18-p4smp-l6/fs/stat.c~vfs_intent Fri Jan 17 12:44:40 2003
++++ linux-2.4.18-p4smp-l6-root/fs/stat.c Fri Jan 17 12:44:40 2003
@@ -13,6 +13,7 @@
#include <asm/uaccess.h>
path_release(&nd);
}
return error;
---- linux-2.4.18-17.8.0/include/linux/dcache.h~vfs_intent 2002-12-06 14:52:31.000000000 -0800
-+++ linux-2.4.18-17.8.0-zab/include/linux/dcache.h 2002-12-06 14:52:31.000000000 -0800
+--- linux-2.4.18-p4smp-l6/include/linux/dcache.h~vfs_intent Fri Jan 17 12:44:40 2003
++++ linux-2.4.18-p4smp-l6-root/include/linux/dcache.h Fri Jan 17 12:44:40 2003
@@ -6,6 +6,34 @@
#include <asm/atomic.h>
#include <linux/mount.h>
};
/* the dentry parameter passed to d_hash and d_compare is the parent
---- linux-2.4.18-17.8.0/include/linux/fs.h~vfs_intent 2002-12-06 14:52:31.000000000 -0800
-+++ linux-2.4.18-17.8.0-zab/include/linux/fs.h 2002-12-06 14:52:31.000000000 -0800
+--- linux-2.4.18-p4smp-l6/include/linux/fs.h~vfs_intent Fri Jan 17 12:44:40 2003
++++ linux-2.4.18-p4smp-l6-root/include/linux/fs.h Fri Jan 17 12:44:40 2003
@@ -576,6 +576,7 @@ struct file {
/* needed for tty driver, and maybe others */
void (*truncate) (struct inode *);
int (*permission) (struct inode *, int);
int (*revalidate) (struct dentry *);
-@@ -1381,6 +1387,7 @@ typedef int (*read_actor_t)(read_descrip
+@@ -1383,6 +1389,7 @@ typedef int (*read_actor_t)(read_descrip
extern loff_t default_llseek(struct file *file, loff_t offset, int origin);
extern int FASTCALL(__user_walk(const char *, unsigned, struct nameidata *));
extern int FASTCALL(path_init(const char *, unsigned, struct nameidata *));
extern int FASTCALL(path_walk(const char *, struct nameidata *));
extern int FASTCALL(path_lookup(const char *, unsigned, struct nameidata *));
-@@ -1392,6 +1399,8 @@ extern struct dentry * lookup_one_len(co
+@@ -1394,6 +1401,8 @@ extern struct dentry * lookup_one_len(co
extern struct dentry * lookup_hash(struct qstr *, struct dentry *);
#define user_path_walk(name,nd) __user_walk(name, LOOKUP_FOLLOW|LOOKUP_POSITIVE, nd)
#define user_path_walk_link(name,nd) __user_walk(name, LOOKUP_POSITIVE, nd)
extern void inode_init_once(struct inode *);
extern void iput(struct inode *);
-@@ -1492,6 +1501,8 @@ extern struct file_operations generic_ro
+@@ -1494,6 +1503,8 @@ extern struct file_operations generic_ro
extern int vfs_readlink(struct dentry *, char *, int, const char *);
extern int vfs_follow_link(struct nameidata *, const char *);
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.18-17.8.0/kernel/ksyms.c~vfs_intent 2002-12-06 14:52:31.000000000 -0800
-+++ linux-2.4.18-17.8.0-zab/kernel/ksyms.c 2002-12-06 14:52:31.000000000 -0800
-@@ -293,6 +293,7 @@ EXPORT_SYMBOL(read_cache_page);
+--- linux-2.4.18-p4smp-l6/kernel/ksyms.c~vfs_intent Fri Jan 17 12:44:40 2003
++++ linux-2.4.18-p4smp-l6-root/kernel/ksyms.c Fri Jan 17 12:44:40 2003
+@@ -294,6 +294,7 @@ EXPORT_SYMBOL(read_cache_page);
EXPORT_SYMBOL(set_page_dirty);
EXPORT_SYMBOL(vfs_readlink);
EXPORT_SYMBOL(vfs_follow_link);