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
Kirill Smelkov
linux
Commits
a63bb996
Commit
a63bb996
authored
Aug 02, 2008
by
Al Viro
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[PATCH] switch nfsd to kern_path()
Signed-off-by:
Al Viro
<
viro@zeniv.linux.org.uk
>
parent
c1a2a475
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
56 additions
and
58 deletions
+56
-58
fs/nfsd/export.c
fs/nfsd/export.c
+23
-25
fs/nfsd/nfs4recover.c
fs/nfsd/nfs4recover.c
+25
-25
fs/nfsd/nfs4state.c
fs/nfsd/nfs4state.c
+4
-4
fs/nfsd/nfsctl.c
fs/nfsd/nfsctl.c
+4
-4
No files found.
fs/nfsd/export.c
View file @
a63bb996
...
...
@@ -162,20 +162,18 @@ static int expkey_parse(struct cache_detail *cd, char *mesg, int mlen)
cache_put
(
&
ek
->
h
,
&
svc_expkey_cache
);
else
err
=
-
ENOMEM
;
}
else
{
struct
nameidata
nd
;
err
=
path_lookup
(
buf
,
0
,
&
nd
);
err
=
kern_path
(
buf
,
0
,
&
key
.
ek_path
);
if
(
err
)
goto
out
;
dprintk
(
"Found the path %s
\n
"
,
buf
);
key
.
ek_path
=
nd
.
path
;
ek
=
svc_expkey_update
(
&
key
,
ek
);
if
(
ek
)
cache_put
(
&
ek
->
h
,
&
svc_expkey_cache
);
else
err
=
-
ENOMEM
;
path_put
(
&
nd
.
path
);
path_put
(
&
key
.
ek_
path
);
}
cache_flush
();
out:
...
...
@@ -991,7 +989,7 @@ exp_export(struct nfsctl_export *nxp)
struct
svc_export
*
exp
=
NULL
;
struct
svc_export
new
;
struct
svc_expkey
*
fsid_key
=
NULL
;
struct
nameidata
nd
;
struct
path
path
;
int
err
;
/* Consistency check */
...
...
@@ -1014,12 +1012,12 @@ exp_export(struct nfsctl_export *nxp)
/* Look up the dentry */
err
=
path_lookup
(
nxp
->
ex_path
,
0
,
&
nd
);
err
=
kern_path
(
nxp
->
ex_path
,
0
,
&
path
);
if
(
err
)
goto
out_put_clp
;
err
=
-
EINVAL
;
exp
=
exp_get_by_name
(
clp
,
nd
.
path
.
mnt
,
nd
.
path
.
dentry
,
NULL
);
exp
=
exp_get_by_name
(
clp
,
path
.
mnt
,
path
.
dentry
,
NULL
);
memset
(
&
new
,
0
,
sizeof
(
new
));
...
...
@@ -1027,8 +1025,8 @@ exp_export(struct nfsctl_export *nxp)
if
((
nxp
->
ex_flags
&
NFSEXP_FSID
)
&&
(
!
IS_ERR
(
fsid_key
=
exp_get_fsid_key
(
clp
,
nxp
->
ex_dev
)))
&&
fsid_key
->
ek_path
.
mnt
&&
(
fsid_key
->
ek_path
.
mnt
!=
nd
.
path
.
mnt
||
fsid_key
->
ek_path
.
dentry
!=
nd
.
path
.
dentry
))
(
fsid_key
->
ek_path
.
mnt
!=
path
.
mnt
||
fsid_key
->
ek_path
.
dentry
!=
path
.
dentry
))
goto
finish
;
if
(
!
IS_ERR
(
exp
))
{
...
...
@@ -1044,7 +1042,7 @@ exp_export(struct nfsctl_export *nxp)
goto
finish
;
}
err
=
check_export
(
nd
.
path
.
dentry
->
d_inode
,
nxp
->
ex_flags
,
NULL
);
err
=
check_export
(
path
.
dentry
->
d_inode
,
nxp
->
ex_flags
,
NULL
);
if
(
err
)
goto
finish
;
err
=
-
ENOMEM
;
...
...
@@ -1057,7 +1055,7 @@ exp_export(struct nfsctl_export *nxp)
if
(
!
new
.
ex_pathname
)
goto
finish
;
new
.
ex_client
=
clp
;
new
.
ex_path
=
nd
.
path
;
new
.
ex_path
=
path
;
new
.
ex_flags
=
nxp
->
ex_flags
;
new
.
ex_anon_uid
=
nxp
->
ex_anon_uid
;
new
.
ex_anon_gid
=
nxp
->
ex_anon_gid
;
...
...
@@ -1083,7 +1081,7 @@ exp_export(struct nfsctl_export *nxp)
exp_put
(
exp
);
if
(
fsid_key
&&
!
IS_ERR
(
fsid_key
))
cache_put
(
&
fsid_key
->
h
,
&
svc_expkey_cache
);
path_put
(
&
nd
.
path
);
path_put
(
&
path
);
out_put_clp:
auth_domain_put
(
clp
);
out_unlock:
...
...
@@ -1114,7 +1112,7 @@ exp_unexport(struct nfsctl_export *nxp)
{
struct
auth_domain
*
dom
;
svc_export
*
exp
;
struct
nameidata
nd
;
struct
path
path
;
int
err
;
/* Consistency check */
...
...
@@ -1131,13 +1129,13 @@ exp_unexport(struct nfsctl_export *nxp)
goto
out_unlock
;
}
err
=
path_lookup
(
nxp
->
ex_path
,
0
,
&
nd
);
err
=
kern_path
(
nxp
->
ex_path
,
0
,
&
path
);
if
(
err
)
goto
out_domain
;
err
=
-
EINVAL
;
exp
=
exp_get_by_name
(
dom
,
nd
.
path
.
mnt
,
nd
.
path
.
dentry
,
NULL
);
path_put
(
&
nd
.
path
);
exp
=
exp_get_by_name
(
dom
,
path
.
mnt
,
path
.
dentry
,
NULL
);
path_put
(
&
path
);
if
(
IS_ERR
(
exp
))
goto
out_domain
;
...
...
@@ -1159,26 +1157,26 @@ exp_unexport(struct nfsctl_export *nxp)
* since its harder to fool a kernel module than a user space program.
*/
int
exp_rootfh
(
svc_client
*
clp
,
char
*
path
,
struct
knfsd_fh
*
f
,
int
maxsize
)
exp_rootfh
(
svc_client
*
clp
,
char
*
name
,
struct
knfsd_fh
*
f
,
int
maxsize
)
{
struct
svc_export
*
exp
;
struct
nameidata
nd
;
struct
path
path
;
struct
inode
*
inode
;
struct
svc_fh
fh
;
int
err
;
err
=
-
EPERM
;
/* NB: we probably ought to check that it's NUL-terminated */
if
(
path_lookup
(
path
,
0
,
&
nd
))
{
printk
(
"nfsd: exp_rootfh path not found %s"
,
path
);
if
(
kern_path
(
name
,
0
,
&
path
))
{
printk
(
"nfsd: exp_rootfh path not found %s"
,
name
);
return
err
;
}
inode
=
nd
.
path
.
dentry
->
d_inode
;
inode
=
path
.
dentry
->
d_inode
;
dprintk
(
"nfsd: exp_rootfh(%s [%p] %s:%s/%ld)
\n
"
,
path
,
nd
.
path
.
dentry
,
clp
->
name
,
name
,
path
.
dentry
,
clp
->
name
,
inode
->
i_sb
->
s_id
,
inode
->
i_ino
);
exp
=
exp_parent
(
clp
,
nd
.
path
.
mnt
,
nd
.
path
.
dentry
,
NULL
);
exp
=
exp_parent
(
clp
,
path
.
mnt
,
path
.
dentry
,
NULL
);
if
(
IS_ERR
(
exp
))
{
err
=
PTR_ERR
(
exp
);
goto
out
;
...
...
@@ -1188,7 +1186,7 @@ exp_rootfh(svc_client *clp, char *path, struct knfsd_fh *f, int maxsize)
* fh must be initialized before calling fh_compose
*/
fh_init
(
&
fh
,
maxsize
);
if
(
fh_compose
(
&
fh
,
exp
,
nd
.
path
.
dentry
,
NULL
))
if
(
fh_compose
(
&
fh
,
exp
,
path
.
dentry
,
NULL
))
err
=
-
EINVAL
;
else
err
=
0
;
...
...
@@ -1196,7 +1194,7 @@ exp_rootfh(svc_client *clp, char *path, struct knfsd_fh *f, int maxsize)
fh_put
(
&
fh
);
exp_put
(
exp
);
out:
path_put
(
&
nd
.
path
);
path_put
(
&
path
);
return
err
;
}
...
...
fs/nfsd/nfs4recover.c
View file @
a63bb996
...
...
@@ -51,7 +51,7 @@
#define NFSDDBG_FACILITY NFSDDBG_PROC
/* Globals */
static
struct
nameidata
rec_dir
;
static
struct
path
rec_dir
;
static
int
rec_dir_init
=
0
;
static
void
...
...
@@ -121,9 +121,9 @@ nfs4_make_rec_clidname(char *dname, struct xdr_netobj *clname)
static
void
nfsd4_sync_rec_dir
(
void
)
{
mutex_lock
(
&
rec_dir
.
path
.
dentry
->
d_inode
->
i_mutex
);
nfsd_sync_dir
(
rec_dir
.
path
.
dentry
);
mutex_unlock
(
&
rec_dir
.
path
.
dentry
->
d_inode
->
i_mutex
);
mutex_lock
(
&
rec_dir
.
dentry
->
d_inode
->
i_mutex
);
nfsd_sync_dir
(
rec_dir
.
dentry
);
mutex_unlock
(
&
rec_dir
.
dentry
->
d_inode
->
i_mutex
);
}
int
...
...
@@ -143,9 +143,9 @@ nfsd4_create_clid_dir(struct nfs4_client *clp)
nfs4_save_user
(
&
uid
,
&
gid
);
/* lock the parent */
mutex_lock
(
&
rec_dir
.
path
.
dentry
->
d_inode
->
i_mutex
);
mutex_lock
(
&
rec_dir
.
dentry
->
d_inode
->
i_mutex
);
dentry
=
lookup_one_len
(
dname
,
rec_dir
.
path
.
dentry
,
HEXDIR_LEN
-
1
);
dentry
=
lookup_one_len
(
dname
,
rec_dir
.
dentry
,
HEXDIR_LEN
-
1
);
if
(
IS_ERR
(
dentry
))
{
status
=
PTR_ERR
(
dentry
);
goto
out_unlock
;
...
...
@@ -155,15 +155,15 @@ nfsd4_create_clid_dir(struct nfs4_client *clp)
dprintk
(
"NFSD: nfsd4_create_clid_dir: DIRECTORY EXISTS
\n
"
);
goto
out_put
;
}
status
=
mnt_want_write
(
rec_dir
.
path
.
mnt
);
status
=
mnt_want_write
(
rec_dir
.
mnt
);
if
(
status
)
goto
out_put
;
status
=
vfs_mkdir
(
rec_dir
.
path
.
dentry
->
d_inode
,
dentry
,
S_IRWXU
);
mnt_drop_write
(
rec_dir
.
path
.
mnt
);
status
=
vfs_mkdir
(
rec_dir
.
dentry
->
d_inode
,
dentry
,
S_IRWXU
);
mnt_drop_write
(
rec_dir
.
mnt
);
out_put:
dput
(
dentry
);
out_unlock:
mutex_unlock
(
&
rec_dir
.
path
.
dentry
->
d_inode
->
i_mutex
);
mutex_unlock
(
&
rec_dir
.
dentry
->
d_inode
->
i_mutex
);
if
(
status
==
0
)
{
clp
->
cl_firststate
=
1
;
nfsd4_sync_rec_dir
();
...
...
@@ -226,7 +226,7 @@ nfsd4_list_rec_dir(struct dentry *dir, recdir_func *f)
nfs4_save_user
(
&
uid
,
&
gid
);
filp
=
dentry_open
(
dget
(
dir
),
mntget
(
rec_dir
.
path
.
mnt
),
O_RDONLY
);
filp
=
dentry_open
(
dget
(
dir
),
mntget
(
rec_dir
.
mnt
),
O_RDONLY
);
status
=
PTR_ERR
(
filp
);
if
(
IS_ERR
(
filp
))
goto
out
;
...
...
@@ -291,9 +291,9 @@ nfsd4_unlink_clid_dir(char *name, int namlen)
dprintk
(
"NFSD: nfsd4_unlink_clid_dir. name %.*s
\n
"
,
namlen
,
name
);
mutex_lock
(
&
rec_dir
.
path
.
dentry
->
d_inode
->
i_mutex
);
dentry
=
lookup_one_len
(
name
,
rec_dir
.
path
.
dentry
,
namlen
);
mutex_unlock
(
&
rec_dir
.
path
.
dentry
->
d_inode
->
i_mutex
);
mutex_lock
(
&
rec_dir
.
dentry
->
d_inode
->
i_mutex
);
dentry
=
lookup_one_len
(
name
,
rec_dir
.
dentry
,
namlen
);
mutex_unlock
(
&
rec_dir
.
dentry
->
d_inode
->
i_mutex
);
if
(
IS_ERR
(
dentry
))
{
status
=
PTR_ERR
(
dentry
);
return
status
;
...
...
@@ -302,7 +302,7 @@ nfsd4_unlink_clid_dir(char *name, int namlen)
if
(
!
dentry
->
d_inode
)
goto
out
;
status
=
nfsd4_clear_clid_dir
(
rec_dir
.
path
.
dentry
,
dentry
);
status
=
nfsd4_clear_clid_dir
(
rec_dir
.
dentry
,
dentry
);
out:
dput
(
dentry
);
return
status
;
...
...
@@ -318,7 +318,7 @@ nfsd4_remove_clid_dir(struct nfs4_client *clp)
if
(
!
rec_dir_init
||
!
clp
->
cl_firststate
)
return
;
status
=
mnt_want_write
(
rec_dir
.
path
.
mnt
);
status
=
mnt_want_write
(
rec_dir
.
mnt
);
if
(
status
)
goto
out
;
clp
->
cl_firststate
=
0
;
...
...
@@ -327,7 +327,7 @@ nfsd4_remove_clid_dir(struct nfs4_client *clp)
nfs4_reset_user
(
uid
,
gid
);
if
(
status
==
0
)
nfsd4_sync_rec_dir
();
mnt_drop_write
(
rec_dir
.
path
.
mnt
);
mnt_drop_write
(
rec_dir
.
mnt
);
out:
if
(
status
)
printk
(
"NFSD: Failed to remove expired client state directory"
...
...
@@ -357,17 +357,17 @@ nfsd4_recdir_purge_old(void) {
if
(
!
rec_dir_init
)
return
;
status
=
mnt_want_write
(
rec_dir
.
path
.
mnt
);
status
=
mnt_want_write
(
rec_dir
.
mnt
);
if
(
status
)
goto
out
;
status
=
nfsd4_list_rec_dir
(
rec_dir
.
path
.
dentry
,
purge_old
);
status
=
nfsd4_list_rec_dir
(
rec_dir
.
dentry
,
purge_old
);
if
(
status
==
0
)
nfsd4_sync_rec_dir
();
mnt_drop_write
(
rec_dir
.
path
.
mnt
);
mnt_drop_write
(
rec_dir
.
mnt
);
out:
if
(
status
)
printk
(
"nfsd4: failed to purge old clients from recovery"
" directory %s
\n
"
,
rec_dir
.
path
.
dentry
->
d_name
.
name
);
" directory %s
\n
"
,
rec_dir
.
dentry
->
d_name
.
name
);
}
static
int
...
...
@@ -387,10 +387,10 @@ int
nfsd4_recdir_load
(
void
)
{
int
status
;
status
=
nfsd4_list_rec_dir
(
rec_dir
.
path
.
dentry
,
load_recdir
);
status
=
nfsd4_list_rec_dir
(
rec_dir
.
dentry
,
load_recdir
);
if
(
status
)
printk
(
"nfsd4: failed loading clients from recovery"
" directory %s
\n
"
,
rec_dir
.
path
.
dentry
->
d_name
.
name
);
" directory %s
\n
"
,
rec_dir
.
dentry
->
d_name
.
name
);
return
status
;
}
...
...
@@ -412,7 +412,7 @@ nfsd4_init_recdir(char *rec_dirname)
nfs4_save_user
(
&
uid
,
&
gid
);
status
=
path_lookup
(
rec_dirname
,
LOOKUP_FOLLOW
|
LOOKUP_DIRECTORY
,
status
=
kern_path
(
rec_dirname
,
LOOKUP_FOLLOW
|
LOOKUP_DIRECTORY
,
&
rec_dir
);
if
(
status
)
printk
(
"NFSD: unable to find recovery directory %s
\n
"
,
...
...
@@ -429,5 +429,5 @@ nfsd4_shutdown_recdir(void)
if
(
!
rec_dir_init
)
return
;
rec_dir_init
=
0
;
path_put
(
&
rec_dir
.
path
);
path_put
(
&
rec_dir
);
}
fs/nfsd/nfs4state.c
View file @
a63bb996
...
...
@@ -3284,17 +3284,17 @@ int
nfs4_reset_recoverydir
(
char
*
recdir
)
{
int
status
;
struct
nameidata
nd
;
struct
path
path
;
status
=
path_lookup
(
recdir
,
LOOKUP_FOLLOW
,
&
nd
);
status
=
kern_path
(
recdir
,
LOOKUP_FOLLOW
,
&
path
);
if
(
status
)
return
status
;
status
=
-
ENOTDIR
;
if
(
S_ISDIR
(
nd
.
path
.
dentry
->
d_inode
->
i_mode
))
{
if
(
S_ISDIR
(
path
.
dentry
->
d_inode
->
i_mode
))
{
nfs4_set_recdir
(
recdir
);
status
=
0
;
}
path_put
(
&
nd
.
path
);
path_put
(
&
path
);
return
status
;
}
...
...
fs/nfsd/nfsctl.c
View file @
a63bb996
...
...
@@ -341,7 +341,7 @@ static ssize_t failover_unlock_ip(struct file *file, char *buf, size_t size)
static
ssize_t
failover_unlock_fs
(
struct
file
*
file
,
char
*
buf
,
size_t
size
)
{
struct
nameidata
nd
;
struct
path
path
;
char
*
fo_path
;
int
error
;
...
...
@@ -356,13 +356,13 @@ static ssize_t failover_unlock_fs(struct file *file, char *buf, size_t size)
if
(
qword_get
(
&
buf
,
fo_path
,
size
)
<
0
)
return
-
EINVAL
;
error
=
path_lookup
(
fo_path
,
0
,
&
nd
);
error
=
kern_path
(
fo_path
,
0
,
&
path
);
if
(
error
)
return
error
;
error
=
nlmsvc_unlock_all_by_sb
(
nd
.
path
.
mnt
->
mnt_sb
);
error
=
nlmsvc_unlock_all_by_sb
(
path
.
mnt
->
mnt_sb
);
path_put
(
&
nd
.
path
);
path_put
(
&
path
);
return
error
;
}
...
...
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