Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenHarmony
kernel_linux
提交
8c3905ad
K
kernel_linux
项目概览
OpenHarmony
/
kernel_linux
上一次同步 4 年多
通知
15
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看板
提交
8c3905ad
编写于
9月 29, 2015
作者:
M
Mike Marshall
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Orangefs: update signal blocking code before Oleg sees it.
Signed-off-by:
N
Mike Marshall
<
hubcap@omnibond.com
>
上级
50e01586
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
20 addition
and
31 deletion
+20
-31
fs/orangefs/pvfs2-kernel.h
fs/orangefs/pvfs2-kernel.h
+2
-2
fs/orangefs/pvfs2-utils.c
fs/orangefs/pvfs2-utils.c
+15
-26
fs/orangefs/waitqueue.c
fs/orangefs/waitqueue.c
+3
-3
未找到文件。
fs/orangefs/pvfs2-kernel.h
浏览文件 @
8c3905ad
...
@@ -649,9 +649,9 @@ void pvfs2_op_initialize(struct pvfs2_kernel_op_s *op);
...
@@ -649,9 +649,9 @@ void pvfs2_op_initialize(struct pvfs2_kernel_op_s *op);
void
pvfs2_make_bad_inode
(
struct
inode
*
inode
);
void
pvfs2_make_bad_inode
(
struct
inode
*
inode
);
void
mask_blocked_signals
(
sigset_t
*
orig_sigset
);
void
block_signals
(
sigset_t
*
);
void
unmask_blocked_signals
(
sigset_t
*
orig_sigset
);
void
set_signals
(
sigset_t
*
);
int
pvfs2_unmount_sb
(
struct
super_block
*
sb
);
int
pvfs2_unmount_sb
(
struct
super_block
*
sb
);
...
...
fs/orangefs/pvfs2-utils.c
浏览文件 @
8c3905ad
...
@@ -632,36 +632,25 @@ void pvfs2_make_bad_inode(struct inode *inode)
...
@@ -632,36 +632,25 @@ void pvfs2_make_bad_inode(struct inode *inode)
}
}
}
}
/*
this code is based on linux/net/sunrpc/clnt.c:rpc_clnt_sigmask
*/
/*
Block all blockable signals...
*/
void
mask_blocked
_signals
(
sigset_t
*
orig_sigset
)
void
block
_signals
(
sigset_t
*
orig_sigset
)
{
{
unsigned
long
sigallow
=
sigmask
(
SIGKILL
);
sigset_t
mask
;
unsigned
long
irqflags
=
0
;
struct
k_sigaction
*
action
=
pvfs2_current_sigaction
;
/*
* Initialize all entries in the signal set to the
sigallow
|=
((
action
[
SIGINT
-
1
].
sa
.
sa_handler
==
SIG_DFL
)
?
* inverse of the given mask.
sigmask
(
SIGINT
)
:
*/
0
);
siginitsetinv
(
&
mask
,
sigmask
(
SIGKILL
));
sigallow
|=
((
action
[
SIGQUIT
-
1
].
sa
.
sa_handler
==
SIG_DFL
)
?
sigmask
(
SIGQUIT
)
:
/* Block 'em Danno... */
0
);
sigprocmask
(
SIG_BLOCK
,
&
mask
,
orig_sigset
);
spin_lock_irqsave
(
&
pvfs2_current_signal_lock
,
irqflags
);
*
orig_sigset
=
current
->
blocked
;
siginitsetinv
(
&
current
->
blocked
,
sigallow
&
~
orig_sigset
->
sig
[
0
]);
recalc_sigpending
();
spin_unlock_irqrestore
(
&
pvfs2_current_signal_lock
,
irqflags
);
}
}
/*
this code is based on linux/net/sunrpc/clnt.c:rpc_clnt_sigunmask
*/
/*
set the signal mask to the given template...
*/
void
unmask_blocked_signals
(
sigset_t
*
orig_
sigset
)
void
set_signals
(
sigset_t
*
sigset
)
{
{
unsigned
long
irqflags
=
0
;
sigprocmask
(
SIG_SETMASK
,
sigset
,
NULL
);
spin_lock_irqsave
(
&
pvfs2_current_signal_lock
,
irqflags
);
current
->
blocked
=
*
orig_sigset
;
recalc_sigpending
();
spin_unlock_irqrestore
(
&
pvfs2_current_signal_lock
,
irqflags
);
}
}
__u64
pvfs2_convert_time_field
(
void
*
time_ptr
)
__u64
pvfs2_convert_time_field
(
void
*
time_ptr
)
...
...
fs/orangefs/waitqueue.c
浏览文件 @
8c3905ad
...
@@ -80,7 +80,7 @@ int service_operation(struct pvfs2_kernel_op_s *op,
...
@@ -80,7 +80,7 @@ int service_operation(struct pvfs2_kernel_op_s *op,
/* mask out signals if this operation is not to be interrupted */
/* mask out signals if this operation is not to be interrupted */
if
(
!
(
flags
&
PVFS2_OP_INTERRUPTIBLE
))
if
(
!
(
flags
&
PVFS2_OP_INTERRUPTIBLE
))
mask_blocked
_signals
(
&
orig_sigset
);
block
_signals
(
&
orig_sigset
);
if
(
!
(
flags
&
PVFS2_OP_NO_SEMAPHORE
))
{
if
(
!
(
flags
&
PVFS2_OP_NO_SEMAPHORE
))
{
ret
=
mutex_lock_interruptible
(
&
request_mutex
);
ret
=
mutex_lock_interruptible
(
&
request_mutex
);
...
@@ -90,7 +90,7 @@ int service_operation(struct pvfs2_kernel_op_s *op,
...
@@ -90,7 +90,7 @@ int service_operation(struct pvfs2_kernel_op_s *op,
*/
*/
if
(
ret
<
0
)
{
if
(
ret
<
0
)
{
if
(
!
(
flags
&
PVFS2_OP_INTERRUPTIBLE
))
if
(
!
(
flags
&
PVFS2_OP_INTERRUPTIBLE
))
unmask_blocked
_signals
(
&
orig_sigset
);
set
_signals
(
&
orig_sigset
);
op
->
downcall
.
status
=
ret
;
op
->
downcall
.
status
=
ret
;
gossip_debug
(
GOSSIP_WAIT_DEBUG
,
gossip_debug
(
GOSSIP_WAIT_DEBUG
,
"pvfs2: service_operation interrupted.
\n
"
);
"pvfs2: service_operation interrupted.
\n
"
);
...
@@ -160,7 +160,7 @@ int service_operation(struct pvfs2_kernel_op_s *op,
...
@@ -160,7 +160,7 @@ int service_operation(struct pvfs2_kernel_op_s *op,
}
}
if
(
!
(
flags
&
PVFS2_OP_INTERRUPTIBLE
))
if
(
!
(
flags
&
PVFS2_OP_INTERRUPTIBLE
))
unmask_blocked
_signals
(
&
orig_sigset
);
set
_signals
(
&
orig_sigset
);
BUG_ON
(
ret
!=
op
->
downcall
.
status
);
BUG_ON
(
ret
!=
op
->
downcall
.
status
);
/* retry if operation has not been serviced and if requested */
/* retry if operation has not been serviced and if requested */
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录