Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenHarmony
kernel_linux
提交
82234e61
K
kernel_linux
项目概览
OpenHarmony
/
kernel_linux
上一次同步 3 年多
通知
13
Star
8
Fork
2
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
K
kernel_linux
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
提交
82234e61
编写于
3月 15, 2012
作者:
A
Al Viro
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
vfs: take path_get_longterm() out of write_seqcount scope
Signed-off-by:
N
Al Viro
<
viro@zeniv.linux.org.uk
>
上级
3ee05ed0
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
15 addition
and
12 deletion
+15
-12
fs/fs_struct.c
fs/fs_struct.c
+15
-12
未找到文件。
fs/fs_struct.c
浏览文件 @
82234e61
...
...
@@ -26,11 +26,11 @@ void set_fs_root(struct fs_struct *fs, struct path *path)
{
struct
path
old_root
;
path_get_longterm
(
path
);
spin_lock
(
&
fs
->
lock
);
write_seqcount_begin
(
&
fs
->
seq
);
old_root
=
fs
->
root
;
fs
->
root
=
*
path
;
path_get_longterm
(
path
);
write_seqcount_end
(
&
fs
->
seq
);
spin_unlock
(
&
fs
->
lock
);
if
(
old_root
.
dentry
)
...
...
@@ -45,11 +45,11 @@ void set_fs_pwd(struct fs_struct *fs, struct path *path)
{
struct
path
old_pwd
;
path_get_longterm
(
path
);
spin_lock
(
&
fs
->
lock
);
write_seqcount_begin
(
&
fs
->
seq
);
old_pwd
=
fs
->
pwd
;
fs
->
pwd
=
*
path
;
path_get_longterm
(
path
);
write_seqcount_end
(
&
fs
->
seq
);
spin_unlock
(
&
fs
->
lock
);
...
...
@@ -57,6 +57,14 @@ void set_fs_pwd(struct fs_struct *fs, struct path *path)
path_put_longterm
(
&
old_pwd
);
}
static
inline
int
replace_path
(
struct
path
*
p
,
const
struct
path
*
old
,
const
struct
path
*
new
)
{
if
(
likely
(
p
->
dentry
!=
old
->
dentry
||
p
->
mnt
!=
old
->
mnt
))
return
0
;
*
p
=
*
new
;
return
1
;
}
void
chroot_fs_refs
(
struct
path
*
old_root
,
struct
path
*
new_root
)
{
struct
task_struct
*
g
,
*
p
;
...
...
@@ -68,21 +76,16 @@ void chroot_fs_refs(struct path *old_root, struct path *new_root)
task_lock
(
p
);
fs
=
p
->
fs
;
if
(
fs
)
{
int
hits
=
0
;
spin_lock
(
&
fs
->
lock
);
write_seqcount_begin
(
&
fs
->
seq
);
if
(
fs
->
root
.
dentry
==
old_root
->
dentry
&&
fs
->
root
.
mnt
==
old_root
->
mnt
)
{
path_get_longterm
(
new_root
);
fs
->
root
=
*
new_root
;
hits
+=
replace_path
(
&
fs
->
root
,
old_root
,
new_root
);
hits
+=
replace_path
(
&
fs
->
pwd
,
old_root
,
new_root
);
write_seqcount_end
(
&
fs
->
seq
);
while
(
hits
--
)
{
count
++
;
}
if
(
fs
->
pwd
.
dentry
==
old_root
->
dentry
&&
fs
->
pwd
.
mnt
==
old_root
->
mnt
)
{
path_get_longterm
(
new_root
);
fs
->
pwd
=
*
new_root
;
count
++
;
}
write_seqcount_end
(
&
fs
->
seq
);
spin_unlock
(
&
fs
->
lock
);
}
task_unlock
(
p
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录