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
6b41d536
Commit
6b41d536
authored
Nov 24, 2011
by
Al Viro
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
vfs: take mnt_child/mnt_mounts to struct mount
Signed-off-by:
Al Viro
<
viro@zeniv.linux.org.uk
>
parent
68e8a9fe
Changes
4
Show whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
26 additions
and
26 deletions
+26
-26
fs/mount.h
fs/mount.h
+2
-0
fs/namespace.c
fs/namespace.c
+21
-21
fs/pnode.c
fs/pnode.c
+3
-3
include/linux/mount.h
include/linux/mount.h
+0
-2
No files found.
fs/mount.h
View file @
6b41d536
...
@@ -17,6 +17,8 @@ struct mount {
...
@@ -17,6 +17,8 @@ struct mount {
int
mnt_count
;
int
mnt_count
;
int
mnt_writers
;
int
mnt_writers
;
#endif
#endif
struct
list_head
mnt_mounts
;
/* list of children, anchored here */
struct
list_head
mnt_child
;
/* and going through their mnt_child */
};
};
static
inline
struct
mount
*
real_mount
(
struct
vfsmount
*
mnt
)
static
inline
struct
mount
*
real_mount
(
struct
vfsmount
*
mnt
)
...
...
fs/namespace.c
View file @
6b41d536
...
@@ -200,8 +200,8 @@ static struct mount *alloc_vfsmnt(const char *name)
...
@@ -200,8 +200,8 @@ static struct mount *alloc_vfsmnt(const char *name)
#endif
#endif
INIT_LIST_HEAD
(
&
p
->
mnt_hash
);
INIT_LIST_HEAD
(
&
p
->
mnt_hash
);
INIT_LIST_HEAD
(
&
mnt
->
mnt_child
);
INIT_LIST_HEAD
(
&
p
->
mnt_child
);
INIT_LIST_HEAD
(
&
mnt
->
mnt_mounts
);
INIT_LIST_HEAD
(
&
p
->
mnt_mounts
);
INIT_LIST_HEAD
(
&
mnt
->
mnt_list
);
INIT_LIST_HEAD
(
&
mnt
->
mnt_list
);
INIT_LIST_HEAD
(
&
mnt
->
mnt_expire
);
INIT_LIST_HEAD
(
&
mnt
->
mnt_expire
);
INIT_LIST_HEAD
(
&
mnt
->
mnt_share
);
INIT_LIST_HEAD
(
&
mnt
->
mnt_share
);
...
@@ -562,7 +562,7 @@ static void detach_mnt(struct mount *mnt, struct path *old_path)
...
@@ -562,7 +562,7 @@ static void detach_mnt(struct mount *mnt, struct path *old_path)
old_path
->
mnt
=
&
mnt
->
mnt_parent
->
mnt
;
old_path
->
mnt
=
&
mnt
->
mnt_parent
->
mnt
;
mnt
->
mnt_parent
=
mnt
;
mnt
->
mnt_parent
=
mnt
;
mnt
->
mnt_mountpoint
=
mnt
->
mnt
.
mnt_root
;
mnt
->
mnt_mountpoint
=
mnt
->
mnt
.
mnt_root
;
list_del_init
(
&
mnt
->
mnt
.
mnt
_child
);
list_del_init
(
&
mnt
->
mnt_child
);
list_del_init
(
&
mnt
->
mnt_hash
);
list_del_init
(
&
mnt
->
mnt_hash
);
dentry_reset_mounted
(
old_path
->
dentry
);
dentry_reset_mounted
(
old_path
->
dentry
);
}
}
...
@@ -588,7 +588,7 @@ static void attach_mnt(struct mount *mnt, struct path *path)
...
@@ -588,7 +588,7 @@ static void attach_mnt(struct mount *mnt, struct path *path)
mnt_set_mountpoint
(
path
->
mnt
,
path
->
dentry
,
mnt
);
mnt_set_mountpoint
(
path
->
mnt
,
path
->
dentry
,
mnt
);
list_add_tail
(
&
mnt
->
mnt_hash
,
mount_hashtable
+
list_add_tail
(
&
mnt
->
mnt_hash
,
mount_hashtable
+
hash
(
path
->
mnt
,
path
->
dentry
));
hash
(
path
->
mnt
,
path
->
dentry
));
list_add_tail
(
&
mnt
->
mnt
.
mnt_child
,
&
path
->
mnt
->
mnt_mounts
);
list_add_tail
(
&
mnt
->
mnt
_child
,
&
real_mount
(
path
->
mnt
)
->
mnt_mounts
);
}
}
static
inline
void
__mnt_make_longterm
(
struct
mount
*
mnt
)
static
inline
void
__mnt_make_longterm
(
struct
mount
*
mnt
)
...
@@ -628,32 +628,32 @@ static void commit_tree(struct mount *mnt)
...
@@ -628,32 +628,32 @@ static void commit_tree(struct mount *mnt)
list_add_tail
(
&
mnt
->
mnt_hash
,
mount_hashtable
+
list_add_tail
(
&
mnt
->
mnt_hash
,
mount_hashtable
+
hash
(
&
parent
->
mnt
,
mnt
->
mnt_mountpoint
));
hash
(
&
parent
->
mnt
,
mnt
->
mnt_mountpoint
));
list_add_tail
(
&
mnt
->
mnt
.
mnt_child
,
&
parent
->
mnt
.
mnt_mounts
);
list_add_tail
(
&
mnt
->
mnt
_child
,
&
parent
->
mnt_mounts
);
touch_mnt_namespace
(
n
);
touch_mnt_namespace
(
n
);
}
}
static
struct
mount
*
next_mnt
(
struct
mount
*
p
,
struct
vfsmount
*
root
)
static
struct
mount
*
next_mnt
(
struct
mount
*
p
,
struct
vfsmount
*
root
)
{
{
struct
list_head
*
next
=
p
->
mnt
.
mnt
_mounts
.
next
;
struct
list_head
*
next
=
p
->
mnt_mounts
.
next
;
if
(
next
==
&
p
->
mnt
.
mnt
_mounts
)
{
if
(
next
==
&
p
->
mnt_mounts
)
{
while
(
1
)
{
while
(
1
)
{
if
(
&
p
->
mnt
==
root
)
if
(
&
p
->
mnt
==
root
)
return
NULL
;
return
NULL
;
next
=
p
->
mnt
.
mnt
_child
.
next
;
next
=
p
->
mnt_child
.
next
;
if
(
next
!=
&
p
->
mnt_parent
->
mnt
.
mnt
_mounts
)
if
(
next
!=
&
p
->
mnt_parent
->
mnt_mounts
)
break
;
break
;
p
=
p
->
mnt_parent
;
p
=
p
->
mnt_parent
;
}
}
}
}
return
list_entry
(
next
,
struct
mount
,
mnt
.
mnt
_child
);
return
list_entry
(
next
,
struct
mount
,
mnt_child
);
}
}
static
struct
mount
*
skip_mnt_tree
(
struct
mount
*
p
)
static
struct
mount
*
skip_mnt_tree
(
struct
mount
*
p
)
{
{
struct
list_head
*
prev
=
p
->
mnt
.
mnt
_mounts
.
prev
;
struct
list_head
*
prev
=
p
->
mnt_mounts
.
prev
;
while
(
prev
!=
&
p
->
mnt
.
mnt
_mounts
)
{
while
(
prev
!=
&
p
->
mnt_mounts
)
{
p
=
list_entry
(
prev
,
struct
mount
,
mnt
.
mnt
_child
);
p
=
list_entry
(
prev
,
struct
mount
,
mnt_child
);
prev
=
p
->
mnt
.
mnt
_mounts
.
prev
;
prev
=
p
->
mnt_mounts
.
prev
;
}
}
return
p
;
return
p
;
}
}
...
@@ -1238,7 +1238,7 @@ void umount_tree(struct mount *mnt, int propagate, struct list_head *kill)
...
@@ -1238,7 +1238,7 @@ void umount_tree(struct mount *mnt, int propagate, struct list_head *kill)
__touch_mnt_namespace
(
p
->
mnt
.
mnt_ns
);
__touch_mnt_namespace
(
p
->
mnt
.
mnt_ns
);
p
->
mnt
.
mnt_ns
=
NULL
;
p
->
mnt
.
mnt_ns
=
NULL
;
__mnt_make_shortterm
(
p
);
__mnt_make_shortterm
(
p
);
list_del_init
(
&
p
->
mnt
.
mnt
_child
);
list_del_init
(
&
p
->
mnt_child
);
if
(
mnt_has_parent
(
p
))
{
if
(
mnt_has_parent
(
p
))
{
p
->
mnt_parent
->
mnt
.
mnt_ghosts
++
;
p
->
mnt_parent
->
mnt
.
mnt_ghosts
++
;
dentry_reset_mounted
(
p
->
mnt_mountpoint
);
dentry_reset_mounted
(
p
->
mnt_mountpoint
);
...
@@ -1427,7 +1427,7 @@ struct mount *copy_tree(struct mount *mnt, struct dentry *dentry,
...
@@ -1427,7 +1427,7 @@ struct mount *copy_tree(struct mount *mnt, struct dentry *dentry,
q
->
mnt_mountpoint
=
mnt
->
mnt_mountpoint
;
q
->
mnt_mountpoint
=
mnt
->
mnt_mountpoint
;
p
=
mnt
;
p
=
mnt
;
list_for_each_entry
(
r
,
&
mnt
->
mnt
.
mnt_mounts
,
mnt
.
mnt_child
)
{
list_for_each_entry
(
r
,
&
mnt
->
mnt
_mounts
,
mnt_child
)
{
struct
mount
*
s
;
struct
mount
*
s
;
if
(
!
is_subdir
(
r
->
mnt_mountpoint
,
dentry
))
if
(
!
is_subdir
(
r
->
mnt_mountpoint
,
dentry
))
continue
;
continue
;
...
@@ -2134,11 +2134,11 @@ static int select_submounts(struct mount *parent, struct list_head *graveyard)
...
@@ -2134,11 +2134,11 @@ static int select_submounts(struct mount *parent, struct list_head *graveyard)
int
found
=
0
;
int
found
=
0
;
repeat:
repeat:
next
=
this_parent
->
mnt
.
mnt
_mounts
.
next
;
next
=
this_parent
->
mnt_mounts
.
next
;
resume:
resume:
while
(
next
!=
&
this_parent
->
mnt
.
mnt
_mounts
)
{
while
(
next
!=
&
this_parent
->
mnt_mounts
)
{
struct
list_head
*
tmp
=
next
;
struct
list_head
*
tmp
=
next
;
struct
mount
*
mnt
=
list_entry
(
tmp
,
struct
mount
,
mnt
.
mnt
_child
);
struct
mount
*
mnt
=
list_entry
(
tmp
,
struct
mount
,
mnt_child
);
next
=
tmp
->
next
;
next
=
tmp
->
next
;
if
(
!
(
mnt
->
mnt
.
mnt_flags
&
MNT_SHRINKABLE
))
if
(
!
(
mnt
->
mnt
.
mnt_flags
&
MNT_SHRINKABLE
))
...
@@ -2146,7 +2146,7 @@ static int select_submounts(struct mount *parent, struct list_head *graveyard)
...
@@ -2146,7 +2146,7 @@ static int select_submounts(struct mount *parent, struct list_head *graveyard)
/*
/*
* Descend a level if the d_mounts list is non-empty.
* Descend a level if the d_mounts list is non-empty.
*/
*/
if
(
!
list_empty
(
&
mnt
->
mnt
.
mnt
_mounts
))
{
if
(
!
list_empty
(
&
mnt
->
mnt_mounts
))
{
this_parent
=
mnt
;
this_parent
=
mnt
;
goto
repeat
;
goto
repeat
;
}
}
...
@@ -2160,7 +2160,7 @@ static int select_submounts(struct mount *parent, struct list_head *graveyard)
...
@@ -2160,7 +2160,7 @@ static int select_submounts(struct mount *parent, struct list_head *graveyard)
* All done at this level ... ascend and resume the search
* All done at this level ... ascend and resume the search
*/
*/
if
(
this_parent
!=
parent
)
{
if
(
this_parent
!=
parent
)
{
next
=
this_parent
->
mnt
.
mnt
_child
.
next
;
next
=
this_parent
->
mnt_child
.
next
;
this_parent
=
this_parent
->
mnt_parent
;
this_parent
=
this_parent
->
mnt_parent
;
goto
resume
;
goto
resume
;
}
}
...
...
fs/pnode.c
View file @
6b41d536
...
@@ -303,13 +303,13 @@ int propagate_mount_busy(struct mount *mnt, int refcnt)
...
@@ -303,13 +303,13 @@ int propagate_mount_busy(struct mount *mnt, int refcnt)
* If not, we don't have to go checking for all other
* If not, we don't have to go checking for all other
* mounts
* mounts
*/
*/
if
(
!
list_empty
(
&
mnt
->
mnt
.
mnt
_mounts
)
||
do_refcount_check
(
mnt
,
refcnt
))
if
(
!
list_empty
(
&
mnt
->
mnt_mounts
)
||
do_refcount_check
(
mnt
,
refcnt
))
return
1
;
return
1
;
for
(
m
=
propagation_next
(
&
parent
->
mnt
,
&
parent
->
mnt
);
m
;
for
(
m
=
propagation_next
(
&
parent
->
mnt
,
&
parent
->
mnt
);
m
;
m
=
propagation_next
(
m
,
&
parent
->
mnt
))
{
m
=
propagation_next
(
m
,
&
parent
->
mnt
))
{
child
=
__lookup_mnt
(
m
,
mnt
->
mnt_mountpoint
,
0
);
child
=
__lookup_mnt
(
m
,
mnt
->
mnt_mountpoint
,
0
);
if
(
child
&&
list_empty
(
&
child
->
mnt
.
mnt
_mounts
)
&&
if
(
child
&&
list_empty
(
&
child
->
mnt_mounts
)
&&
(
ret
=
do_refcount_check
(
child
,
1
)))
(
ret
=
do_refcount_check
(
child
,
1
)))
break
;
break
;
}
}
...
@@ -336,7 +336,7 @@ static void __propagate_umount(struct mount *mnt)
...
@@ -336,7 +336,7 @@ static void __propagate_umount(struct mount *mnt)
* umount the child only if the child has no
* umount the child only if the child has no
* other children
* other children
*/
*/
if
(
child
&&
list_empty
(
&
child
->
mnt
.
mnt
_mounts
))
if
(
child
&&
list_empty
(
&
child
->
mnt_mounts
))
list_move_tail
(
&
child
->
mnt_hash
,
&
mnt
->
mnt_hash
);
list_move_tail
(
&
child
->
mnt_hash
,
&
mnt
->
mnt_hash
);
}
}
}
}
...
...
include/linux/mount.h
View file @
6b41d536
...
@@ -50,8 +50,6 @@ struct mnt_namespace;
...
@@ -50,8 +50,6 @@ struct mnt_namespace;
struct
vfsmount
{
struct
vfsmount
{
struct
dentry
*
mnt_root
;
/* root of the mounted tree */
struct
dentry
*
mnt_root
;
/* root of the mounted tree */
struct
super_block
*
mnt_sb
;
/* pointer to superblock */
struct
super_block
*
mnt_sb
;
/* pointer to superblock */
struct
list_head
mnt_mounts
;
/* list of children, anchored here */
struct
list_head
mnt_child
;
/* and going through their mnt_child */
int
mnt_flags
;
int
mnt_flags
;
/* 4 bytes hole on 64bits arches without fsnotify */
/* 4 bytes hole on 64bits arches without fsnotify */
#ifdef CONFIG_FSNOTIFY
#ifdef CONFIG_FSNOTIFY
...
...
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