From c5d2513f4c1bc18d8436c128b60586e004aec997 Mon Sep 17 00:00:00 2001 From: braam Date: Fri, 17 Jan 2003 20:08:56 +0000 Subject: [PATCH] - patch kernel patches for "rm -i" problem this was erroneous failure handling for open. --- lustre/kernel_patches/patches/lustre_version.patch | 9 +- lustre/kernel_patches/patches/vfs_intent.patch | 269 ++++++++++----------- lustre/kernel_patches/which_patch | 2 + 3 files changed, 136 insertions(+), 144 deletions(-) diff --git a/lustre/kernel_patches/patches/lustre_version.patch b/lustre/kernel_patches/patches/lustre_version.patch index 2e69e01..9f5235a 100644 --- a/lustre/kernel_patches/patches/lustre_version.patch +++ b/lustre/kernel_patches/patches/lustre_version.patch @@ -1,11 +1,12 @@ - 0 files changed + include/linux/lustre_version.h | 1 + + 1 files changed, 1 insertion(+) ---- /dev/null 2002-08-30 16:31:37.000000000 -0700 -+++ linux-2.4.18-17.8.0-zab/include/linux/lustre_version.h 2002-12-06 14:52:30.000000000 -0800 +--- /dev/null Fri Aug 30 17:31:37 2002 ++++ lum-2.4.18-18.8.0-l6-root/include/linux/lustre_version.h Fri Jan 17 12:10:36 2003 @@ -0,0 +1 @@ -+#define LUSTRE_KERNEL_VERSION 5 ++#define LUSTRE_KERNEL_VERSION 6 _ diff --git a/lustre/kernel_patches/patches/vfs_intent.patch b/lustre/kernel_patches/patches/vfs_intent.patch index 54c498a..7c67714 100644 --- a/lustre/kernel_patches/patches/vfs_intent.patch +++ b/lustre/kernel_patches/patches/vfs_intent.patch @@ -1,10 +1,18 @@ - 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); @@ -22,8 +30,8 @@ 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 @@ + + @@ -209,7 +217,14 @@ 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; } @@ -232,7 +247,7 @@ } /* 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 */ @@ -250,7 +265,7 @@ 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. */ @@ -260,7 +275,7 @@ { 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; } @@ -278,7 +293,7 @@ dentry = inode->i_op->lookup(inode, new); unlock_kernel(); if (!dentry) -@@ -820,6 +885,12 @@ out: +@@ -820,6 +887,12 @@ out: return dentry; } @@ -291,7 +306,7 @@ /* 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); @@ -300,7 +315,7 @@ 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; } @@ -324,54 +339,61 @@ /* * 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; @@ -380,47 +402,46 @@ + 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) @@ -429,7 +450,7 @@ { 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; @@ -438,7 +459,7 @@ 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; @@ -446,7 +467,7 @@ 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; @@ -455,7 +476,7 @@ 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; } @@ -463,7 +484,7 @@ 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; @@ -471,7 +492,7 @@ 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; @@ -485,7 +506,7 @@ 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; @@ -493,7 +514,7 @@ 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); @@ -506,7 +527,7 @@ 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; @@ -514,7 +535,7 @@ 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); @@ -523,7 +544,7 @@ 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: @@ -531,7 +552,7 @@ 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; @@ -539,7 +560,7 @@ 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; @@ -553,7 +574,7 @@ 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; @@ -561,7 +582,7 @@ 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; @@ -570,7 +591,7 @@ 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; @@ -584,7 +605,7 @@ 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, @@ -594,7 +615,7 @@ { 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); @@ -602,7 +623,7 @@ 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, @@ -612,7 +633,7 @@ { 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); @@ -620,7 +641,7 @@ 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, @@ -638,7 +659,7 @@ 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; @@ -646,7 +667,7 @@ 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); @@ -655,7 +676,7 @@ 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; } @@ -679,7 +700,7 @@ 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 @@ -689,7 +710,7 @@ { 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; } @@ -698,7 +719,7 @@ 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) { @@ -713,7 +734,7 @@ } /* 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); @@ -722,8 +743,8 @@ 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 @@ -733,8 +754,8 @@ 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 @@ -919,39 +940,7 @@ 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 @@ -961,7 +950,7 @@ { 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); @@ -969,7 +958,7 @@ return f; cleanup_all: -@@ -725,11 +756,17 @@ cleanup_all: +@@ -707,11 +732,17 @@ cleanup_all: cleanup_file: put_filp(f); cleanup_dentry: @@ -987,8 +976,8 @@ /* * 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 @@ -1025,8 +1014,8 @@ 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 #include @@ -1079,8 +1068,8 @@ }; /* 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 */ @@ -1117,7 +1106,7 @@ 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 *)); @@ -1125,7 +1114,7 @@ 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) @@ -1134,7 +1123,7 @@ 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 *); @@ -1143,9 +1132,9 @@ 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); diff --git a/lustre/kernel_patches/which_patch b/lustre/kernel_patches/which_patch index 45e259a..284d221 100644 --- a/lustre/kernel_patches/which_patch +++ b/lustre/kernel_patches/which_patch @@ -1,3 +1,5 @@ +series/chaos + chaos-39 series/rh-8.0 redhat 2.4.18-14 redhat 2.4.18-17 -- 1.8.3.1