Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
L
linux-davinci
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Redmine
Redmine
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Metrics
Environments
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
linux
linux-davinci
Commits
9393bd07
Commit
9393bd07
authored
Apr 18, 2009
by
Al Viro
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
switch follow_down()
Signed-off-by:
Al Viro
<
viro@zeniv.linux.org.uk
>
parent
589ff870
Changes
12
Show whitespace changes
Inline
Side-by-side
Showing
12 changed files
with
29 additions
and
33 deletions
+29
-33
fs/afs/mntpt.c
fs/afs/mntpt.c
+1
-1
fs/autofs/dirhash.c
fs/autofs/dirhash.c
+2
-3
fs/autofs4/autofs_i.h
fs/autofs4/autofs_i.h
+3
-3
fs/autofs4/dev-ioctl.c
fs/autofs4/dev-ioctl.c
+1
-1
fs/autofs4/expire.c
fs/autofs4/expire.c
+7
-8
fs/autofs4/root.c
fs/autofs4/root.c
+3
-4
fs/cifs/cifs_dfs_ref.c
fs/cifs/cifs_dfs_ref.c
+1
-1
fs/namei.c
fs/namei.c
+6
-6
fs/namespace.c
fs/namespace.c
+2
-2
fs/nfs/namespace.c
fs/nfs/namespace.c
+1
-1
fs/nfsd/vfs.c
fs/nfsd/vfs.c
+1
-2
include/linux/namei.h
include/linux/namei.h
+1
-1
No files found.
fs/afs/mntpt.c
View file @
9393bd07
...
...
@@ -244,7 +244,7 @@ static void *afs_mntpt_follow_link(struct dentry *dentry, struct nameidata *nd)
case
-
EBUSY
:
/* someone else made a mount here whilst we were busy */
while
(
d_mountpoint
(
nd
->
path
.
dentry
)
&&
follow_down
(
&
nd
->
path
.
mnt
,
&
nd
->
path
.
dentry
))
follow_down
(
&
nd
->
path
))
;
err
=
0
;
default:
...
...
fs/autofs/dirhash.c
View file @
9393bd07
...
...
@@ -85,13 +85,12 @@ struct autofs_dir_ent *autofs_expire(struct super_block *sb,
}
path
.
mnt
=
mnt
;
path_get
(
&
path
);
if
(
!
follow_down
(
&
path
.
mnt
,
&
path
.
dentry
))
{
if
(
!
follow_down
(
&
path
))
{
path_put
(
&
path
);
DPRINTK
((
"autofs: not expirable (not a mounted directory): %s
\n
"
,
ent
->
name
));
continue
;
}
while
(
d_mountpoint
(
path
.
dentry
)
&&
follow_down
(
&
path
.
mnt
,
&
path
.
dentry
))
while
(
d_mountpoint
(
path
.
dentry
)
&&
follow_down
(
&
path
));
;
umount_ok
=
may_umount
(
path
.
mnt
);
path_put
(
&
path
);
...
...
fs/autofs4/autofs_i.h
View file @
9393bd07
...
...
@@ -223,12 +223,12 @@ int autofs4_wait(struct autofs_sb_info *,struct dentry *, enum autofs_notify);
int
autofs4_wait_release
(
struct
autofs_sb_info
*
,
autofs_wqt_t
,
int
);
void
autofs4_catatonic_mode
(
struct
autofs_sb_info
*
);
static
inline
int
autofs4_follow_mount
(
struct
vfsmount
**
mnt
,
struct
dentry
**
dentry
)
static
inline
int
autofs4_follow_mount
(
struct
path
*
path
)
{
int
res
=
0
;
while
(
d_mountpoint
(
*
dentry
))
{
int
followed
=
follow_down
(
mnt
,
dentry
);
while
(
d_mountpoint
(
path
->
dentry
))
{
int
followed
=
follow_down
(
path
);
if
(
!
followed
)
break
;
res
=
1
;
...
...
fs/autofs4/dev-ioctl.c
View file @
9393bd07
...
...
@@ -562,7 +562,7 @@ static int autofs_dev_ioctl_ismountpoint(struct file *fp,
err
=
have_submounts
(
path
.
dentry
);
if
(
path
.
mnt
->
mnt_mountpoint
!=
path
.
mnt
->
mnt_root
)
{
if
(
follow_down
(
&
path
.
mnt
,
&
path
.
dentry
))
if
(
follow_down
(
&
path
))
magic
=
path
.
mnt
->
mnt_sb
->
s_magic
;
}
}
...
...
fs/autofs4/expire.c
View file @
9393bd07
...
...
@@ -48,19 +48,19 @@ static inline int autofs4_can_expire(struct dentry *dentry,
static
int
autofs4_mount_busy
(
struct
vfsmount
*
mnt
,
struct
dentry
*
dentry
)
{
struct
dentry
*
top
=
dentry
;
struct
path
path
=
{.
mnt
=
mnt
,
.
dentry
=
dentry
};
int
status
=
1
;
DPRINTK
(
"dentry %p %.*s"
,
dentry
,
(
int
)
dentry
->
d_name
.
len
,
dentry
->
d_name
.
name
);
mntget
(
mnt
);
dget
(
dentry
);
path_get
(
&
path
);
if
(
!
follow_down
(
&
mnt
,
&
dentry
))
if
(
!
follow_down
(
&
path
))
goto
done
;
if
(
is_autofs4_dentry
(
dentry
))
{
struct
autofs_sb_info
*
sbi
=
autofs4_sbi
(
dentry
->
d_sb
);
if
(
is_autofs4_dentry
(
path
.
dentry
))
{
struct
autofs_sb_info
*
sbi
=
autofs4_sbi
(
path
.
dentry
->
d_sb
);
/* This is an autofs submount, we can't expire it */
if
(
autofs_type_indirect
(
sbi
->
type
))
...
...
@@ -70,7 +70,7 @@ static int autofs4_mount_busy(struct vfsmount *mnt, struct dentry *dentry)
* Otherwise it's an offset mount and we need to check
* if we can umount its mount, if there is one.
*/
if
(
!
d_mountpoint
(
dentry
))
{
if
(
!
d_mountpoint
(
path
.
dentry
))
{
status
=
0
;
goto
done
;
}
...
...
@@ -86,8 +86,7 @@ static int autofs4_mount_busy(struct vfsmount *mnt, struct dentry *dentry)
status
=
0
;
done:
DPRINTK
(
"returning = %d"
,
status
);
dput
(
dentry
);
mntput
(
mnt
);
path_put
(
&
path
);
return
status
;
}
...
...
fs/autofs4/root.c
View file @
9393bd07
...
...
@@ -181,7 +181,7 @@ static void *autofs4_follow_link(struct dentry *dentry, struct nameidata *nd)
nd
->
flags
);
/*
* For an expire of a covered direct or offset mount we need
* to b
e
eak out of follow_down() at the autofs mount trigger
* to b
r
eak out of follow_down() at the autofs mount trigger
* (d_mounted--), so we can see the expiring flag, and manage
* the blocking and following here until the expire is completed.
*/
...
...
@@ -190,7 +190,7 @@ static void *autofs4_follow_link(struct dentry *dentry, struct nameidata *nd)
if
(
ino
->
flags
&
AUTOFS_INF_EXPIRING
)
{
spin_unlock
(
&
sbi
->
fs_lock
);
/* Follow down to our covering mount. */
if
(
!
follow_down
(
&
nd
->
path
.
mnt
,
&
nd
->
path
.
dentry
))
if
(
!
follow_down
(
&
nd
->
path
))
goto
done
;
goto
follow
;
}
...
...
@@ -230,8 +230,7 @@ follow:
* to follow it.
*/
if
(
d_mountpoint
(
dentry
))
{
if
(
!
autofs4_follow_mount
(
&
nd
->
path
.
mnt
,
&
nd
->
path
.
dentry
))
{
if
(
!
autofs4_follow_mount
(
&
nd
->
path
))
{
status
=
-
ENOENT
;
goto
out_error
;
}
...
...
fs/cifs/cifs_dfs_ref.c
View file @
9393bd07
...
...
@@ -275,7 +275,7 @@ static int add_mount_helper(struct vfsmount *newmnt, struct nameidata *nd,
case
-
EBUSY
:
/* someone else made a mount here whilst we were busy */
while
(
d_mountpoint
(
nd
->
path
.
dentry
)
&&
follow_down
(
&
nd
->
path
.
mnt
,
&
nd
->
path
.
dentry
))
follow_down
(
&
nd
->
path
))
;
err
=
0
;
default:
...
...
fs/namei.c
View file @
9393bd07
...
...
@@ -731,16 +731,16 @@ static void follow_mount(struct vfsmount **mnt, struct dentry **dentry)
/* no need for dcache_lock, as serialization is taken care in
* namespace.c
*/
int
follow_down
(
struct
vfsmount
**
mnt
,
struct
dentry
**
dentry
)
int
follow_down
(
struct
path
*
path
)
{
struct
vfsmount
*
mounted
;
mounted
=
lookup_mnt
(
*
mnt
,
*
dentry
);
mounted
=
lookup_mnt
(
path
->
mnt
,
path
->
dentry
);
if
(
mounted
)
{
dput
(
*
dentry
);
mntput
(
*
mnt
);
*
mnt
=
mounted
;
*
dentry
=
dget
(
mounted
->
mnt_root
);
dput
(
path
->
dentry
);
mntput
(
path
->
mnt
);
path
->
mnt
=
mounted
;
path
->
dentry
=
dget
(
mounted
->
mnt_root
);
return
1
;
}
return
0
;
...
...
fs/namespace.c
View file @
9393bd07
...
...
@@ -1601,7 +1601,7 @@ static int do_move_mount(struct path *path, char *old_name)
down_write
(
&
namespace_sem
);
while
(
d_mountpoint
(
path
->
dentry
)
&&
follow_down
(
&
path
->
mnt
,
&
path
->
dentry
))
follow_down
(
path
))
;
err
=
-
EINVAL
;
if
(
!
check_mnt
(
path
->
mnt
)
||
!
check_mnt
(
old_path
.
mnt
))
...
...
@@ -1695,7 +1695,7 @@ int do_add_mount(struct vfsmount *newmnt, struct path *path,
down_write
(
&
namespace_sem
);
/* Something was mounted here while we slept */
while
(
d_mountpoint
(
path
->
dentry
)
&&
follow_down
(
&
path
->
mnt
,
&
path
->
dentry
))
follow_down
(
path
))
;
err
=
-
EINVAL
;
if
(
!
(
mnt_flags
&
MNT_SHRINKABLE
)
&&
!
check_mnt
(
path
->
mnt
))
...
...
fs/nfs/namespace.c
View file @
9393bd07
...
...
@@ -154,7 +154,7 @@ out_err:
goto
out
;
out_follow:
while
(
d_mountpoint
(
nd
->
path
.
dentry
)
&&
follow_down
(
&
nd
->
path
.
mnt
,
&
nd
->
path
.
dentry
))
follow_down
(
&
nd
->
path
))
;
err
=
0
;
goto
out
;
...
...
fs/nfsd/vfs.c
View file @
9393bd07
...
...
@@ -105,8 +105,7 @@ nfsd_cross_mnt(struct svc_rqst *rqstp, struct dentry **dpp,
.
dentry
=
dget
(
dentry
)};
int
err
=
0
;
while
(
follow_down
(
&
path
.
mnt
,
&
path
.
dentry
)
&&
d_mountpoint
(
path
.
dentry
))
while
(
d_mountpoint
(
path
.
dentry
)
&&
follow_down
(
&
path
))
;
exp2
=
rqst_exp_get_by_name
(
rqstp
,
&
path
);
...
...
include/linux/namei.h
View file @
9393bd07
...
...
@@ -78,7 +78,7 @@ extern void release_open_intent(struct nameidata *);
extern
struct
dentry
*
lookup_one_len
(
const
char
*
,
struct
dentry
*
,
int
);
extern
struct
dentry
*
lookup_one_noperm
(
const
char
*
,
struct
dentry
*
);
extern
int
follow_down
(
struct
vfsmount
**
,
struct
dentry
*
*
);
extern
int
follow_down
(
struct
path
*
);
extern
int
follow_up
(
struct
path
*
);
extern
struct
dentry
*
lock_rename
(
struct
dentry
*
,
struct
dentry
*
);
...
...
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