Whamcloud - gitweb
Merge b_intent into b_md:
authorpschwan <pschwan>
Fri, 31 Jan 2003 21:37:19 +0000 (21:37 +0000)
committerpschwan <pschwan>
Fri, 31 Jan 2003 21:37:19 +0000 (21:37 +0000)
- New kernel patch (version 9)
- DLM hooks to revalidate locked data, once the lock is granted (604)
- Further MDS reorganization, particularly of the open and o_creat paths

lustre/kernel_patches/patches/lustre_version.patch
lustre/kernel_patches/patches/vfs_intent.patch

index 3af2550..a9cc71f 100644 (file)
@@ -7,6 +7,6 @@
 --- /dev/null  Fri Aug 30 17:31:37 2002
 +++ linux-2.4.18-18.8.0-l7-root/include/linux/lustre_version.h Mon Jan 20 12:24:45 2003
 @@ -0,0 +1 @@
-+#define LUSTRE_KERNEL_VERSION 8
++#define LUSTRE_KERNEL_VERSION 9
 
 _
index 611104d..75e404b 100644 (file)
@@ -1,27 +1,15 @@
-
-
-
- fs/dcache.c            |   10 +
- fs/namei.c             |  309 +++++++++++++++++++++++++++++++++++++++++--------
+ fs/dcache.c            |    8 +
+ fs/namei.c             |  287 ++++++++++++++++++++++++++++++++++++++++---------
  fs/nfsd/vfs.c          |    2 
- fs/open.c              |   53 ++++++--
+ fs/open.c              |   53 +++++++--
  fs/stat.c              |    9 +
- include/linux/dcache.h |   32 +++++
+ include/linux/dcache.h |   25 ++++
  include/linux/fs.h     |   22 +++
  kernel/ksyms.c         |    1 
- 8 files changed, 375 insertions(+), 63 deletions(-)
+ 8 files changed, 344 insertions(+), 63 deletions(-)
 
---- linux-2.4.18-p4smp-chaos39-l6/fs/dcache.c~vfs_intent       Mon Jan 20 12:34:45 2003
-+++ linux-2.4.18-p4smp-chaos39-l6-root/fs/dcache.c     Mon Jan 20 12:35:53 2003
-@@ -150,6 +150,8 @@ repeat:
- unhash_it:
-       list_del_init(&dentry->d_hash);
-+
-+
- kill_it: {
-               struct dentry *parent;
-               list_del(&dentry->d_child);
+--- linux-2.4.18-18.8.0-l7/fs/dcache.c~vfs_intent-2.4.18-18    Mon Jan 20 08:28:00 2003
++++ linux-2.4.18-18.8.0-l7-root/fs/dcache.c    Mon Jan 20 08:54:54 2003
 @@ -186,6 +188,13 @@ int d_invalidate(struct dentry * dentry)
                spin_unlock(&dcache_lock);
                return 0;
        INIT_LIST_HEAD(&dentry->d_hash);
        INIT_LIST_HEAD(&dentry->d_lru);
        INIT_LIST_HEAD(&dentry->d_subdirs);
---- linux-2.4.18-p4smp-chaos39-l6/fs/namei.c~vfs_intent        Mon Jan 20 12:34:45 2003
-+++ linux-2.4.18-p4smp-chaos39-l6-root/fs/namei.c      Mon Jan 20 12:34:45 2003
-@@ -1,3 +1,6 @@
-+
-+
-+
- /*
-  *  linux/fs/namei.c
-  *
-@@ -94,6 +97,14 @@
+--- linux-2.4.18-18.8.0-l7/fs/namei.c~vfs_intent-2.4.18-18     Mon Jan 20 12:25:10 2003
++++ linux-2.4.18-18.8.0-l7-root/fs/namei.c     Wed Jan 22 22:53:28 2003
+@@ -94,6 +97,13 @@
   * XEmacs seems to be relying on it...
   */
  
@@ -64,7 +45,6 @@
 +
 +}
 +
-+
  /* In order to reduce some races, while at the same time doing additional
   * checking and hopefully speeding things up, we copy filenames to the
   * kernel data space before using them..
        struct dentry *dir;
        int flag = open_flags;
        struct nameidata nd;
-+      struct lookup_intent it = { .it_op = IT_OPEN };
++      struct lookup_intent it = { .it_op = IT_OPEN, .it_flags = open_flags };
        int count = 0;
  
        if ((flag+1) & O_ACCMODE)
        if (IS_ERR(dentry))
                goto fail;
        if (!is_dir && nd->last.name[nd->last.len] && !dentry->d_inode)
-@@ -1254,6 +1360,7 @@ asmlinkage long sys_mknod(const char * f
-       char * tmp;
-       struct dentry * dentry;
-       struct nameidata nd;
-+      struct lookup_intent it = { .it_op = IT_MKNOD, .it_mode = mode };
-       if (S_ISDIR(mode))
-               return -EPERM;
-@@ -1264,7 +1371,19 @@ asmlinkage long sys_mknod(const char * f
+@@ -1264,7 +1370,19 @@ asmlinkage long sys_mknod(const char * f
        error = path_lookup(tmp, LOOKUP_PARENT, &nd);
        if (error)
                goto out;
 +                      goto out2;
 +      }
 +
-+      dentry = lookup_create(&nd, 0, &it);
++      dentry = lookup_create(&nd, 0, NULL);
        error = PTR_ERR(dentry);
  
        mode &= ~current->fs->umask;
-@@ -1282,9 +1401,11 @@ asmlinkage long sys_mknod(const char * f
-               default:
-                       error = -EINVAL;
-               }
-+              intent_release(dentry, &it);
+@@ -1285,6 +1403,7 @@ asmlinkage long sys_mknod(const char * f
                dput(dentry);
        }
        up(&nd.dentry->d_inode->i_sem);
        path_release(&nd);
  out:
        putname(tmp);
-@@ -1322,6 +1443,7 @@ asmlinkage long sys_mkdir(const char * p
- {
-       int error = 0;
-       char * tmp;
-+      struct lookup_intent it = { .it_op = IT_MKDIR, .it_mode = mode };
-       tmp = getname(pathname);
-       error = PTR_ERR(tmp);
-@@ -1332,14 +1454,26 @@ asmlinkage long sys_mkdir(const char * p
+@@ -1332,7 +1451,17 @@ asmlinkage long sys_mkdir(const char * p
                error = path_lookup(tmp, LOOKUP_PARENT, &nd);
                if (error)
                        goto out;
 +                      if (error != -EOPNOTSUPP)
 +                              goto out2;
 +              }
-+              dentry = lookup_create(&nd, 1, &it);
++              dentry = lookup_create(&nd, 1, NULL);
                error = PTR_ERR(dentry);
                if (!IS_ERR(dentry)) {
                        error = vfs_mkdir(nd.dentry->d_inode, dentry,
-                                         mode & ~current->fs->umask);
-+                      intent_release(dentry, &it);
+@@ -1340,6 +1469,7 @@ asmlinkage long sys_mkdir(const char * p
                        dput(dentry);
                }
                up(&nd.dentry->d_inode->i_sem);
                path_release(&nd);
  out:
                putname(tmp);
-@@ -1420,6 +1554,7 @@ asmlinkage long sys_rmdir(const char * p
-       char * name;
-       struct dentry *dentry;
-       struct nameidata nd;
-+      struct lookup_intent it = { .it_op = IT_RMDIR };
-       name = getname(pathname);
-       if(IS_ERR(name))
-@@ -1440,11 +1575,21 @@ asmlinkage long sys_rmdir(const char * p
+@@ -1440,8 +1570,17 @@ asmlinkage long sys_rmdir(const char * p
                        error = -EBUSY;
                        goto exit1;
        }
 +      }
        down(&nd.dentry->d_inode->i_sem);
 -      dentry = lookup_hash(&nd.last, nd.dentry);
-+      dentry = lookup_hash_it(&nd.last, nd.dentry, &it);
++      dentry = lookup_hash_it(&nd.last, nd.dentry, NULL);
        error = PTR_ERR(dentry);
        if (!IS_ERR(dentry)) {
                error = vfs_rmdir(nd.dentry->d_inode, dentry);
-+              intent_release(dentry, &it);
-               dput(dentry);
-       }
-       up(&nd.dentry->d_inode->i_sem);
-@@ -1488,6 +1633,7 @@ asmlinkage long sys_unlink(const char * 
-       char * name;
-       struct dentry *dentry;
-       struct nameidata nd;
-+      struct lookup_intent it = { .it_op = IT_UNLINK };
-       name = getname(pathname);
-       if(IS_ERR(name))
-@@ -1499,8 +1645,17 @@ asmlinkage long sys_unlink(const char * 
+@@ -1499,8 +1638,17 @@ asmlinkage long sys_unlink(const char * 
        error = -EISDIR;
        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_it(&nd.last, nd.dentry, &it);
++      dentry = lookup_hash_it(&nd.last, nd.dentry, NULL);
        error = PTR_ERR(dentry);
        if (!IS_ERR(dentry)) {
                /* Why not before? Because we want correct error value */
-@@ -1508,6 +1663,7 @@ asmlinkage long sys_unlink(const char * 
-                       goto slashes;
-               error = vfs_unlink(nd.dentry->d_inode, dentry);
-       exit2:
-+              intent_release(dentry, &it);
-               dput(dentry);
-       }
-       up(&nd.dentry->d_inode->i_sem);
-@@ -1554,6 +1710,7 @@ asmlinkage long sys_symlink(const char *
-       int error = 0;
-       char * from;
-       char * to;
-+      struct lookup_intent it = { .it_op = IT_SYMLINK };
-       from = getname(oldname);
-       if(IS_ERR(from))
-@@ -1567,15 +1724,28 @@ asmlinkage long sys_symlink(const char *
+@@ -1567,15 +1715,26 @@ asmlinkage long sys_symlink(const char *
                error = path_lookup(to, LOOKUP_PARENT, &nd);
                if (error)
                        goto out;
 +                      if (error != -EOPNOTSUPP)
 +                              goto out2;
 +              }
-+              it.it_data = from;
-+              dentry = lookup_create(&nd, 0, &it);
++              dentry = lookup_create(&nd, 0, NULL);
                error = PTR_ERR(dentry);
                if (!IS_ERR(dentry)) {
                        error = vfs_symlink(nd.dentry->d_inode, dentry, from);
-+                      intent_release(dentry, &it);
                        dput(dentry);
                }
                up(&nd.dentry->d_inode->i_sem);
                putname(to);
        }
        putname(from);
-@@ -1635,6 +1805,7 @@ asmlinkage long sys_link(const char * ol
- {
-       int error;
-       char * to;
-+      struct lookup_intent it = { .it_op = IT_LINK };
-       to = getname(newname);
-       error = PTR_ERR(to);
-@@ -1642,7 +1813,7 @@ asmlinkage long sys_link(const char * ol
+@@ -1642,7 +1801,7 @@ asmlinkage long sys_link(const char * ol
                struct dentry *new_dentry;
                struct nameidata nd, old_nd;
  
 -              error = __user_walk(oldname, LOOKUP_POSITIVE, &old_nd);
-+              error = __user_walk_it(oldname, LOOKUP_POSITIVE, &old_nd, &it);
++              error = __user_walk_it(oldname, LOOKUP_POSITIVE, &old_nd, NULL);
                if (error)
                        goto exit;
                error = path_lookup(to, LOOKUP_PARENT, &nd);
-@@ -1651,10 +1822,22 @@ asmlinkage long sys_link(const char * ol
+@@ -1651,7 +1810,17 @@ asmlinkage long sys_link(const char * ol
                error = -EXDEV;
                if (old_nd.mnt != nd.mnt)
                        goto out_release;
 +                      if (error != -EOPNOTSUPP)
 +                              goto out_release;
 +              }
-+              it.it_op = IT_LINK2;
-+              new_dentry = lookup_create(&nd, 0, &it);
++              new_dentry = lookup_create(&nd, 0, NULL);
                error = PTR_ERR(new_dentry);
                if (!IS_ERR(new_dentry)) {
                        error = vfs_link(old_nd.dentry, nd.dentry->d_inode, new_dentry);
-+                      intent_release(new_dentry, &it);
-                       dput(new_dentry);
-               }
-               up(&nd.dentry->d_inode->i_sem);
-@@ -1695,7 +1878,8 @@ exit:
+@@ -1695,7 +1864,8 @@ exit:
   *       locking].
   */
  int vfs_rename_dir(struct inode *old_dir, struct dentry *old_dentry,
  {
        int error;
        struct inode *target;
-@@ -1753,6 +1937,7 @@ int vfs_rename_dir(struct inode *old_dir
+@@ -1753,6 +1923,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;
-@@ -1774,7 +1959,8 @@ out_unlock:
+@@ -1774,7 +1945,8 @@ out_unlock:
  }
  
  int vfs_rename_other(struct inode *old_dir, struct dentry *old_dentry,
  {
        int error;
  
-@@ -1805,6 +1991,7 @@ int vfs_rename_other(struct inode *old_d
+@@ -1805,6 +1977,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;
-@@ -1816,13 +2003,14 @@ int vfs_rename_other(struct inode *old_d
+@@ -1816,13 +1989,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);
-@@ -1839,6 +2027,7 @@ static inline int do_rename(const char *
-       int error = 0;
-       struct dentry * old_dir, * new_dir;
-       struct dentry * old_dentry, *new_dentry;
-+      struct lookup_intent it = { .it_op = IT_RENAME };
-       struct nameidata oldnd, newnd;
-       error = path_lookup(oldname, LOOKUP_PARENT, &oldnd);
-@@ -1862,9 +2051,23 @@ static inline int do_rename(const char *
+@@ -1862,9 +2036,23 @@ static inline int do_rename(const char *
        if (newnd.last_type != LAST_NORM)
                goto exit2;
  
        double_lock(new_dir, old_dir);
  
 -      old_dentry = lookup_hash(&oldnd.last, old_dir);
-+      old_dentry = lookup_hash_it(&oldnd.last, old_dir, &it);
++      old_dentry = lookup_hash_it(&oldnd.last, old_dir, NULL);
        error = PTR_ERR(old_dentry);
        if (IS_ERR(old_dentry))
                goto exit3;
-@@ -1880,18 +2083,21 @@ static inline int do_rename(const char *
+@@ -1880,14 +2068,14 @@ static inline int do_rename(const char *
                if (newnd.last.name[newnd.last.len])
                        goto exit4;
        }
 -      new_dentry = lookup_hash(&newnd.last, new_dir);
-+      it.it_op = IT_RENAME2;
-+      new_dentry = lookup_hash_it(&newnd.last, new_dir, &it);
++      new_dentry = lookup_hash_it(&newnd.last, new_dir, NULL);
        error = PTR_ERR(new_dentry);
        if (IS_ERR(new_dentry))
                goto exit4;
        lock_kernel();
        error = vfs_rename(old_dir->d_inode, old_dentry,
 -                                 new_dir->d_inode, new_dentry);
-+                                 new_dir->d_inode, new_dentry, &it);
++                                 new_dir->d_inode, new_dentry, NULL);
        unlock_kernel();
  
-+      intent_release(new_dentry, &it);
        dput(new_dentry);
- exit4:
-+      intent_release(old_dentry, &it);
-       dput(old_dentry);
- exit3:
-       double_up(&new_dir->d_inode->i_sem, &old_dir->d_inode->i_sem);
-@@ -1940,7 +2146,8 @@ out:
+@@ -1940,7 +2127,8 @@ out:
  }
  
  static inline int
  {
        int res = 0;
        char *name;
-@@ -1953,7 +2160,7 @@ __vfs_follow_link(struct nameidata *nd, 
+@@ -1953,7 +2141,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;
-@@ -1975,7 +2182,13 @@ fail:
+@@ -1975,7 +2163,13 @@ fail:
  
  int vfs_follow_link(struct nameidata *nd, const char *link)
  {
  }
  
  /* get the link contents into pagecache */
-@@ -2017,7 +2230,7 @@ int page_follow_link(struct dentry *dent
+@@ -2017,7 +2211,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-p4smp-chaos39-l6/fs/nfsd/vfs.c~vfs_intent     Mon Jan 20 12:34:45 2003
-+++ linux-2.4.18-p4smp-chaos39-l6-root/fs/nfsd/vfs.c   Mon Jan 20 12:34:45 2003
+--- linux-2.4.18-18.8.0-l7/fs/nfsd/vfs.c~vfs_intent-2.4.18-18  Mon Jan 20 12:25:10 2003
++++ linux-2.4.18-18.8.0-l7-root/fs/nfsd/vfs.c  Mon Jan 20 12:25:10 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-p4smp-chaos39-l6/fs/open.c~vfs_intent Mon Jan 20 12:34:45 2003
-+++ linux-2.4.18-p4smp-chaos39-l6-root/fs/open.c       Mon Jan 20 12:34:45 2003
+--- linux-2.4.18-18.8.0-l7/fs/open.c~vfs_intent-2.4.18-18      Mon Jan 20 12:25:10 2003
++++ linux-2.4.18-18.8.0-l7-root/fs/open.c      Wed Jan 22 10:39:31 2003
 @@ -19,6 +19,9 @@
  #include <asm/uaccess.h>
  
        struct nameidata nd;
        struct inode * inode;
        int error;
-+      struct lookup_intent it = { .it_op = IT_SETATTR };
++      struct lookup_intent it = { .it_op = IT_TRUNC };
  
        error = -EINVAL;
        if (length < 0) /* sorry, but loff_t says... */
  /*
   * Find an empty file descriptor entry, and mark it busy.
   */
---- linux-2.4.18-p4smp-chaos39-l6/fs/stat.c~vfs_intent Mon Jan 20 12:34:45 2003
-+++ linux-2.4.18-p4smp-chaos39-l6-root/fs/stat.c       Mon Jan 20 12:34:45 2003
+--- linux-2.4.18-18.8.0-l7/fs/stat.c~vfs_intent-2.4.18-18      Mon Jan 20 12:25:10 2003
++++ linux-2.4.18-18.8.0-l7-root/fs/stat.c      Mon Jan 20 12:25:10 2003
 @@ -13,6 +13,7 @@
  
  #include <asm/uaccess.h>
                path_release(&nd);
        }
        return error;
---- linux-2.4.18-p4smp-chaos39-l6/include/linux/dcache.h~vfs_intent    Mon Jan 20 12:34:45 2003
-+++ linux-2.4.18-p4smp-chaos39-l6-root/include/linux/dcache.h  Mon Jan 20 12:35:29 2003
-@@ -6,6 +6,34 @@
+--- linux-2.4.18-18.8.0-l7/include/linux/dcache.h~vfs_intent-2.4.18-18 Mon Jan 20 12:25:10 2003
++++ linux-2.4.18-18.8.0-l7-root/include/linux/dcache.h Wed Jan 22 19:38:12 2003
+@@ -6,6 +6,27 @@
  #include <asm/atomic.h>
  #include <linux/mount.h>
  
-+#define IT_OPEN  (1)
-+#define IT_CREAT  (1<<1)
-+#define IT_MKDIR  (1<<2)
-+#define IT_LINK  (1<<3)
-+#define IT_LINK2  (1<<4)
-+#define IT_SYMLINK  (1<<5)
-+#define IT_UNLINK  (1<<6)
-+#define IT_RMDIR  (1<<7)
-+#define IT_RENAME  (1<<8)
-+#define IT_RENAME2  (1<<9)
-+#define IT_READDIR  (1<<10)
-+#define IT_GETATTR  (1<<11)
-+#define IT_SETATTR  (1<<12)
-+#define IT_READLINK  (1<<13)
-+#define IT_MKNOD  (1<<14)
-+#define IT_LOOKUP  (1<<15)
++#define IT_OPEN     (1)
++#define IT_CREAT    (1<<1)
++#define IT_READDIR  (1<<2)
++#define IT_GETATTR  (1<<3)
++#define IT_SETATTR  (1<<4)
++#define IT_TRUNC    (1<<5)
++#define IT_READLINK (1<<6)
++#define IT_LOOKUP   (1<<7)
 +
 +struct lookup_intent {
 +      int it_op;
 +      int it_mode;
++      int it_flags;
 +      int it_disposition;
 +      int it_status;
 +      struct iattr *it_iattr;
  /*
   * linux/include/linux/dcache.h
   *
-@@ -78,6 +106,7 @@ struct dentry {
+@@ -78,6 +99,7 @@ struct dentry {
        unsigned long d_time;           /* used by d_revalidate */
        struct dentry_operations  *d_op;
        struct super_block * d_sb;      /* The root of the dentry tree */
        unsigned long d_vfs_flags;
        void * d_fsdata;                /* fs-specific data */
        void * d_extra_attributes;      /* TUX-specific data */
-@@ -91,6 +120,8 @@ struct dentry_operations {
+@@ -91,6 +113,8 @@ struct dentry_operations {
        int (*d_delete)(struct dentry *);
        void (*d_release)(struct dentry *);
        void (*d_iput)(struct dentry *, struct inode *);
  };
  
  /* the dentry parameter passed to d_hash and d_compare is the parent
-@@ -124,6 +155,7 @@ d_iput:            no              no              yes
+@@ -124,6 +148,7 @@ d_iput:            no              no              yes
                                         * s_nfsd_free_path semaphore will be down
                                         */
  #define DCACHE_REFERENCED     0x0008  /* Recently used, don't discard. */
  
  extern spinlock_t dcache_lock;
  
---- linux-2.4.18-p4smp-chaos39-l6/include/linux/fs.h~vfs_intent        Mon Jan 20 12:34:45 2003
-+++ linux-2.4.18-p4smp-chaos39-l6-root/include/linux/fs.h      Mon Jan 20 12:34:45 2003
+--- linux-2.4.18-18.8.0-l7/include/linux/fs.h~vfs_intent-2.4.18-18     Mon Jan 20 12:25:10 2003
++++ linux-2.4.18-18.8.0-l7-root/include/linux/fs.h     Wed Jan 22 22:46:13 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 *);
-@@ -1383,6 +1398,7 @@ typedef int (*read_actor_t)(read_descrip
+@@ -1381,6 +1396,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 *));
-@@ -1394,6 +1410,8 @@ extern struct dentry * lookup_one_len(co
+@@ -1392,6 +1408,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 *);
-@@ -1494,6 +1512,8 @@ extern struct file_operations generic_ro
+@@ -1492,6 +1510,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-p4smp-chaos39-l6/kernel/ksyms.c~vfs_intent    Mon Jan 20 12:34:45 2003
-+++ linux-2.4.18-p4smp-chaos39-l6-root/kernel/ksyms.c  Mon Jan 20 12:34:45 2003
-@@ -294,6 +294,7 @@ EXPORT_SYMBOL(read_cache_page);
+--- linux-2.4.18-18.8.0-l7/kernel/ksyms.c~vfs_intent-2.4.18-18 Mon Jan 20 12:25:10 2003
++++ linux-2.4.18-18.8.0-l7-root/kernel/ksyms.c Mon Jan 20 12:25:10 2003
+@@ -293,6 +293,7 @@ EXPORT_SYMBOL(read_cache_page);
  EXPORT_SYMBOL(set_page_dirty);
  EXPORT_SYMBOL(vfs_readlink);
  EXPORT_SYMBOL(vfs_follow_link);