Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openeuler
Kernel
提交
8e498751
K
Kernel
项目概览
openeuler
/
Kernel
接近 2 年 前同步成功
通知
8
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
K
Kernel
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
提交
8e498751
编写于
9月 02, 2009
作者:
J
J. Bruce Fields
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
nfsd: move some of fh_compose into helper functions
Signed-off-by:
N
J. Bruce Fields
<
bfields@citi.umich.edu
>
上级
557ce264
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
45 addition
and
38 deletion
+45
-38
fs/nfsd/nfsfh.c
fs/nfsd/nfsfh.c
+45
-38
未找到文件。
fs/nfsd/nfsfh.c
浏览文件 @
8e498751
...
...
@@ -397,6 +397,40 @@ static inline void _fh_update_old(struct dentry *dentry,
fh
->
ofh_dirino
=
0
;
}
static
bool
is_root_export
(
struct
svc_export
*
exp
)
{
return
exp
->
ex_path
.
dentry
==
exp
->
ex_path
.
dentry
->
d_sb
->
s_root
;
}
static
struct
super_block
*
exp_sb
(
struct
svc_export
*
exp
)
{
return
exp
->
ex_path
.
dentry
->
d_inode
->
i_sb
;
}
static
bool
fsid_type_ok_for_exp
(
u8
fsid_type
,
struct
svc_export
*
exp
)
{
switch
(
fsid_type
)
{
case
FSID_DEV
:
if
(
!
old_valid_dev
(
exp_sb
(
exp
)
->
s_dev
))
return
0
;
/* FALL THROUGH */
case
FSID_MAJOR_MINOR
:
case
FSID_ENCODE_DEV
:
return
exp_sb
(
exp
)
->
s_type
->
fs_flags
&
FS_REQUIRES_DEV
;
case
FSID_NUM
:
return
exp
->
ex_flags
&
NFSEXP_FSID
;
case
FSID_UUID8
:
case
FSID_UUID16
:
if
(
!
is_root_export
(
exp
))
return
0
;
/* fall through */
case
FSID_UUID4_INUM
:
case
FSID_UUID16_INUM
:
return
exp
->
ex_uuid
!=
NULL
;
}
return
1
;
}
__be32
fh_compose
(
struct
svc_fh
*
fhp
,
struct
svc_export
*
exp
,
struct
dentry
*
dentry
,
struct
svc_fh
*
ref_fh
)
...
...
@@ -414,8 +448,7 @@ fh_compose(struct svc_fh *fhp, struct svc_export *exp, struct dentry *dentry,
struct
inode
*
inode
=
dentry
->
d_inode
;
struct
dentry
*
parent
=
dentry
->
d_parent
;
__u32
*
datap
;
dev_t
ex_dev
=
exp
->
ex_path
.
dentry
->
d_inode
->
i_sb
->
s_dev
;
int
root_export
=
(
exp
->
ex_path
.
dentry
==
exp
->
ex_path
.
dentry
->
d_sb
->
s_root
);
dev_t
ex_dev
=
exp_sb
(
exp
)
->
s_dev
;
dprintk
(
"nfsd: fh_compose(exp %02x:%02x/%ld %s/%s, ino=%ld)
\n
"
,
MAJOR
(
ex_dev
),
MINOR
(
ex_dev
),
...
...
@@ -447,49 +480,24 @@ fh_compose(struct svc_fh *fhp, struct svc_export *exp, struct dentry *dentry,
goto
retry
;
}
/* Need to check that this type works for this
* export point. As the fsid -> filesystem mapping
* was guided by user-space, there is no guarantee
* that the filesystem actually supports that fsid
* type. If it doesn't we loop around again without
* ref_fh set.
/*
* As the fsid -> filesystem mapping was guided by
* user-space, there is no guarantee that the filesystem
* actually supports that fsid type. If it doesn't we
* loop around again without ref_fh set.
*/
switch
(
fsid_type
)
{
case
FSID_DEV
:
if
(
!
old_valid_dev
(
ex_dev
))
goto
retry
;
/* FALL THROUGH */
case
FSID_MAJOR_MINOR
:
case
FSID_ENCODE_DEV
:
if
(
!
(
exp
->
ex_path
.
dentry
->
d_inode
->
i_sb
->
s_type
->
fs_flags
&
FS_REQUIRES_DEV
))
goto
retry
;
break
;
case
FSID_NUM
:
if
(
!
(
exp
->
ex_flags
&
NFSEXP_FSID
))
goto
retry
;
break
;
case
FSID_UUID8
:
case
FSID_UUID16
:
if
(
!
root_export
)
goto
retry
;
/* fall through */
case
FSID_UUID4_INUM
:
case
FSID_UUID16_INUM
:
if
(
exp
->
ex_uuid
==
NULL
)
goto
retry
;
break
;
}
if
(
!
fsid_type_ok_for_exp
(
fsid_type
,
exp
))
goto
retry
;
}
else
if
(
exp
->
ex_flags
&
NFSEXP_FSID
)
{
fsid_type
=
FSID_NUM
;
}
else
if
(
exp
->
ex_uuid
)
{
if
(
fhp
->
fh_maxsize
>=
64
)
{
if
(
root_export
)
if
(
is_root_export
(
exp
)
)
fsid_type
=
FSID_UUID16
;
else
fsid_type
=
FSID_UUID16_INUM
;
}
else
{
if
(
root_export
)
if
(
is_root_export
(
exp
)
)
fsid_type
=
FSID_UUID8
;
else
fsid_type
=
FSID_UUID4_INUM
;
...
...
@@ -639,8 +647,7 @@ enum fsid_source fsid_source(struct svc_fh *fhp)
case
FSID_DEV
:
case
FSID_ENCODE_DEV
:
case
FSID_MAJOR_MINOR
:
if
(
fhp
->
fh_export
->
ex_path
.
dentry
->
d_inode
->
i_sb
->
s_type
->
fs_flags
&
FS_REQUIRES_DEV
)
if
(
exp_sb
(
fhp
->
fh_export
)
->
s_type
->
fs_flags
&
FS_REQUIRES_DEV
)
return
FSIDSOURCE_DEV
;
break
;
case
FSID_NUM
:
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录