From: amrutjoshi Date: Sat, 15 Mar 2003 16:20:08 +0000 (+0000) Subject: Patches for 2.5.63. This wont work until lustre is patched for 2.5. X-Git-Tag: v1_7_100~1^94~59 X-Git-Url: https://git.whamcloud.com/?a=commitdiff_plain;h=bdaef4da1ce5334155da796d7cbdeadbadcc1de1;p=fs%2Flustre-release.git Patches for 2.5.63. This wont work until lustre is patched for 2.5. --- diff --git a/lustre/extN/extN.patch-2.5.63 b/lustre/extN/extN.patch-2.5.63 new file mode 100644 index 0000000..e1bb363 --- /dev/null +++ b/lustre/extN/extN.patch-2.5.63 @@ -0,0 +1,42 @@ +--- fs/extN/xattr.c Wed Mar 5 23:09:55 2003 ++++ fs/extN/xattr.c Tue Mar 11 17:57:24 2003 +@@ -1181,3 +1181,7 @@ + ext3_xattr_unregister(EXT3_XATTR_INDEX_USER, + &ext3_xattr_user_handler); + } ++ ++EXPORT_SYMBOL(extN_xattr_get); ++EXPORT_SYMBOL(extN_xattr_set); ++ +--- fs/extN/inode.c Wed Mar 5 23:09:55 2003 ++++ fs/extN/inode.c Tue Mar 11 18:24:42 2003 +@@ -1019,7 +1019,7 @@ + *err = -EIO; + return NULL; + } +- ++EXPORT_SYMBOL(extN_bread); + static int walk_page_buffers( handle_t *handle, + struct buffer_head *head, + unsigned from, +--- fs/extN/super.c Wed Mar 5 23:09:55 2003 ++++ fs/extN/super.c Tue Mar 11 18:28:01 2003 +@@ -1703,6 +1703,7 @@ + unlock_kernel(); + return ret; + } ++EXPORT_SYMBOL(extN_force_commit); + + /* + * Ext3 always journals updates to the superblock itself, so we don't +--- fs/extN/xattr.h Tue Mar 11 21:37:48 2003 ++++ fs/extN/xattr.h Tue Mar 11 21:18:12 2003 +@@ -5,7 +5,7 @@ + + (C) 2001 Andreas Gruenbacher, + */ +- ++#include + #include + #include + diff --git a/lustre/kernel_patches/patches/lustre-2.5.63.patch b/lustre/kernel_patches/patches/lustre-2.5.63.patch new file mode 100644 index 0000000..c857ca4 --- /dev/null +++ b/lustre/kernel_patches/patches/lustre-2.5.63.patch @@ -0,0 +1,547 @@ + arch/um/kernel/mem.c | 18 +++++++++++- + fs/dcache.c | 12 ++++++-- + fs/namei.c | 71 +++++++++++++++++++++++++++++++++++-------------- + fs/namespace.c | 1 + fs/nfsd/vfs.c | 2 - + fs/sysfs/inode.c | 2 - + include/linux/dcache.h | 28 +++++++++++++++++++ + include/linux/fs.h | 20 +++++++++++++ + include/linux/namei.h | 3 +- + include/linux/slab.h | 1 + kernel/ksyms.c | 7 ++++ + mm/slab.c | 5 +++ + net/unix/af_unix.c | 2 - + 13 files changed, 143 insertions(+), 29 deletions(-) + +--- linux-2.5.63/arch/um/kernel/mem.c~lustre-2.5.63 Thu Mar 13 20:57:08 2003 ++++ linux-2.5.63-kedar/arch/um/kernel/mem.c Thu Mar 13 20:57:08 2003 +@@ -660,6 +660,22 @@ struct page *pte_mem_map(pte_t pte) + return(phys_mem_map(pte_val(pte))); + } + ++struct page *check_get_page(unsigned long kaddr) ++{ ++ struct page *page; ++ struct mem_region *mr; ++ unsigned long phys = __pa(kaddr); ++ unsigned int n = phys_region_index(phys); ++ ++ if(regions[n] == NULL) ++ return NULL; ++ ++ mr = regions[n]; ++ page = (struct page *) mr->mem_map; ++ return page + ((phys_addr(phys)) >> PAGE_SHIFT); ++} ++ ++ + struct mem_region *page_region(struct page *page, int *index_out) + { + int i; +@@ -747,7 +763,7 @@ extern unsigned long region_pa(void *vir + (addr <= region->start + region->len)) + return(mk_phys(addr - region->start, i)); + } +- panic("region_pa : no region for virtual address"); ++ //panic("region_pa : no region for virtual address"); + return(0); + } + +--- linux-2.5.63/fs/namei.c~lustre-2.5.63 Thu Mar 13 20:57:08 2003 ++++ linux-2.5.63-kedar/fs/namei.c Thu Mar 13 20:57:08 2003 +@@ -265,6 +265,9 @@ int deny_write_access(struct file * file + + void path_release(struct nameidata *nd) + { ++ if (nd->dentry && nd->dentry->d_op && ++ nd->dentry->d_op->d_intent_release) ++ nd->dentry->d_op->d_intent_release(nd->dentry, &nd->it); + dput(nd->dentry); + mntput(nd->mnt); + } +@@ -273,10 +276,18 @@ void path_release(struct nameidata *nd) + * Internal lookup() using the new generic dcache. + * SMP-safe + */ +-static struct dentry * cached_lookup(struct dentry * parent, struct qstr * name, int flags) ++static struct dentry * cached_lookup(struct dentry * parent, struct qstr * name, int flags, struct lookup_intent *it) + { + struct dentry * dentry = d_lookup(parent, name); + ++ if (dentry && dentry->d_op && dentry->d_op->d_revalidate2) { ++ if (!dentry->d_op->d_revalidate2(dentry, flags, it) && ++ !d_invalidate(dentry)) { ++ dput(dentry); ++ dentry = NULL; ++ } ++ return dentry; ++ } else + if (dentry && dentry->d_op && dentry->d_op->d_revalidate) { + if (!dentry->d_op->d_revalidate(dentry, flags) && !d_invalidate(dentry)) { + dput(dentry); +@@ -330,7 +341,7 @@ ok: + * make sure that nobody added the entry to the dcache in the meantime.. + * SMP-safe + */ +-static struct dentry * real_lookup(struct dentry * parent, struct qstr * name, int flags) ++static struct dentry * real_lookup(struct dentry * parent, struct qstr * name, int flags, struct lookup_intent *it) + { + struct dentry * result; + struct inode *dir = parent->d_inode; +@@ -348,7 +359,10 @@ 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); ++ if (dir->i_op->lookup2) ++ result = dir->i_op->lookup2(dir, dentry, it); ++ else ++ result = dir->i_op->lookup(dir, dentry); + if (result) + dput(dentry); + else { +@@ -370,6 +384,12 @@ static struct dentry * real_lookup(struc + dput(result); + result = ERR_PTR(-ENOENT); + } ++ } else if (result->d_op && result->d_op->d_revalidate2) { ++ if (!result->d_op->d_revalidate2(result, flags, it) && ++ !d_invalidate(result)) { ++ dput(result); ++ result = ERR_PTR(-ENOENT); ++ } + } + return result; + } +@@ -531,7 +551,7 @@ done: + return 0; + + need_lookup: +- dentry = real_lookup(nd->dentry, name, LOOKUP_CONTINUE); ++ dentry = real_lookup(nd->dentry, name, LOOKUP_CONTINUE, &nd->it); + if (IS_ERR(dentry)) + goto fail; + goto done; +@@ -665,7 +685,7 @@ int link_path_walk(const char * name, st + nd->dentry = next.dentry; + } + err = -ENOTDIR; +- if (!inode->i_op->lookup) ++ if (!inode->i_op->lookup && !inode->i_op->lookup2) + break; + continue; + /* here ends the main loop */ +@@ -716,7 +736,8 @@ last_component: + break; + if (lookup_flags & LOOKUP_DIRECTORY) { + err = -ENOTDIR; +- if (!inode->i_op || !inode->i_op->lookup) ++ if (!inode->i_op || ++ (!inode->i_op->lookup && !inode->i_op->lookup2)) + break; + } + goto return_base; +@@ -857,7 +878,8 @@ int path_lookup(const char *name, unsign + * needs parent already locked. Doesn't follow mounts. + * SMP-safe. + */ +-struct dentry * lookup_hash(struct qstr *name, struct dentry * base) ++struct dentry * lookup_hash(struct qstr *name, struct dentry * base, ++ struct lookup_intent *it) + { + struct dentry * dentry; + struct inode *inode; +@@ -880,13 +902,16 @@ struct dentry * lookup_hash(struct qstr + goto out; + } + +- dentry = cached_lookup(base, name, 0); ++ dentry = cached_lookup(base, name, 0, it); + if (!dentry) { + struct dentry *new = d_alloc(base, name); + dentry = ERR_PTR(-ENOMEM); + if (!new) + goto out; +- dentry = inode->i_op->lookup(inode, new); ++ if (inode->i_op->lookup2) ++ dentry = inode->i_op->lookup2(inode, new, it); ++ else ++ dentry = inode->i_op->lookup(inode, new); + if (!dentry) { + dentry = new; + security_inode_post_lookup(inode, dentry); +@@ -898,7 +923,7 @@ out: + } + + /* SMP-safe */ +-struct dentry * lookup_one_len(const char * name, struct dentry * base, int len) ++struct dentry * lookup_one_len_it(const char * name, struct dentry * base, int len, struct lookup_intent *it) + { + unsigned long hash; + struct qstr this; +@@ -918,11 +943,16 @@ struct dentry * lookup_one_len(const cha + } + this.hash = end_name_hash(hash); + +- return lookup_hash(&this, base); ++ return lookup_hash(&this, base, it); + access: + return ERR_PTR(-EACCES); + } + ++struct dentry * lookup_one_len(const char * name, struct dentry * base, int len) ++{ ++ return lookup_one_len_it(name, base, len, NULL); ++} ++ + /* + * namei() + * +@@ -1239,7 +1269,7 @@ int open_namei(const char * pathname, in + + dir = nd->dentry; + down(&dir->d_inode->i_sem); +- dentry = lookup_hash(&nd->last, nd->dentry); ++ dentry = lookup_hash(&nd->last, nd->dentry, &nd->it); + + do_last: + error = PTR_ERR(dentry); +@@ -1342,7 +1372,7 @@ do_link: + } + dir = nd->dentry; + down(&dir->d_inode->i_sem); +- dentry = lookup_hash(&nd->last, nd->dentry); ++ dentry = lookup_hash(&nd->last, nd->dentry, &nd->it); + putname(nd->last.name); + goto do_last; + } +@@ -1356,7 +1386,7 @@ static struct dentry *lookup_create(stru + dentry = ERR_PTR(-EEXIST); + if (nd->last_type != LAST_NORM) + goto fail; +- dentry = lookup_hash(&nd->last, nd->dentry); ++ dentry = lookup_hash(&nd->last, nd->dentry, &nd->it); + if (IS_ERR(dentry)) + goto fail; + if (!is_dir && nd->last.name[nd->last.len] && !dentry->d_inode) +@@ -1588,7 +1618,7 @@ asmlinkage long sys_rmdir(const char * p + goto exit1; + } + down(&nd.dentry->d_inode->i_sem); +- dentry = lookup_hash(&nd.last, nd.dentry); ++ dentry = lookup_hash(&nd.last, nd.dentry, &nd.it); + error = PTR_ERR(dentry); + if (!IS_ERR(dentry)) { + error = vfs_rmdir(nd.dentry->d_inode, dentry); +@@ -1655,7 +1685,7 @@ asmlinkage long sys_unlink(const char * + if (nd.last_type != LAST_NORM) + goto exit1; + down(&nd.dentry->d_inode->i_sem); +- dentry = lookup_hash(&nd.last, nd.dentry); ++ dentry = lookup_hash(&nd.last, nd.dentry, &nd.it); + error = PTR_ERR(dentry); + if (!IS_ERR(dentry)) { + /* Why not before? Because we want correct error value */ +@@ -1934,7 +1964,8 @@ int vfs_rename_other(struct inode *old_d + } + + int vfs_rename(struct inode *old_dir, struct dentry *old_dentry, +- struct inode *new_dir, struct dentry *new_dentry) ++ struct inode *new_dir, struct dentry *new_dentry, ++ struct lookup_intent *it) + { + int error; + int is_dir = S_ISDIR(old_dentry->d_inode->i_mode); +@@ -2005,7 +2036,7 @@ static inline int do_rename(const char * + + trap = lock_rename(new_dir, old_dir); + +- old_dentry = lookup_hash(&oldnd.last, old_dir); ++ old_dentry = lookup_hash(&oldnd.last, old_dir, &oldnd.it); + error = PTR_ERR(old_dentry); + if (IS_ERR(old_dentry)) + goto exit3; +@@ -2025,7 +2056,7 @@ static inline int do_rename(const char * + error = -EINVAL; + if (old_dentry == trap) + goto exit4; +- new_dentry = lookup_hash(&newnd.last, new_dir); ++ new_dentry = lookup_hash(&newnd.last, new_dir, &newnd.it); + error = PTR_ERR(new_dentry); + if (IS_ERR(new_dentry)) + goto exit4; +@@ -2035,7 +2066,7 @@ static inline int do_rename(const char * + goto exit5; + + error = vfs_rename(old_dir->d_inode, old_dentry, +- new_dir->d_inode, new_dentry); ++ new_dir->d_inode, new_dentry, NULL); + exit5: + dput(new_dentry); + exit4: +--- linux-2.5.63/fs/nfsd/vfs.c~lustre-2.5.63 Thu Mar 13 20:57:08 2003 ++++ linux-2.5.63-kedar/fs/nfsd/vfs.c Thu Mar 13 20:57:08 2003 +@@ -1337,7 +1337,7 @@ nfsd_rename(struct svc_rqst *rqstp, stru + err = nfserr_perm; + } else + #endif +- err = vfs_rename(fdir, odentry, tdir, ndentry); ++ err = vfs_rename(fdir, odentry, tdir, ndentry, NULL); + if (!err && EX_ISSYNC(tfhp->fh_export)) { + nfsd_sync_dir(tdentry); + nfsd_sync_dir(fdentry); +--- linux-2.5.63/fs/sysfs/inode.c~lustre-2.5.63 Thu Mar 13 20:57:08 2003 ++++ linux-2.5.63-kedar/fs/sysfs/inode.c Thu Mar 13 20:57:08 2003 +@@ -540,7 +540,7 @@ static struct dentry * get_dentry(struct + qstr.name = name; + qstr.len = strlen(name); + qstr.hash = full_name_hash(name,qstr.len); +- return lookup_hash(&qstr,parent); ++ return lookup_hash(&qstr,parent,NULL); + } + + +--- linux-2.5.63/include/linux/dcache.h~lustre-2.5.63 Thu Mar 13 20:57:08 2003 ++++ linux-2.5.63-kedar/include/linux/dcache.h Thu Mar 13 20:57:08 2003 +@@ -12,6 +12,27 @@ + + struct vfsmount; + ++#define IT_OPEN (1) ++#define IT_CREAT (1<<1) ++#define IT_READDIR (1<<2) ++#define IT_GETATTR (1<<3) ++#define IT_LOOKUP (1<<4) ++#define IT_UNLINK (1<<5) ++ ++ ++struct lookup_intent { ++ int it_op; ++ int it_mode; ++ int it_flags; ++ int it_disposition; ++ int it_status; ++ struct iattr *it_iattr; ++ __u64 it_lock_handle[2]; ++ int it_lock_mode; ++ void *it_data; ++}; ++ ++ + /* + * linux/include/linux/dcache.h + * +@@ -34,6 +55,8 @@ struct qstr { + char name_str[0]; + }; + ++#include ++ + struct dentry_stat_t { + int nr_dentry; + int nr_unused; +@@ -87,6 +110,7 @@ struct dentry { + struct list_head d_subdirs; /* our children */ + struct list_head d_alias; /* inode alias list */ + int d_mounted; ++ struct lookup_intent *d_it; + struct qstr d_name; + struct qstr * d_qstr; /* quick str ptr used in lockless lookup and concurrent d_move */ + unsigned long d_time; /* used by d_revalidate */ +@@ -107,6 +131,8 @@ struct dentry_operations { + int (*d_delete)(struct dentry *); + void (*d_release)(struct dentry *); + void (*d_iput)(struct dentry *, struct inode *); ++ int (*d_revalidate2)(struct dentry *, int, struct lookup_intent *); ++ void (*d_intent_release)(struct dentry *, struct lookup_intent *); + }; + + /* the dentry parameter passed to d_hash and d_compare is the parent +@@ -147,6 +173,8 @@ d_iput: no no yes + + #define DCACHE_REFERENCED 0x0008 /* Recently used, don't discard. */ + #define DCACHE_UNHASHED 0x0010 ++#define DCACHE_LUSTRE_INVALID 0x0011 /* Lustre invalidated */ ++ + + extern spinlock_t dcache_lock; + extern rwlock_t dparent_lock; +--- linux-2.5.63/include/linux/fs.h~lustre-2.5.63 Thu Mar 13 20:57:08 2003 ++++ linux-2.5.63-kedar/include/linux/fs.h Thu Mar 13 20:57:08 2003 +@@ -234,6 +234,9 @@ typedef int (get_blocks_t)(struct inode + #define ATTR_ATTR_FLAG 1024 + #define ATTR_KILL_SUID 2048 + #define ATTR_KILL_SGID 4096 ++#define ATTR_RAW 8192 /* file system, not vfs will massage attrs */ ++#define ATTR_FROM_OPEN 16384 /* called from open path, ie O_TRUNC */ ++ + + /* + * This is the Inode Attributes structure, used for notify_change(). It +@@ -642,7 +645,7 @@ extern int vfs_symlink(struct inode *, s + extern int vfs_link(struct dentry *, struct inode *, struct dentry *); + extern int vfs_rmdir(struct inode *, struct dentry *); + extern int vfs_unlink(struct inode *, struct dentry *); +-extern int vfs_rename(struct inode *, struct dentry *, struct inode *, struct dentry *); ++extern int vfs_rename(struct inode *, struct dentry *, struct inode *, struct dentry *, struct lookup_intent *it); + + /* + * File types +@@ -728,19 +731,33 @@ struct file_operations { + struct inode_operations { + int (*create) (struct inode *,struct dentry *,int); + struct dentry * (*lookup) (struct inode *,struct dentry *); ++ struct dentry * (*lookup2) (struct inode *,struct dentry *, ++ struct lookup_intent *); + int (*link) (struct dentry *,struct inode *,struct dentry *); ++ int (*link2) (struct inode *,struct inode *, const char *, int); + int (*unlink) (struct inode *,struct dentry *); ++ int (*unlink2) (struct inode *, const char *, int); + int (*symlink) (struct inode *,struct dentry *,const char *); ++ int (*symlink2) (struct inode *, const char *, int, const char *); + int (*mkdir) (struct inode *,struct dentry *,int); ++ int (*mkdir2) (struct inode *, const char *, int,int); + int (*rmdir) (struct inode *,struct dentry *); ++ int (*rmdir2) (struct inode *, const char *, int); + int (*mknod) (struct inode *,struct dentry *,int,dev_t); ++ int (*mknod2) (struct inode *, const char *, int,int,int); + int (*rename) (struct inode *, struct dentry *, + struct inode *, struct dentry *); ++ int (*rename2) (struct inode *, struct inode *, ++ const char *oldname, int oldlen, ++ const char *newname, int newlen); + int (*readlink) (struct dentry *, char *,int); + int (*follow_link) (struct dentry *, struct nameidata *); ++ int (*follow_link2) (struct dentry *, struct nameidata *, ++ struct lookup_intent *it); + void (*truncate) (struct inode *); + int (*permission) (struct inode *, int); + int (*setattr) (struct dentry *, struct iattr *); ++ int (*setattr_raw) (struct inode *, struct iattr *); + int (*getattr) (struct vfsmount *mnt, struct dentry *, struct kstat *); + int (*setxattr) (struct dentry *, const char *,const void *,size_t,int); + ssize_t (*getxattr) (struct dentry *, const char *, void *, size_t,int); +@@ -953,6 +970,7 @@ extern int register_filesystem(struct fi + extern int unregister_filesystem(struct file_system_type *); + extern struct vfsmount *kern_mount(struct file_system_type *); + extern int may_umount(struct vfsmount *); ++struct vfsmount *do_kern_mount(const char *type, int flags, char *name, void *data); + extern long do_mount(char *, char *, char *, unsigned long, void *); + + extern int vfs_statfs(struct super_block *, struct statfs *); +--- linux-2.5.63/include/linux/namei.h~lustre-2.5.63 Thu Mar 13 20:57:08 2003 ++++ linux-2.5.63-kedar/include/linux/namei.h Thu Mar 13 20:57:08 2003 +@@ -11,6 +11,7 @@ struct nameidata { + struct qstr last; + unsigned int flags; + int last_type; ++ struct lookup_intent it; + }; + + /* +@@ -44,7 +45,7 @@ extern int FASTCALL(link_path_walk(const + extern void path_release(struct nameidata *); + + extern struct dentry * lookup_one_len(const char *, struct dentry *, int); +-extern struct dentry * lookup_hash(struct qstr *, struct dentry *); ++extern struct dentry * lookup_hash(struct qstr *, struct dentry *, struct lookup_intent *); + + extern int follow_down(struct vfsmount **, struct dentry **); + extern int follow_up(struct vfsmount **, struct dentry **); +--- linux-2.5.63/include/linux/slab.h~lustre-2.5.63 Thu Mar 13 20:57:08 2003 ++++ linux-2.5.63-kedar/include/linux/slab.h Thu Mar 13 20:57:08 2003 +@@ -55,6 +55,7 @@ extern int kmem_cache_destroy(kmem_cache + extern int kmem_cache_shrink(kmem_cache_t *); + extern void *kmem_cache_alloc(kmem_cache_t *, int); + extern void kmem_cache_free(kmem_cache_t *, void *); ++extern int kmem_cache_validate(kmem_cache_t *cachep, void *objp); + extern unsigned int kmem_cache_size(kmem_cache_t *); + + extern void *kmalloc(size_t, int); +--- linux-2.5.63/kernel/ksyms.c~lustre-2.5.63 Thu Mar 13 20:57:08 2003 ++++ linux-2.5.63-kedar/kernel/ksyms.c Thu Mar 13 20:57:08 2003 +@@ -377,6 +377,7 @@ EXPORT_SYMBOL(unregister_filesystem); + EXPORT_SYMBOL(kern_mount); + EXPORT_SYMBOL(__mntput); + EXPORT_SYMBOL(may_umount); ++EXPORT_SYMBOL(reparent_to_init); + + /* executable format registration */ + EXPORT_SYMBOL(register_binfmt); +@@ -407,6 +408,12 @@ EXPORT_SYMBOL(request_irq); + EXPORT_SYMBOL(free_irq); + EXPORT_SYMBOL(irq_stat); + ++/* lustre */ ++EXPORT_SYMBOL(do_kern_mount); ++EXPORT_SYMBOL(exit_files); ++EXPORT_SYMBOL(kmem_cache_validate); ++ ++ + /* waitqueue handling */ + EXPORT_SYMBOL(add_wait_queue); + EXPORT_SYMBOL(add_wait_queue_exclusive); +--- linux-2.5.63/mm/slab.c~lustre-2.5.63 Thu Mar 13 20:57:08 2003 ++++ linux-2.5.63-kedar/mm/slab.c Thu Mar 13 20:57:08 2003 +@@ -1792,6 +1792,11 @@ static inline void __cache_free (kmem_ca + } + } + ++int kmem_cache_validate(kmem_cache_t *cachep, void *objp) ++{ ++ return 1; ++} ++ + /** + * kmem_cache_alloc - Allocate an object + * @cachep: The cache to allocate from. +--- linux-2.5.63/net/unix/af_unix.c~lustre-2.5.63 Thu Mar 13 20:57:08 2003 ++++ linux-2.5.63-kedar/net/unix/af_unix.c Thu Mar 13 20:57:08 2003 +@@ -720,7 +720,7 @@ static int unix_bind(struct socket *sock + /* + * Do the final lookup. + */ +- dentry = lookup_hash(&nd.last, nd.dentry); ++ dentry = lookup_hash(&nd.last, nd.dentry, NULL); + err = PTR_ERR(dentry); + if (IS_ERR(dentry)) + goto out_mknod_unlock; +--- linux-2.5.63/fs/dcache.c~lustre-2.5.63 Thu Mar 13 20:57:08 2003 ++++ linux-2.5.63-kedar/fs/dcache.c Thu Mar 13 20:57:08 2003 +@@ -1111,15 +1111,21 @@ void d_delete(struct dentry * dentry) + * Adds a dentry to the hash according to its name. + */ + +-void d_rehash(struct dentry * entry) ++void __d_rehash(struct dentry * entry, int lock) + { + struct list_head *list = d_hash(entry->d_parent, entry->d_name.hash); +- spin_lock(&dcache_lock); ++ if (lock) spin_lock(&dcache_lock); + if (!list_empty(&entry->d_hash) && !d_unhashed(entry)) BUG(); + entry->d_vfs_flags &= ~DCACHE_UNHASHED; + entry->d_bucket = list; + list_add_rcu(&entry->d_hash, list); +- spin_unlock(&dcache_lock); ++ if (lock) spin_unlock(&dcache_lock); ++} ++EXPORT_SYMBOL(__d_rehash); ++ ++void d_rehash(struct dentry * entry) ++{ ++ __d_rehash(entry, 1); + } + + #define do_switch(x,y) do { \ +--- linux-2.5.63/fs/namespace.c~lustre-2.5.63 Thu Mar 13 20:58:54 2003 ++++ linux-2.5.63-kedar/fs/namespace.c Thu Mar 13 20:59:22 2003 +@@ -925,6 +925,7 @@ void set_fs_pwd(struct fs_struct *fs, st + mntput(old_pwdmnt); + } + } ++EXPORT_SYMBOL(set_fs_pwd); + + static void chroot_fs_refs(struct nameidata *old_nd, struct nameidata *new_nd) + { + +_ diff --git a/lustre/kernel_patches/pc/lustre-2.5.63.pc b/lustre/kernel_patches/pc/lustre-2.5.63.pc new file mode 100644 index 0000000..daeea17 --- /dev/null +++ b/lustre/kernel_patches/pc/lustre-2.5.63.pc @@ -0,0 +1,12 @@ +arch/um/kernel/mem.c +fs/namei.c +fs/nfsd/vfs.c +fs/sysfs/inode.c +include/linux/dcache.h +include/linux/fs.h +include/linux/namei.h +include/linux/slab.h +kernel/ksyms.c +mm/slab.c +net/unix/af_unix.c +fs/dcache.c diff --git a/lustre/kernel_patches/series/vanilla-2.5.63 b/lustre/kernel_patches/series/vanilla-2.5.63 new file mode 100644 index 0000000..b77c77b --- /dev/null +++ b/lustre/kernel_patches/series/vanilla-2.5.63 @@ -0,0 +1,2 @@ +lustre_version.patch +lustre-2.5.63.patch