Whamcloud - gitweb
Branch HEAD
[fs/lustre-release.git] / lustre / kernel_patches / patches / nfs_export_kernel-getattr_on_lookup-2.4.patch
1 --- linux-2.4.24orig/include/linux/fs.h.orig    2006-07-21 13:03:15.000000000 +0300\r
2 +++ linux-2.4.24/include/linux/fs.h     2006-07-21 13:03:46.000000000 +0300\r
3 @@ -1128,6 +1128,8 @@ extern int open_namei_it(const char *fil\r
4  extern struct file *dentry_open_it(struct dentry *dentry, struct vfsmount *mnt,\r
5                             int flags, struct lookup_intent *it);\r
6  extern int revalidate_it(struct dentry *dentry, struct lookup_intent *it);\r
7 +struct dentry * lookup_one_len_getattr(const char * name, struct dentry * base,\r
8 +                                       int len);\r
9  extern int init_private_file_it(struct file *, struct dentry *dentry, int mode,\r
10                                 struct lookup_intent *it);\r
11  extern int filp_close(struct file *, fl_owner_t id);\r
12 --- linux-2.4.24orig/fs/nfsd/vfs.c.orig 2006-07-21 12:52:07.000000000 +0300\r
13 +++ linux-2.4.24/fs/nfsd/vfs.c  2006-07-21 13:28:15.000000000 +0300\r
14 @@ -198,6 +198,30 @@ int revalidate_it(struct dentry *dentry,\r
15         return err;\r
16  }\r
17  \r
18 +struct dentry * lookup_one_len_getattr(const char * name, struct dentry * base,\r
19 +                                      int len)\r
20 +{\r
21 +       struct lookup_intent it;\r
22 +       struct dentry *de;\r
23 +\r
24 +       intent_init(&it, IT_GETATTR, 0);\r
25 +\r
26 +        de = lookup_one_len_it(name, base, len, NULL);\r
27 +\r
28 +       if (!IS_ERR(de) && de->d_inode) {\r
29 +               if (de->d_inode->i_op && de->d_inode->i_op->revalidate_it)\r
30 +                       de->d_inode->i_op->revalidate_it(de, &it);\r
31 +               else if (de->d_inode->i_op && de->d_inode->i_op->revalidate)\r
32 +                       de->d_inode->i_op->revalidate(de);\r
33 +       }\r
34 +\r
35 +        if (it.it_op_release)\r
36 +                intent_release(&it);\r
37 +\r
38 +       return de;\r
39 +}\r
40 +\r
41 +\r
42  /*\r
43   * Look up one component of a pathname.\r
44   * N.B. After this call _both_ fhp and resfh need an fh_put\r
45 @@ -263,7 +287,7 @@ nfsd_lookup(struct svc_rqst *rqstp, stru\r
46                 }\r
47         } else {\r
48                 fh_lock(fhp);\r
49 -               dentry = lookup_one_len(name, dparent, len);\r
50 +               dentry = lookup_one_len_getattr(name, dparent, len);\r
51                 err = PTR_ERR(dentry);\r
52                 if (IS_ERR(dentry))\r
53                         goto out_nfserr;\r
54 --- linux-2.4.24orig/fs/nfsd/nfs3xdr.c.orig     2006-07-21 13:02:18.000000000 +0300\r
55 +++ linux-2.4.24/fs/nfsd/nfs3xdr.c      2006-07-21 13:02:29.000000000 +0300\r
56 @@ -715,7 +715,7 @@ encode_entry(struct readdir_cd *cd, cons\r
57                                 dchild = dchild->d_parent;\r
58                         dchild = dget(dchild);\r
59                 } else\r
60 -                       dchild = lookup_one_len(name, dparent,namlen);\r
61 +                       dchild = lookup_one_len_getattr(name, dparent,namlen);\r
62                 if (IS_ERR(dchild))\r
63                         goto noexec;\r
64                 if (fh_compose(&fh, exp, dchild, cd->dirfh) != 0 || !dchild->d_inode)\r