diff options
| -rw-r--r-- | block/blk-core.c | 17 | ||||
| -rw-r--r-- | block/blk-flush.c | 11 | ||||
| -rw-r--r-- | drivers/block/mtip32xx/mtip32xx.c | 2 |
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 | ||
| 705 | out_free_flush_rq: | 700 | return q; |
| 706 | kfree(uninit_q->flush_rq); | ||
| 707 | out_cleanup_queue: | ||
| 708 | blk_cleanup_queue(uninit_q); | ||
| 709 | return NULL; | ||
| 710 | } | 701 | } |
| 711 | EXPORT_SYMBOL(blk_init_queue_node); | 702 | EXPORT_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 | ||
| 143 | static bool blk_flush_queue_rq(struct request *rq) | 143 | static 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 | ||
| 332 | static void flush_data_end_io(struct request *rq, int error) | 335 | static 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) { |
