Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
cloud-kernel
提交
a73324da
cloud-kernel
项目概览
openanolis
/
cloud-kernel
1 年多 前同步成功
通知
160
Star
36
Fork
7
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
10
列表
看板
标记
里程碑
合并请求
2
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
cloud-kernel
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
10
Issue
10
列表
看板
标记
里程碑
合并请求
2
合并请求
2
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
a73324da
编写于
11月 24, 2011
作者:
A
Al Viro
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
vfs: move mnt_mountpoint to struct mount
Signed-off-by:
N
Al Viro
<
viro@zeniv.linux.org.uk
>
上级
0714a533
变更
6
隐藏空白更改
内联
并排
Showing
6 changed file
with
23 addition
and
24 deletion
+23
-24
fs/dcache.c
fs/dcache.c
+1
-1
fs/mount.h
fs/mount.h
+1
-0
fs/namei.c
fs/namei.c
+2
-2
fs/namespace.c
fs/namespace.c
+17
-18
fs/pnode.c
fs/pnode.c
+2
-2
include/linux/mount.h
include/linux/mount.h
+0
-1
未找到文件。
fs/dcache.c
浏览文件 @
a73324da
...
...
@@ -2464,7 +2464,7 @@ static int prepend_path(const struct path *path,
/* Global root? */
if
(
!
mnt_has_parent
(
mnt
))
goto
global_root
;
dentry
=
mnt
->
mnt
.
mnt
_mountpoint
;
dentry
=
mnt
->
mnt_mountpoint
;
mnt
=
mnt
->
mnt_parent
;
vfsmnt
=
&
mnt
->
mnt
;
continue
;
...
...
fs/mount.h
浏览文件 @
a73324da
...
...
@@ -3,6 +3,7 @@
struct
mount
{
struct
list_head
mnt_hash
;
struct
mount
*
mnt_parent
;
struct
dentry
*
mnt_mountpoint
;
struct
vfsmount
mnt
;
};
...
...
fs/namei.c
浏览文件 @
a73324da
...
...
@@ -684,7 +684,7 @@ static int follow_up_rcu(struct path *path)
parent
=
mnt
->
mnt_parent
;
if
(
&
parent
->
mnt
==
path
->
mnt
)
return
0
;
mountpoint
=
mnt
->
mnt
.
mnt
_mountpoint
;
mountpoint
=
mnt
->
mnt_mountpoint
;
path
->
dentry
=
mountpoint
;
path
->
mnt
=
&
parent
->
mnt
;
return
1
;
...
...
@@ -703,7 +703,7 @@ int follow_up(struct path *path)
return
0
;
}
mntget
(
&
parent
->
mnt
);
mountpoint
=
dget
(
mnt
->
mnt
.
mnt
_mountpoint
);
mountpoint
=
dget
(
mnt
->
mnt_mountpoint
);
br_read_unlock
(
vfsmount_lock
);
dput
(
path
->
dentry
);
path
->
dentry
=
mountpoint
;
...
...
fs/namespace.c
浏览文件 @
a73324da
...
...
@@ -476,7 +476,7 @@ struct mount *__lookup_mnt(struct vfsmount *mnt, struct dentry *dentry,
if
(
tmp
==
head
)
break
;
p
=
list_entry
(
tmp
,
struct
mount
,
mnt_hash
);
if
(
&
p
->
mnt_parent
->
mnt
==
mnt
&&
p
->
mnt
.
mnt
_mountpoint
==
dentry
)
{
if
(
&
p
->
mnt_parent
->
mnt
==
mnt
&&
p
->
mnt_mountpoint
==
dentry
)
{
found
=
p
;
break
;
}
...
...
@@ -543,7 +543,7 @@ static void dentry_reset_mounted(struct dentry *dentry)
struct
mount
*
p
;
list_for_each_entry
(
p
,
&
mount_hashtable
[
u
],
mnt_hash
)
{
if
(
p
->
mnt
.
mnt
_mountpoint
==
dentry
)
if
(
p
->
mnt_mountpoint
==
dentry
)
return
;
}
}
...
...
@@ -557,10 +557,10 @@ static void dentry_reset_mounted(struct dentry *dentry)
*/
static
void
detach_mnt
(
struct
mount
*
mnt
,
struct
path
*
old_path
)
{
old_path
->
dentry
=
mnt
->
mnt
.
mnt
_mountpoint
;
old_path
->
dentry
=
mnt
->
mnt_mountpoint
;
old_path
->
mnt
=
&
mnt
->
mnt_parent
->
mnt
;
mnt
->
mnt_parent
=
mnt
;
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_hash
);
dentry_reset_mounted
(
old_path
->
dentry
);
...
...
@@ -573,7 +573,7 @@ void mnt_set_mountpoint(struct vfsmount *mnt, struct dentry *dentry,
struct
mount
*
child_mnt
)
{
child_mnt
->
mnt_parent
=
real_mount
(
mntget
(
mnt
));
child_mnt
->
mnt
.
mnt
_mountpoint
=
dget
(
dentry
);
child_mnt
->
mnt_mountpoint
=
dget
(
dentry
);
spin_lock
(
&
dentry
->
d_lock
);
dentry
->
d_flags
|=
DCACHE_MOUNTED
;
spin_unlock
(
&
dentry
->
d_lock
);
...
...
@@ -626,7 +626,7 @@ static void commit_tree(struct mount *mnt)
list_splice
(
&
head
,
n
->
list
.
prev
);
list_add_tail
(
&
mnt
->
mnt_hash
,
mount_hashtable
+
hash
(
&
parent
->
mnt
,
mnt
->
mnt
.
mnt
_mountpoint
));
hash
(
&
parent
->
mnt
,
mnt
->
mnt_mountpoint
));
list_add_tail
(
&
mnt
->
mnt
.
mnt_child
,
&
parent
->
mnt
.
mnt_mounts
);
touch_mnt_namespace
(
n
);
}
...
...
@@ -681,7 +681,7 @@ vfs_kern_mount(struct file_system_type *type, int flags, const char *name, void
mnt
->
mnt
.
mnt_root
=
root
;
mnt
->
mnt
.
mnt_sb
=
root
->
d_sb
;
mnt
->
mnt
.
mnt
_mountpoint
=
mnt
->
mnt
.
mnt_root
;
mnt
->
mnt_mountpoint
=
mnt
->
mnt
.
mnt_root
;
mnt
->
mnt_parent
=
mnt
;
return
&
mnt
->
mnt
;
}
...
...
@@ -709,7 +709,7 @@ static struct mount *clone_mnt(struct mount *old, struct dentry *root,
atomic_inc
(
&
sb
->
s_active
);
mnt
->
mnt
.
mnt_sb
=
sb
;
mnt
->
mnt
.
mnt_root
=
dget
(
root
);
mnt
->
mnt
.
mnt
_mountpoint
=
mnt
->
mnt
.
mnt_root
;
mnt
->
mnt_mountpoint
=
mnt
->
mnt
.
mnt_root
;
mnt
->
mnt_parent
=
mnt
;
if
(
flag
&
CL_SLAVE
)
{
...
...
@@ -1201,9 +1201,9 @@ void release_mounts(struct list_head *head)
struct
vfsmount
*
m
;
br_write_lock
(
vfsmount_lock
);
dentry
=
mnt
->
mnt
.
mnt
_mountpoint
;
dentry
=
mnt
->
mnt_mountpoint
;
m
=
&
mnt
->
mnt_parent
->
mnt
;
mnt
->
mnt
.
mnt
_mountpoint
=
mnt
->
mnt
.
mnt_root
;
mnt
->
mnt_mountpoint
=
mnt
->
mnt
.
mnt_root
;
mnt
->
mnt_parent
=
mnt
;
m
->
mnt_ghosts
--
;
br_write_unlock
(
vfsmount_lock
);
...
...
@@ -1238,7 +1238,7 @@ void umount_tree(struct mount *mnt, int propagate, struct list_head *kill)
list_del_init
(
&
p
->
mnt
.
mnt_child
);
if
(
mnt_has_parent
(
p
))
{
p
->
mnt_parent
->
mnt
.
mnt_ghosts
++
;
dentry_reset_mounted
(
p
->
mnt
.
mnt
_mountpoint
);
dentry_reset_mounted
(
p
->
mnt_mountpoint
);
}
change_mnt_propagation
(
p
,
MS_PRIVATE
);
}
...
...
@@ -1412,8 +1412,7 @@ static int mount_is_safe(struct path *path)
struct
mount
*
copy_tree
(
struct
mount
*
mnt
,
struct
dentry
*
dentry
,
int
flag
)
{
struct
mount
*
res
,
*
p
,
*
q
;
struct
vfsmount
*
r
;
struct
mount
*
res
,
*
p
,
*
q
,
*
r
;
struct
path
path
;
if
(
!
(
flag
&
CL_COPY_ALL
)
&&
IS_MNT_UNBINDABLE
(
&
mnt
->
mnt
))
...
...
@@ -1422,15 +1421,15 @@ struct mount *copy_tree(struct mount *mnt, struct dentry *dentry,
res
=
q
=
clone_mnt
(
mnt
,
dentry
,
flag
);
if
(
!
q
)
goto
Enomem
;
q
->
mnt
.
mnt_mountpoint
=
mnt
->
mnt
.
mnt_mountpoint
;
q
->
mnt
_mountpoint
=
mnt
->
mnt_mountpoint
;
p
=
mnt
;
list_for_each_entry
(
r
,
&
mnt
->
mnt
.
mnt_mounts
,
mnt_child
)
{
list_for_each_entry
(
r
,
&
mnt
->
mnt
.
mnt_mounts
,
mnt
.
mnt
_child
)
{
struct
mount
*
s
;
if
(
!
is_subdir
(
r
->
mnt_mountpoint
,
dentry
))
continue
;
for
(
s
=
r
eal_mount
(
r
);
s
;
s
=
next_mnt
(
s
,
r
))
{
for
(
s
=
r
;
s
;
s
=
next_mnt
(
s
,
&
r
->
mnt
))
{
if
(
!
(
flag
&
CL_COPY_ALL
)
&&
IS_MNT_UNBINDABLE
(
&
s
->
mnt
))
{
s
=
skip_mnt_tree
(
s
);
continue
;
...
...
@@ -1441,7 +1440,7 @@ struct mount *copy_tree(struct mount *mnt, struct dentry *dentry,
}
p
=
s
;
path
.
mnt
=
&
q
->
mnt
;
path
.
dentry
=
p
->
mnt
.
mnt
_mountpoint
;
path
.
dentry
=
p
->
mnt_mountpoint
;
q
=
clone_mnt
(
p
,
p
->
mnt
.
mnt_root
,
flag
);
if
(
!
q
)
goto
Enomem
;
...
...
@@ -2564,7 +2563,7 @@ bool is_path_reachable(struct mount *mnt, struct dentry *dentry,
const
struct
path
*
root
)
{
while
(
&
mnt
->
mnt
!=
root
->
mnt
&&
mnt_has_parent
(
mnt
))
{
dentry
=
mnt
->
mnt
.
mnt
_mountpoint
;
dentry
=
mnt
->
mnt_mountpoint
;
mnt
=
mnt
->
mnt_parent
;
}
return
&
mnt
->
mnt
==
root
->
mnt
&&
is_subdir
(
dentry
,
root
->
dentry
);
...
...
fs/pnode.c
浏览文件 @
a73324da
...
...
@@ -308,7 +308,7 @@ int propagate_mount_busy(struct mount *mnt, int refcnt)
for
(
m
=
propagation_next
(
&
parent
->
mnt
,
&
parent
->
mnt
);
m
;
m
=
propagation_next
(
m
,
&
parent
->
mnt
))
{
child
=
__lookup_mnt
(
m
,
mnt
->
mnt
.
mnt
_mountpoint
,
0
);
child
=
__lookup_mnt
(
m
,
mnt
->
mnt_mountpoint
,
0
);
if
(
child
&&
list_empty
(
&
child
->
mnt
.
mnt_mounts
)
&&
(
ret
=
do_refcount_check
(
child
,
1
)))
break
;
...
...
@@ -331,7 +331,7 @@ static void __propagate_umount(struct mount *mnt)
m
=
propagation_next
(
m
,
&
parent
->
mnt
))
{
struct
mount
*
child
=
__lookup_mnt
(
m
,
mnt
->
mnt
.
mnt
_mountpoint
,
0
);
mnt
->
mnt_mountpoint
,
0
);
/*
* umount the child only if the child has no
* other children
...
...
include/linux/mount.h
浏览文件 @
a73324da
...
...
@@ -53,7 +53,6 @@ struct mnt_pcp {
};
struct
vfsmount
{
struct
dentry
*
mnt_mountpoint
;
/* dentry of mountpoint */
struct
dentry
*
mnt_root
;
/* root of the mounted tree */
struct
super_block
*
mnt_sb
;
/* pointer to superblock */
#ifdef CONFIG_SMP
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录