aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--block/blk-core.c17
-rw-r--r--block/blk-flush.c11
-rw-r--r--drivers/block/mtip32xx/mtip32xx.c2
3 files changed, 14 insertions, 16 deletions
diff --git a/block/blk-core.c b/block/blk-core.c
index 853f92749202..4cd5ffc18442 100644
--- a/block/blk-core.c
+++ b/block/blk-core.c
@@ -693,20 +693,11 @@ blk_init_queue_node(request_fn_proc *rfn, spinlock_t *lock, int node_id)
693 if (!uninit_q) 693 if (!uninit_q)
694 return NULL; 694 return NULL;
695 695
696 uninit_q->flush_rq = kzalloc(sizeof(struct request), GFP_KERNEL);
697 if (!uninit_q->flush_rq)
698 goto out_cleanup_queue;
699
700 q = blk_init_allocated_queue(uninit_q, rfn, lock); 696 q = blk_init_allocated_queue(uninit_q, rfn, lock);
701 if (!q) 697 if (!q)
702 goto out_free_flush_rq; 698 blk_cleanup_queue(uninit_q);
703 return q;
704 699
705out_free_flush_rq: 700 return q;
706 kfree(uninit_q->flush_rq);
707out_cleanup_queue:
708 blk_cleanup_queue(uninit_q);
709 return NULL;
710} 701}
711EXPORT_SYMBOL(blk_init_queue_node); 702EXPORT_SYMBOL(blk_init_queue_node);
712 703
@@ -717,6 +708,10 @@ blk_init_allocated_queue(struct request_queue *q, request_fn_proc *rfn,
717 if (!q) 708 if (!q)
718 return NULL; 709 return NULL;
719 710
711 q->flush_rq = kzalloc(sizeof(struct request), GFP_KERNEL);
712 if (!q->flush_rq)
713 return NULL;
714
720 if (blk_init_rl(&q->root_rl, q, GFP_KERNEL)) 715 if (blk_init_rl(&q->root_rl, q, GFP_KERNEL))
721 return NULL; 716 return NULL;
722 717
diff --git a/block/blk-flush.c b/block/blk-flush.c
index f598f794c3c6..43e6b4755e9a 100644
--- a/block/blk-flush.c
+++ b/block/blk-flush.c
@@ -140,14 +140,17 @@ static void mq_flush_run(struct work_struct *work)
140 blk_mq_insert_request(rq, false, true, false); 140 blk_mq_insert_request(rq, false, true, false);
141} 141}
142 142
143static bool blk_flush_queue_rq(struct request *rq) 143static bool blk_flush_queue_rq(struct request *rq, bool add_front)
144{ 144{
145 if (rq->q->mq_ops) { 145 if (rq->q->mq_ops) {
146 INIT_WORK(&rq->mq_flush_work, mq_flush_run); 146 INIT_WORK(&rq->mq_flush_work, mq_flush_run);
147 kblockd_schedule_work(rq->q, &rq->mq_flush_work); 147 kblockd_schedule_work(rq->q, &rq->mq_flush_work);
148 return false; 148 return false;
149 } else { 149 } else {
150 list_add_tail(&rq->queuelist, &rq->q->queue_head); 150 if (add_front)
151 list_add(&rq->queuelist, &rq->q->queue_head);
152 else
153 list_add_tail(&rq->queuelist, &rq->q->queue_head);
151 return true; 154 return true;
152 } 155 }
153} 156}
@@ -193,7 +196,7 @@ static bool blk_flush_complete_seq(struct request *rq, unsigned int seq,
193 196
194 case REQ_FSEQ_DATA: 197 case REQ_FSEQ_DATA:
195 list_move_tail(&rq->flush.list, &q->flush_data_in_flight); 198 list_move_tail(&rq->flush.list, &q->flush_data_in_flight);
196 queued = blk_flush_queue_rq(rq); 199 queued = blk_flush_queue_rq(rq, true);
197 break; 200 break;
198 201
199 case REQ_FSEQ_DONE: 202 case REQ_FSEQ_DONE:
@@ -326,7 +329,7 @@ static bool blk_kick_flush(struct request_queue *q)
326 q->flush_rq->rq_disk = first_rq->rq_disk; 329 q->flush_rq->rq_disk = first_rq->rq_disk;
327 q->flush_rq->end_io = flush_end_io; 330 q->flush_rq->end_io = flush_end_io;
328 331
329 return blk_flush_queue_rq(q->flush_rq); 332 return blk_flush_queue_rq(q->flush_rq, false);
330} 333}
331 334
332static void flush_data_end_io(struct request *rq, int error) 335static void flush_data_end_io(struct request *rq, int error)
diff --git a/drivers/block/mtip32xx/mtip32xx.c b/drivers/block/mtip32xx/mtip32xx.c
index 516026954be6..d777bb7cea93 100644
--- a/drivers/block/mtip32xx/mtip32xx.c
+++ b/drivers/block/mtip32xx/mtip32xx.c
@@ -4498,7 +4498,7 @@ static int mtip_pci_probe(struct pci_dev *pdev,
4498 } 4498 }
4499 dev_info(&pdev->dev, "NUMA node %d (closest: %d,%d, probe on %d:%d)\n", 4499 dev_info(&pdev->dev, "NUMA node %d (closest: %d,%d, probe on %d:%d)\n",
4500 my_node, pcibus_to_node(pdev->bus), dev_to_node(&pdev->dev), 4500 my_node, pcibus_to_node(pdev->bus), dev_to_node(&pdev->dev),
4501 cpu_to_node(smp_processor_id()), smp_processor_id()); 4501 cpu_to_node(raw_smp_processor_id()), raw_smp_processor_id());
4502 4502
4503 dd = kzalloc_node(sizeof(struct driver_data), GFP_KERNEL, my_node); 4503 dd = kzalloc_node(sizeof(struct driver_data), GFP_KERNEL, my_node);
4504 if (dd == NULL) { 4504 if (dd == NULL) {