diff options
-rw-r--r-- | block/blk-mq-cpu.c | 12 | ||||
-rw-r--r-- | block/blk-mq.c | 9 | ||||
-rw-r--r-- | block/blk-mq.h | 2 | ||||
-rw-r--r-- | include/linux/blk-mq.h | 2 |
4 files changed, 15 insertions, 10 deletions
diff --git a/block/blk-mq-cpu.c b/block/blk-mq-cpu.c index 136ef8643bba..d2c253f71b86 100644 --- a/block/blk-mq-cpu.c +++ b/block/blk-mq-cpu.c | |||
@@ -18,14 +18,18 @@ static int blk_mq_main_cpu_notify(struct notifier_block *self, | |||
18 | { | 18 | { |
19 | unsigned int cpu = (unsigned long) hcpu; | 19 | unsigned int cpu = (unsigned long) hcpu; |
20 | struct blk_mq_cpu_notifier *notify; | 20 | struct blk_mq_cpu_notifier *notify; |
21 | int ret = NOTIFY_OK; | ||
21 | 22 | ||
22 | raw_spin_lock(&blk_mq_cpu_notify_lock); | 23 | raw_spin_lock(&blk_mq_cpu_notify_lock); |
23 | 24 | ||
24 | list_for_each_entry(notify, &blk_mq_cpu_notify_list, list) | 25 | list_for_each_entry(notify, &blk_mq_cpu_notify_list, list) { |
25 | notify->notify(notify->data, action, cpu); | 26 | ret = notify->notify(notify->data, action, cpu); |
27 | if (ret != NOTIFY_OK) | ||
28 | break; | ||
29 | } | ||
26 | 30 | ||
27 | raw_spin_unlock(&blk_mq_cpu_notify_lock); | 31 | raw_spin_unlock(&blk_mq_cpu_notify_lock); |
28 | return NOTIFY_OK; | 32 | return ret; |
29 | } | 33 | } |
30 | 34 | ||
31 | void blk_mq_register_cpu_notifier(struct blk_mq_cpu_notifier *notifier) | 35 | void blk_mq_register_cpu_notifier(struct blk_mq_cpu_notifier *notifier) |
@@ -45,7 +49,7 @@ void blk_mq_unregister_cpu_notifier(struct blk_mq_cpu_notifier *notifier) | |||
45 | } | 49 | } |
46 | 50 | ||
47 | void blk_mq_init_cpu_notifier(struct blk_mq_cpu_notifier *notifier, | 51 | void blk_mq_init_cpu_notifier(struct blk_mq_cpu_notifier *notifier, |
48 | void (*fn)(void *, unsigned long, unsigned int), | 52 | int (*fn)(void *, unsigned long, unsigned int), |
49 | void *data) | 53 | void *data) |
50 | { | 54 | { |
51 | notifier->notify = fn; | 55 | notifier->notify = fn; |
diff --git a/block/blk-mq.c b/block/blk-mq.c index ef7ed5e95d6d..5a3683fc5bdb 100644 --- a/block/blk-mq.c +++ b/block/blk-mq.c | |||
@@ -1196,8 +1196,8 @@ void blk_mq_free_single_hw_queue(struct blk_mq_hw_ctx *hctx, | |||
1196 | } | 1196 | } |
1197 | EXPORT_SYMBOL(blk_mq_free_single_hw_queue); | 1197 | EXPORT_SYMBOL(blk_mq_free_single_hw_queue); |
1198 | 1198 | ||
1199 | static void blk_mq_hctx_notify(void *data, unsigned long action, | 1199 | static int blk_mq_hctx_notify(void *data, unsigned long action, |
1200 | unsigned int cpu) | 1200 | unsigned int cpu) |
1201 | { | 1201 | { |
1202 | struct blk_mq_hw_ctx *hctx = data; | 1202 | struct blk_mq_hw_ctx *hctx = data; |
1203 | struct request_queue *q = hctx->queue; | 1203 | struct request_queue *q = hctx->queue; |
@@ -1205,7 +1205,7 @@ static void blk_mq_hctx_notify(void *data, unsigned long action, | |||
1205 | LIST_HEAD(tmp); | 1205 | LIST_HEAD(tmp); |
1206 | 1206 | ||
1207 | if (action != CPU_DEAD && action != CPU_DEAD_FROZEN) | 1207 | if (action != CPU_DEAD && action != CPU_DEAD_FROZEN) |
1208 | return; | 1208 | return NOTIFY_OK; |
1209 | 1209 | ||
1210 | /* | 1210 | /* |
1211 | * Move ctx entries to new CPU, if this one is going away. | 1211 | * Move ctx entries to new CPU, if this one is going away. |
@@ -1220,7 +1220,7 @@ static void blk_mq_hctx_notify(void *data, unsigned long action, | |||
1220 | spin_unlock(&ctx->lock); | 1220 | spin_unlock(&ctx->lock); |
1221 | 1221 | ||
1222 | if (list_empty(&tmp)) | 1222 | if (list_empty(&tmp)) |
1223 | return; | 1223 | return NOTIFY_OK; |
1224 | 1224 | ||
1225 | ctx = blk_mq_get_ctx(q); | 1225 | ctx = blk_mq_get_ctx(q); |
1226 | spin_lock(&ctx->lock); | 1226 | spin_lock(&ctx->lock); |
@@ -1240,6 +1240,7 @@ static void blk_mq_hctx_notify(void *data, unsigned long action, | |||
1240 | 1240 | ||
1241 | blk_mq_run_hw_queue(hctx, true); | 1241 | blk_mq_run_hw_queue(hctx, true); |
1242 | blk_mq_put_ctx(ctx); | 1242 | blk_mq_put_ctx(ctx); |
1243 | return NOTIFY_OK; | ||
1243 | } | 1244 | } |
1244 | 1245 | ||
1245 | static void blk_mq_free_rq_map(struct blk_mq_tag_set *set, | 1246 | static void blk_mq_free_rq_map(struct blk_mq_tag_set *set, |
diff --git a/block/blk-mq.h b/block/blk-mq.h index 7db4fe4bd002..491dbd4e93f5 100644 --- a/block/blk-mq.h +++ b/block/blk-mq.h | |||
@@ -39,7 +39,7 @@ int blk_mq_update_nr_requests(struct request_queue *q, unsigned int nr); | |||
39 | */ | 39 | */ |
40 | struct blk_mq_cpu_notifier; | 40 | struct blk_mq_cpu_notifier; |
41 | void blk_mq_init_cpu_notifier(struct blk_mq_cpu_notifier *notifier, | 41 | void blk_mq_init_cpu_notifier(struct blk_mq_cpu_notifier *notifier, |
42 | void (*fn)(void *, unsigned long, unsigned int), | 42 | int (*fn)(void *, unsigned long, unsigned int), |
43 | void *data); | 43 | void *data); |
44 | void blk_mq_register_cpu_notifier(struct blk_mq_cpu_notifier *notifier); | 44 | void blk_mq_register_cpu_notifier(struct blk_mq_cpu_notifier *notifier); |
45 | void blk_mq_unregister_cpu_notifier(struct blk_mq_cpu_notifier *notifier); | 45 | void blk_mq_unregister_cpu_notifier(struct blk_mq_cpu_notifier *notifier); |
diff --git a/include/linux/blk-mq.h b/include/linux/blk-mq.h index f45424453338..4d2800567aad 100644 --- a/include/linux/blk-mq.h +++ b/include/linux/blk-mq.h | |||
@@ -8,7 +8,7 @@ struct blk_mq_tags; | |||
8 | struct blk_mq_cpu_notifier { | 8 | struct blk_mq_cpu_notifier { |
9 | struct list_head list; | 9 | struct list_head list; |
10 | void *data; | 10 | void *data; |
11 | void (*notify)(void *data, unsigned long action, unsigned int cpu); | 11 | int (*notify)(void *data, unsigned long action, unsigned int cpu); |
12 | }; | 12 | }; |
13 | 13 | ||
14 | struct blk_mq_ctxmap { | 14 | struct blk_mq_ctxmap { |