Whamcloud - gitweb
Patches for 2.5.63. This wont work until lustre is patched for 2.5.
authoramrutjoshi <amrutjoshi>
Sat, 15 Mar 2003 16:20:08 +0000 (16:20 +0000)
committeramrutjoshi <amrutjoshi>
Sat, 15 Mar 2003 16:20:08 +0000 (16:20 +0000)
lustre/extN/extN.patch-2.5.63 [new file with mode: 0644]
lustre/kernel_patches/patches/lustre-2.5.63.patch [new file with mode: 0644]
lustre/kernel_patches/pc/lustre-2.5.63.pc [new file with mode: 0644]
lustre/kernel_patches/series/vanilla-2.5.63 [new file with mode: 0644]

diff --git a/lustre/extN/extN.patch-2.5.63 b/lustre/extN/extN.patch-2.5.63
new file mode 100644 (file)
index 0000000..e1bb363
--- /dev/null
@@ -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, <a.gruenbacher@computer.org>
+ */
+-
++#include <linux/module.h>
+ #include <linux/config.h>
+ #include <linux/xattr.h>
+
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 (file)
index 0000000..c857ca4
--- /dev/null
@@ -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 <linux/namei.h>
++
+ 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 (file)
index 0000000..daeea17
--- /dev/null
@@ -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 (file)
index 0000000..b77c77b
--- /dev/null
@@ -0,0 +1,2 @@
+lustre_version.patch
+lustre-2.5.63.patch