Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenHarmony
kernel_linux
提交
a9a4a87a
K
kernel_linux
项目概览
OpenHarmony
/
kernel_linux
上一次同步 3 年多
通知
13
Star
8
Fork
2
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
K
kernel_linux
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
提交
a9a4a87a
编写于
10月 17, 2011
作者:
T
Trond Myklebust
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
NFS: Use the inode->i_version to cache NFSv4 change attribute information
Signed-off-by:
N
Trond Myklebust
<
Trond.Myklebust@netapp.com
>
上级
919066d6
变更
6
隐藏空白更改
内联
并排
Showing
6 changed file
with
14 addition
and
15 deletion
+14
-15
fs/nfs/delegation.c
fs/nfs/delegation.c
+1
-1
fs/nfs/fscache-index.c
fs/nfs/fscache-index.c
+2
-2
fs/nfs/inode.c
fs/nfs/inode.c
+8
-8
fs/nfs/nfs4proc.c
fs/nfs/nfs4proc.c
+2
-2
fs/nfs/write.c
fs/nfs/write.c
+1
-1
include/linux/nfs_fs.h
include/linux/nfs_fs.h
+0
-1
未找到文件。
fs/nfs/delegation.c
浏览文件 @
a9a4a87a
...
...
@@ -240,7 +240,7 @@ int nfs_inode_set_delegation(struct inode *inode, struct rpc_cred *cred, struct
sizeof
(
delegation
->
stateid
.
data
));
delegation
->
type
=
res
->
delegation_type
;
delegation
->
maxsize
=
res
->
maxsize
;
delegation
->
change_attr
=
nfsi
->
change_attr
;
delegation
->
change_attr
=
inode
->
i_version
;
delegation
->
cred
=
get_rpccred
(
cred
);
delegation
->
inode
=
inode
;
delegation
->
flags
=
1
<<
NFS_DELEGATION_REFERENCED
;
...
...
fs/nfs/fscache-index.c
浏览文件 @
a9a4a87a
...
...
@@ -212,7 +212,7 @@ static uint16_t nfs_fscache_inode_get_aux(const void *cookie_netfs_data,
auxdata
.
ctime
=
nfsi
->
vfs_inode
.
i_ctime
;
if
(
NFS_SERVER
(
&
nfsi
->
vfs_inode
)
->
nfs_client
->
rpc_ops
->
version
==
4
)
auxdata
.
change_attr
=
nfsi
->
change_attr
;
auxdata
.
change_attr
=
nfsi
->
vfs_inode
.
i_version
;
if
(
bufmax
>
sizeof
(
auxdata
))
bufmax
=
sizeof
(
auxdata
);
...
...
@@ -244,7 +244,7 @@ enum fscache_checkaux nfs_fscache_inode_check_aux(void *cookie_netfs_data,
auxdata
.
ctime
=
nfsi
->
vfs_inode
.
i_ctime
;
if
(
NFS_SERVER
(
&
nfsi
->
vfs_inode
)
->
nfs_client
->
rpc_ops
->
version
==
4
)
auxdata
.
change_attr
=
nfsi
->
change_attr
;
auxdata
.
change_attr
=
nfsi
->
vfs_inode
.
i_version
;
if
(
memcmp
(
data
,
&
auxdata
,
datalen
)
!=
0
)
return
FSCACHE_CHECKAUX_OBSOLETE
;
...
...
fs/nfs/inode.c
浏览文件 @
a9a4a87a
...
...
@@ -318,7 +318,7 @@ nfs_fhget(struct super_block *sb, struct nfs_fh *fh, struct nfs_fattr *fattr)
memset
(
&
inode
->
i_atime
,
0
,
sizeof
(
inode
->
i_atime
));
memset
(
&
inode
->
i_mtime
,
0
,
sizeof
(
inode
->
i_mtime
));
memset
(
&
inode
->
i_ctime
,
0
,
sizeof
(
inode
->
i_ctime
));
nfsi
->
change_attr
=
0
;
inode
->
i_version
=
0
;
inode
->
i_size
=
0
;
inode
->
i_nlink
=
0
;
inode
->
i_uid
=
-
2
;
...
...
@@ -344,7 +344,7 @@ nfs_fhget(struct super_block *sb, struct nfs_fh *fh, struct nfs_fattr *fattr)
|
NFS_INO_INVALID_ACCESS
|
NFS_INO_INVALID_ACL
;
if
(
fattr
->
valid
&
NFS_ATTR_FATTR_CHANGE
)
nfsi
->
change_attr
=
fattr
->
change_attr
;
inode
->
i_version
=
fattr
->
change_attr
;
else
if
(
nfs_server_capable
(
inode
,
NFS_CAP_CHANGE_ATTR
))
nfsi
->
cache_validity
|=
NFS_INO_INVALID_ATTR
|
NFS_INO_INVALID_DATA
;
...
...
@@ -897,8 +897,8 @@ static unsigned long nfs_wcc_update_inode(struct inode *inode, struct nfs_fattr
if
((
fattr
->
valid
&
NFS_ATTR_FATTR_PRECHANGE
)
&&
(
fattr
->
valid
&
NFS_ATTR_FATTR_CHANGE
)
&&
nfsi
->
change_attr
==
fattr
->
pre_change_attr
)
{
nfsi
->
change_attr
=
fattr
->
change_attr
;
&&
inode
->
i_version
==
fattr
->
pre_change_attr
)
{
inode
->
i_version
=
fattr
->
change_attr
;
if
(
S_ISDIR
(
inode
->
i_mode
))
nfsi
->
cache_validity
|=
NFS_INO_INVALID_DATA
;
ret
|=
NFS_INO_INVALID_ATTR
;
...
...
@@ -952,7 +952,7 @@ static int nfs_check_inode_attributes(struct inode *inode, struct nfs_fattr *fat
return
-
EIO
;
if
((
fattr
->
valid
&
NFS_ATTR_FATTR_CHANGE
)
!=
0
&&
nfsi
->
change_attr
!=
fattr
->
change_attr
)
inode
->
i_version
!=
fattr
->
change_attr
)
invalid
|=
NFS_INO_INVALID_ATTR
|
NFS_INO_REVAL_PAGECACHE
;
/* Verify a few of the more important attributes */
...
...
@@ -1163,7 +1163,7 @@ int nfs_post_op_update_inode_force_wcc(struct inode *inode, struct nfs_fattr *fa
}
if
((
fattr
->
valid
&
NFS_ATTR_FATTR_CHANGE
)
!=
0
&&
(
fattr
->
valid
&
NFS_ATTR_FATTR_PRECHANGE
)
==
0
)
{
fattr
->
pre_change_attr
=
NFS_I
(
inode
)
->
change_attr
;
fattr
->
pre_change_attr
=
inode
->
i_version
;
fattr
->
valid
|=
NFS_ATTR_FATTR_PRECHANGE
;
}
if
((
fattr
->
valid
&
NFS_ATTR_FATTR_CTIME
)
!=
0
&&
...
...
@@ -1244,13 +1244,13 @@ static int nfs_update_inode(struct inode *inode, struct nfs_fattr *fattr)
/* More cache consistency checks */
if
(
fattr
->
valid
&
NFS_ATTR_FATTR_CHANGE
)
{
if
(
nfsi
->
change_attr
!=
fattr
->
change_attr
)
{
if
(
inode
->
i_version
!=
fattr
->
change_attr
)
{
dprintk
(
"NFS: change_attr change on server for file %s/%ld
\n
"
,
inode
->
i_sb
->
s_id
,
inode
->
i_ino
);
invalid
|=
NFS_INO_INVALID_ATTR
|
NFS_INO_INVALID_DATA
|
NFS_INO_INVALID_ACCESS
|
NFS_INO_INVALID_ACL
;
if
(
S_ISDIR
(
inode
->
i_mode
))
nfs_force_lookup_revalidate
(
inode
);
nfsi
->
change_attr
=
fattr
->
change_attr
;
inode
->
i_version
=
fattr
->
change_attr
;
}
}
else
if
(
server
->
caps
&
NFS_CAP_CHANGE_ATTR
)
invalid
|=
save_cache_validity
;
...
...
fs/nfs/nfs4proc.c
浏览文件 @
a9a4a87a
...
...
@@ -753,9 +753,9 @@ static void update_changeattr(struct inode *dir, struct nfs4_change_info *cinfo)
spin_lock
(
&
dir
->
i_lock
);
nfsi
->
cache_validity
|=
NFS_INO_INVALID_ATTR
|
NFS_INO_REVAL_PAGECACHE
|
NFS_INO_INVALID_DATA
;
if
(
!
cinfo
->
atomic
||
cinfo
->
before
!=
nfsi
->
change_attr
)
if
(
!
cinfo
->
atomic
||
cinfo
->
before
!=
dir
->
i_version
)
nfs_force_lookup_revalidate
(
dir
);
nfsi
->
change_attr
=
cinfo
->
after
;
dir
->
i_version
=
cinfo
->
after
;
spin_unlock
(
&
dir
->
i_lock
);
}
...
...
fs/nfs/write.c
浏览文件 @
a9a4a87a
...
...
@@ -390,7 +390,7 @@ static int nfs_inode_add_request(struct inode *inode, struct nfs_page *req)
error
=
radix_tree_insert
(
&
nfsi
->
nfs_page_tree
,
req
->
wb_index
,
req
);
BUG_ON
(
error
);
if
(
!
nfsi
->
npages
&&
nfs_have_delegation
(
inode
,
FMODE_WRITE
))
nfsi
->
change_attr
++
;
inode
->
i_version
++
;
set_bit
(
PG_MAPPED
,
&
req
->
wb_flags
);
SetPagePrivate
(
req
->
wb_page
);
set_page_private
(
req
->
wb_page
,
(
unsigned
long
)
req
);
...
...
include/linux/nfs_fs.h
浏览文件 @
a9a4a87a
...
...
@@ -149,7 +149,6 @@ struct nfs_inode {
unsigned
long
read_cache_jiffies
;
unsigned
long
attrtimeo
;
unsigned
long
attrtimeo_timestamp
;
__u64
change_attr
;
/* v4 only */
unsigned
long
attr_gencount
;
/* "Generation counter" for the attribute cache. This is
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录