Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
nexedi
linux
Commits
8e498751
Commit
8e498751
authored
Sep 02, 2009
by
J. Bruce Fields
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
nfsd: move some of fh_compose into helper functions
Signed-off-by:
J. Bruce Fields
<
bfields@citi.umich.edu
>
parent
557ce264
Changes
1
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
45 additions
and
38 deletions
+45
-38
fs/nfsd/nfsfh.c
fs/nfsd/nfsfh.c
+45
-38
No files found.
fs/nfsd/nfsfh.c
View file @
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
))
if
(
!
fsid_type_ok_for_exp
(
fsid_type
,
exp
))
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
;
}
}
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
:
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment