Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openeuler
Kernel
提交
be7d31cc
K
Kernel
项目概览
openeuler
/
Kernel
1 年多 前同步成功
通知
8
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
K
Kernel
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
提交
be7d31cc
编写于
2月 10, 2016
作者:
M
Mike Snitzer
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
dm mpath: switch from 'unsigned' to 'bool' for flags where appropriate
Signed-off-by:
N
Mike Snitzer
<
snitzer@redhat.com
>
上级
b0b477c7
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
51 addition
and
50 deletion
+51
-50
drivers/md/dm-mpath.c
drivers/md/dm-mpath.c
+51
-50
未找到文件。
drivers/md/dm-mpath.c
浏览文件 @
be7d31cc
...
...
@@ -34,11 +34,12 @@ struct pgpath {
struct
list_head
list
;
struct
priority_group
*
pg
;
/* Owning PG */
unsigned
is_active
;
/* Path status */
unsigned
fail_count
;
/* Cumulative failure count */
struct
dm_path
path
;
struct
delayed_work
activate_path
;
bool
is_active
:
1
;
/* Path status */
};
#define path_to_pgpath(__pgp) container_of((__pgp), struct pgpath, path)
...
...
@@ -54,10 +55,10 @@ struct priority_group {
struct
path_selector
ps
;
unsigned
pg_num
;
/* Reference number */
unsigned
bypassed
;
/* Temporarily bypass this PG? */
unsigned
nr_pgpaths
;
/* Number of paths in PG */
struct
list_head
pgpaths
;
bool
bypassed
:
1
;
/* Temporarily bypass this PG? */
};
/* Multipath context */
...
...
@@ -75,20 +76,20 @@ struct multipath {
wait_queue_head_t
pg_init_wait
;
/* Wait for pg_init completion */
unsigned
pg_init_required
;
/* pg_init needs calling? */
unsigned
pg_init_in_progress
;
/* Only one pg_init allowed at once */
unsigned
pg_init_delay_retry
;
/* Delay pg_init retry? */
unsigned
nr_valid_paths
;
/* Total number of usable paths */
struct
pgpath
*
current_pgpath
;
struct
priority_group
*
current_pg
;
struct
priority_group
*
next_pg
;
/* Switch to this PG if set */
unsigned
queue_io
:
1
;
/* Must we queue all I/O? */
unsigned
queue_if_no_path
:
1
;
/* Queue I/O if last path fails? */
unsigned
saved_queue_if_no_path
:
1
;
/* Saved state during suspension */
unsigned
retain_attached_hw_handler
:
1
;
/* If there's already a hw_handler present, don't change it. */
unsigned
pg_init_disabled
:
1
;
/* pg_init is not currently allowed */
bool
queue_io
:
1
;
/* Must we queue all I/O? */
bool
queue_if_no_path
:
1
;
/* Queue I/O if last path fails? */
bool
saved_queue_if_no_path
:
1
;
/* Saved state during suspension */
bool
retain_attached_hw_handler
:
1
;
/* If there's already a hw_handler present, don't change it. */
bool
pg_init_disabled
:
1
;
/* pg_init is not currently allowed */
bool
pg_init_required
:
1
;
/* pg_init needs calling? */
bool
pg_init_delay_retry
:
1
;
/* Delay pg_init retry? */
unsigned
pg_init_retries
;
/* Number of times to retry pg_init */
unsigned
pg_init_count
;
/* Number of times pg_init called */
...
...
@@ -132,7 +133,7 @@ static struct pgpath *alloc_pgpath(void)
struct
pgpath
*
pgpath
=
kzalloc
(
sizeof
(
*
pgpath
),
GFP_KERNEL
);
if
(
pgpath
)
{
pgpath
->
is_active
=
1
;
pgpath
->
is_active
=
true
;
INIT_DELAYED_WORK
(
&
pgpath
->
activate_path
,
activate_path
);
}
...
...
@@ -189,7 +190,7 @@ static struct multipath *alloc_multipath(struct dm_target *ti, bool use_blk_mq)
if
(
m
)
{
INIT_LIST_HEAD
(
&
m
->
priority_groups
);
spin_lock_init
(
&
m
->
lock
);
m
->
queue_io
=
1
;
m
->
queue_io
=
true
;
m
->
pg_init_delay_msecs
=
DM_PG_INIT_DELAY_DEFAULT
;
INIT_WORK
(
&
m
->
trigger_event
,
trigger_event
);
init_waitqueue_head
(
&
m
->
pg_init_wait
);
...
...
@@ -278,7 +279,7 @@ static int __pg_init_all_paths(struct multipath *m)
return
0
;
m
->
pg_init_count
++
;
m
->
pg_init_required
=
0
;
m
->
pg_init_required
=
false
;
/* Check here to reset pg_init_required */
if
(
!
m
->
current_pg
)
...
...
@@ -304,11 +305,11 @@ static void __switch_pg(struct multipath *m, struct pgpath *pgpath)
/* Must we initialise the PG first, and queue I/O till it's ready? */
if
(
m
->
hw_handler_name
)
{
m
->
pg_init_required
=
1
;
m
->
queue_io
=
1
;
m
->
pg_init_required
=
true
;
m
->
queue_io
=
true
;
}
else
{
m
->
pg_init_required
=
0
;
m
->
queue_io
=
0
;
m
->
pg_init_required
=
false
;
m
->
queue_io
=
false
;
}
m
->
pg_init_count
=
0
;
...
...
@@ -334,10 +335,10 @@ static int __choose_path_in_pg(struct multipath *m, struct priority_group *pg,
static
void
__choose_pgpath
(
struct
multipath
*
m
,
size_t
nr_bytes
)
{
struct
priority_group
*
pg
;
unsigned
bypassed
=
1
;
bool
bypassed
=
true
;
if
(
!
m
->
nr_valid_paths
)
{
m
->
queue_io
=
0
;
m
->
queue_io
=
false
;
goto
failed
;
}
...
...
@@ -365,7 +366,7 @@ static void __choose_pgpath(struct multipath *m, size_t nr_bytes)
continue
;
if
(
!
__choose_path_in_pg
(
m
,
pg
,
nr_bytes
))
{
if
(
!
bypassed
)
m
->
pg_init_delay_retry
=
1
;
m
->
pg_init_delay_retry
=
true
;
return
;
}
}
...
...
@@ -496,8 +497,8 @@ static void multipath_release_clone(struct request *clone)
/*
* If we run out of usable paths, should we queue I/O or error it?
*/
static
int
queue_if_no_path
(
struct
multipath
*
m
,
unsigned
queue_if_no_path
,
unsigned
save_old_value
)
static
int
queue_if_no_path
(
struct
multipath
*
m
,
bool
queue_if_no_path
,
bool
save_old_value
)
{
unsigned
long
flags
;
...
...
@@ -803,12 +804,12 @@ static int parse_features(struct dm_arg_set *as, struct multipath *m)
argc
--
;
if
(
!
strcasecmp
(
arg_name
,
"queue_if_no_path"
))
{
r
=
queue_if_no_path
(
m
,
1
,
0
);
r
=
queue_if_no_path
(
m
,
true
,
false
);
continue
;
}
if
(
!
strcasecmp
(
arg_name
,
"retain_attached_hw_handler"
))
{
m
->
retain_attached_hw_handler
=
1
;
m
->
retain_attached_hw_handler
=
true
;
continue
;
}
...
...
@@ -947,7 +948,7 @@ static void flush_multipath_work(struct multipath *m)
unsigned
long
flags
;
spin_lock_irqsave
(
&
m
->
lock
,
flags
);
m
->
pg_init_disabled
=
1
;
m
->
pg_init_disabled
=
true
;
spin_unlock_irqrestore
(
&
m
->
lock
,
flags
);
flush_workqueue
(
kmpath_handlerd
);
...
...
@@ -956,7 +957,7 @@ static void flush_multipath_work(struct multipath *m)
flush_work
(
&
m
->
trigger_event
);
spin_lock_irqsave
(
&
m
->
lock
,
flags
);
m
->
pg_init_disabled
=
0
;
m
->
pg_init_disabled
=
false
;
spin_unlock_irqrestore
(
&
m
->
lock
,
flags
);
}
...
...
@@ -984,7 +985,7 @@ static int fail_path(struct pgpath *pgpath)
DMWARN
(
"Failing path %s."
,
pgpath
->
path
.
dev
->
name
);
pgpath
->
pg
->
ps
.
type
->
fail_path
(
&
pgpath
->
pg
->
ps
,
&
pgpath
->
path
);
pgpath
->
is_active
=
0
;
pgpath
->
is_active
=
false
;
pgpath
->
fail_count
++
;
m
->
nr_valid_paths
--
;
...
...
@@ -1028,7 +1029,7 @@ static int reinstate_path(struct pgpath *pgpath)
if
(
r
)
goto
out
;
pgpath
->
is_active
=
1
;
pgpath
->
is_active
=
true
;
if
(
!
m
->
nr_valid_paths
++
)
{
m
->
current_pgpath
=
NULL
;
...
...
@@ -1075,7 +1076,7 @@ static int action_dev(struct multipath *m, struct dm_dev *dev,
* Temporarily try to avoid having to use the specified PG
*/
static
void
bypass_pg
(
struct
multipath
*
m
,
struct
priority_group
*
pg
,
int
bypassed
)
bool
bypassed
)
{
unsigned
long
flags
;
...
...
@@ -1108,7 +1109,7 @@ static int switch_pg_num(struct multipath *m, const char *pgstr)
spin_lock_irqsave
(
&
m
->
lock
,
flags
);
list_for_each_entry
(
pg
,
&
m
->
priority_groups
,
list
)
{
pg
->
bypassed
=
0
;
pg
->
bypassed
=
false
;
if
(
--
pgnum
)
continue
;
...
...
@@ -1126,7 +1127,7 @@ static int switch_pg_num(struct multipath *m, const char *pgstr)
* Set/clear bypassed status of a PG.
* PGs are numbered upwards from 1 in the order they were declared.
*/
static
int
bypass_pg_num
(
struct
multipath
*
m
,
const
char
*
pgstr
,
int
bypassed
)
static
int
bypass_pg_num
(
struct
multipath
*
m
,
const
char
*
pgstr
,
bool
bypassed
)
{
struct
priority_group
*
pg
;
unsigned
pgnum
;
...
...
@@ -1150,17 +1151,17 @@ static int bypass_pg_num(struct multipath *m, const char *pgstr, int bypassed)
/*
* Should we retry pg_init immediately?
*/
static
int
pg_init_limit_reached
(
struct
multipath
*
m
,
struct
pgpath
*
pgpath
)
static
bool
pg_init_limit_reached
(
struct
multipath
*
m
,
struct
pgpath
*
pgpath
)
{
unsigned
long
flags
;
int
limit_reached
=
0
;
bool
limit_reached
=
false
;
spin_lock_irqsave
(
&
m
->
lock
,
flags
);
if
(
m
->
pg_init_count
<=
m
->
pg_init_retries
&&
!
m
->
pg_init_disabled
)
m
->
pg_init_required
=
1
;
m
->
pg_init_required
=
true
;
else
limit_reached
=
1
;
limit_reached
=
true
;
spin_unlock_irqrestore
(
&
m
->
lock
,
flags
);
...
...
@@ -1173,7 +1174,7 @@ static void pg_init_done(void *data, int errors)
struct
priority_group
*
pg
=
pgpath
->
pg
;
struct
multipath
*
m
=
pg
->
m
;
unsigned
long
flags
;
unsigned
delay_retry
=
0
;
bool
delay_retry
=
false
;
/* device or driver problems */
switch
(
errors
)
{
...
...
@@ -1196,7 +1197,7 @@ static void pg_init_done(void *data, int errors)
* Probably doing something like FW upgrade on the
* controller so try the other pg.
*/
bypass_pg
(
m
,
pg
,
1
);
bypass_pg
(
m
,
pg
,
true
);
break
;
case
SCSI_DH_RETRY
:
/* Wait before retrying. */
...
...
@@ -1224,7 +1225,7 @@ static void pg_init_done(void *data, int errors)
m
->
current_pg
=
NULL
;
}
}
else
if
(
!
m
->
pg_init_required
)
pg
->
bypassed
=
0
;
pg
->
bypassed
=
false
;
if
(
--
m
->
pg_init_in_progress
)
/* Activations of other paths are still on going */
...
...
@@ -1235,7 +1236,7 @@ static void pg_init_done(void *data, int errors)
if
(
__pg_init_all_paths
(
m
))
goto
out
;
}
m
->
queue_io
=
0
;
m
->
queue_io
=
false
;
/*
* Wake up any thread waiting to suspend.
...
...
@@ -1350,7 +1351,7 @@ static void multipath_presuspend(struct dm_target *ti)
{
struct
multipath
*
m
=
ti
->
private
;
queue_if_no_path
(
m
,
0
,
1
);
queue_if_no_path
(
m
,
false
,
true
);
}
static
void
multipath_postsuspend
(
struct
dm_target
*
ti
)
...
...
@@ -1516,10 +1517,10 @@ static int multipath_message(struct dm_target *ti, unsigned argc, char **argv)
if
(
argc
==
1
)
{
if
(
!
strcasecmp
(
argv
[
0
],
"queue_if_no_path"
))
{
r
=
queue_if_no_path
(
m
,
1
,
0
);
r
=
queue_if_no_path
(
m
,
true
,
false
);
goto
out
;
}
else
if
(
!
strcasecmp
(
argv
[
0
],
"fail_if_no_path"
))
{
r
=
queue_if_no_path
(
m
,
0
,
0
);
r
=
queue_if_no_path
(
m
,
false
,
false
);
goto
out
;
}
}
...
...
@@ -1530,10 +1531,10 @@ static int multipath_message(struct dm_target *ti, unsigned argc, char **argv)
}
if
(
!
strcasecmp
(
argv
[
0
],
"disable_group"
))
{
r
=
bypass_pg_num
(
m
,
argv
[
1
],
1
);
r
=
bypass_pg_num
(
m
,
argv
[
1
],
true
);
goto
out
;
}
else
if
(
!
strcasecmp
(
argv
[
0
],
"enable_group"
))
{
r
=
bypass_pg_num
(
m
,
argv
[
1
],
0
);
r
=
bypass_pg_num
(
m
,
argv
[
1
],
false
);
goto
out
;
}
else
if
(
!
strcasecmp
(
argv
[
0
],
"switch_group"
))
{
r
=
switch_pg_num
(
m
,
argv
[
1
]);
...
...
@@ -1651,7 +1652,7 @@ static int __pgpath_busy(struct pgpath *pgpath)
*/
static
int
multipath_busy
(
struct
dm_target
*
ti
)
{
int
busy
=
0
,
has_active
=
0
;
bool
busy
=
false
,
has_active
=
false
;
struct
multipath
*
m
=
ti
->
private
;
struct
priority_group
*
pg
;
struct
pgpath
*
pgpath
;
...
...
@@ -1662,7 +1663,7 @@ static int multipath_busy(struct dm_target *ti)
/* pg_init in progress or no paths available */
if
(
m
->
pg_init_in_progress
||
(
!
m
->
nr_valid_paths
&&
m
->
queue_if_no_path
))
{
busy
=
1
;
busy
=
true
;
goto
out
;
}
/* Guess which priority_group will be used at next mapping time */
...
...
@@ -1684,13 +1685,13 @@ static int multipath_busy(struct dm_target *ti)
* If there is one non-busy active path at least, the path selector
* will be able to select it. So we consider such a pg as not busy.
*/
busy
=
1
;
busy
=
true
;
list_for_each_entry
(
pgpath
,
&
pg
->
pgpaths
,
list
)
if
(
pgpath
->
is_active
)
{
has_active
=
1
;
has_active
=
true
;
if
(
!
__pgpath_busy
(
pgpath
))
{
busy
=
0
;
busy
=
false
;
break
;
}
}
...
...
@@ -1701,7 +1702,7 @@ static int multipath_busy(struct dm_target *ti)
* the current_pg will be changed at next mapping time.
* We need to try mapping to determine it.
*/
busy
=
0
;
busy
=
false
;
out:
spin_unlock_irqrestore
(
&
m
->
lock
,
flags
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录