aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--block/blk-mq-cpu.c12
-rw-r--r--block/blk-mq.c9
-rw-r--r--block/blk-mq.h2
-rw-r--r--include/linux/blk-mq.h2
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
31void blk_mq_register_cpu_notifier(struct blk_mq_cpu_notifier *notifier) 35void 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
47void blk_mq_init_cpu_notifier(struct blk_mq_cpu_notifier *notifier, 51void 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}
1197EXPORT_SYMBOL(blk_mq_free_single_hw_queue); 1197EXPORT_SYMBOL(blk_mq_free_single_hw_queue);
1198 1198
1199static void blk_mq_hctx_notify(void *data, unsigned long action, 1199static 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
1245static void blk_mq_free_rq_map(struct blk_mq_tag_set *set, 1246static 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 */
40struct blk_mq_cpu_notifier; 40struct blk_mq_cpu_notifier;
41void blk_mq_init_cpu_notifier(struct blk_mq_cpu_notifier *notifier, 41void 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);
44void blk_mq_register_cpu_notifier(struct blk_mq_cpu_notifier *notifier); 44void blk_mq_register_cpu_notifier(struct blk_mq_cpu_notifier *notifier);
45void blk_mq_unregister_cpu_notifier(struct blk_mq_cpu_notifier *notifier); 45void 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;
8struct blk_mq_cpu_notifier { 8struct 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
14struct blk_mq_ctxmap { 14struct blk_mq_ctxmap {