]> git.ipfire.org Git - people/pmueller/ipfire-2.x.git/blob - src/patches/suse-2.6.27.31/patches.suse/nfsacl-client-cache-CHECK.diff
Add a patch to fix Intel E100 wake-on-lan problems.
[people/pmueller/ipfire-2.x.git] / src / patches / suse-2.6.27.31 / patches.suse / nfsacl-client-cache-CHECK.diff
1 From: Andreas Gruenbacher <agruen@suse.de>
2 Subject: nfsacl: improve cache consistency
3
4 (This one is currently disabled.)
5
6 Index: linux-2.6.11-rc2/fs/nfs/inode.c
7 ===================================================================
8 --- linux-2.6.11-rc2.orig/fs/nfs/inode.c
9 +++ linux-2.6.11-rc2/fs/nfs/inode.c
10 @@ -65,13 +65,8 @@ static int nfs_statfs(struct super_bloc
11 static int nfs_show_options(struct seq_file *, struct vfsmount *);
12
13 #ifdef CONFIG_NFS_ACL
14 -static void nfs_forget_cached_acls(struct inode *);
15 static void __nfs_forget_cached_acls(struct nfs_inode *nfsi);
16 #else
17 -static inline void nfs_forget_cached_acls(struct inode *inode)
18 -{
19 -}
20 -
21 static inline void __nfs_forget_cached_acls(struct nfs_inode *nfsi)
22 {
23 }
24 @@ -1188,7 +1183,7 @@ static void __nfs_forget_cached_acls(str
25 #endif /* CONFIG_NFS_ACL */
26
27 #ifdef CONFIG_NFS_ACL
28 -static void nfs_forget_cached_acls(struct inode *inode)
29 +void nfs_forget_cached_acls(struct inode *inode)
30 {
31 dprintk("NFS: nfs_forget_cached_acls(%s/%ld)\n", inode->i_sb->s_id,
32 inode->i_ino);
33 @@ -1293,6 +1288,8 @@ int nfs_refresh_inode(struct inode *inod
34 if ((fattr->valid & NFS_ATTR_WCC) != 0) {
35 if (timespec_equal(&inode->i_ctime, &fattr->pre_ctime))
36 memcpy(&inode->i_ctime, &fattr->ctime, sizeof(inode->i_ctime));
37 + else
38 + nfs_forget_cached_acls(inode);
39 if (timespec_equal(&inode->i_mtime, &fattr->pre_mtime))
40 memcpy(&inode->i_mtime, &fattr->mtime, sizeof(inode->i_mtime));
41 }
42 Index: linux-2.6.11-rc2/fs/nfs/nfs3proc.c
43 ===================================================================
44 --- linux-2.6.11-rc2.orig/fs/nfs/nfs3proc.c
45 +++ linux-2.6.11-rc2/fs/nfs/nfs3proc.c
46 @@ -876,7 +876,11 @@ nfs3_proc_setacls(struct inode *inode, s
47 acl = NULL;
48 }
49 }
50 - nfs_cache_acls(inode, acl, dfacl);
51 + if ((fattr.valid & NFS_ATTR_WCC) &&
52 + timespec_equal(&inode->i_ctime, &fattr.pre_ctime))
53 + nfs_cache_acls(inode, acl, dfacl);
54 + else
55 + nfs_forget_cached_acls(inode);
56 status = nfs_refresh_inode(inode, &fattr);
57 }
58
59 Index: linux-2.6.11-rc2/include/linux/nfs_fs.h
60 ===================================================================
61 --- linux-2.6.11-rc2.orig/include/linux/nfs_fs.h
62 +++ linux-2.6.11-rc2/include/linux/nfs_fs.h
63 @@ -293,6 +293,13 @@ extern struct inode *nfs_fhget(struct su
64 struct nfs_fattr *);
65 extern struct posix_acl *nfs_get_cached_acl(struct inode *, int);
66 extern void nfs_cache_acls(struct inode *, struct posix_acl *, struct posix_acl *);
67 +#ifdef CONFIG_NFS_ACL
68 +void nfs_forget_cached_acls(struct inode *);
69 +#else
70 +static inline void nfs_forget_cached_acls(struct inode *inode)
71 +{
72 +}
73 +#endif
74 extern int nfs_refresh_inode(struct inode *, struct nfs_fattr *);
75 extern int nfs_getattr(struct vfsmount *, struct dentry *, struct kstat *);
76 extern int nfs_permission(struct inode *, int, struct nameidata *);