mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-28 02:32:09 -04:00
Merge branch 'nvme-4.13' of git://git.infradead.org/nvme into for-linus
Pull followup NVMe (mostly) changes from Sagi: I added the quiesce/unquiesce patches in here as it's easy for me easily apply changes on top. It has accumulated reviews and includes mostly nvme anyway, please tell me if you don't want to take them with this. This includes: - quiesce/unquiesce fixes in nvme and others from me - nvme-fc add create association padding spec updates from James - some more quirking from MKP - nvmet nit cleanup from Max - Fix nvme-rdma racy RDMA completion signalling from Marta - some centralization patches from me - add tagset nr_hw_queues updates on controller resets in nvme drivers from me - nvme-rdma fix resources recycling when doing error recovery from me - minor cleanups in nvme-fc from me
This commit is contained in:
commit
459bd0dc39
12 changed files with 248 additions and 202 deletions
|
|
@ -950,7 +950,7 @@ static int mtip_quiesce_io(struct mtip_port *port, unsigned long timeout)
|
|||
unsigned long to;
|
||||
bool active = true;
|
||||
|
||||
blk_mq_stop_hw_queues(port->dd->queue);
|
||||
blk_mq_quiesce_queue(port->dd->queue);
|
||||
|
||||
to = jiffies + msecs_to_jiffies(timeout);
|
||||
do {
|
||||
|
|
@ -970,10 +970,10 @@ static int mtip_quiesce_io(struct mtip_port *port, unsigned long timeout)
|
|||
break;
|
||||
} while (time_before(jiffies, to));
|
||||
|
||||
blk_mq_start_stopped_hw_queues(port->dd->queue, true);
|
||||
blk_mq_unquiesce_queue(port->dd->queue);
|
||||
return active ? -EBUSY : 0;
|
||||
err_fault:
|
||||
blk_mq_start_stopped_hw_queues(port->dd->queue, true);
|
||||
blk_mq_unquiesce_queue(port->dd->queue);
|
||||
return -EFAULT;
|
||||
}
|
||||
|
||||
|
|
@ -2737,6 +2737,9 @@ static void mtip_abort_cmd(struct request *req, void *data,
|
|||
struct mtip_cmd *cmd = blk_mq_rq_to_pdu(req);
|
||||
struct driver_data *dd = data;
|
||||
|
||||
if (!blk_mq_request_started(req))
|
||||
return;
|
||||
|
||||
dbg_printk(MTIP_DRV_NAME " Aborting request, tag = %d\n", req->tag);
|
||||
|
||||
clear_bit(req->tag, dd->port->cmds_to_issue);
|
||||
|
|
@ -2749,6 +2752,9 @@ static void mtip_queue_cmd(struct request *req, void *data,
|
|||
{
|
||||
struct driver_data *dd = data;
|
||||
|
||||
if (!blk_mq_request_started(req))
|
||||
return;
|
||||
|
||||
set_bit(req->tag, dd->port->cmds_to_issue);
|
||||
blk_abort_request(req);
|
||||
}
|
||||
|
|
@ -2814,6 +2820,8 @@ restart_eh:
|
|||
dev_warn(&dd->pdev->dev,
|
||||
"Completion workers still active!");
|
||||
|
||||
blk_mq_quiesce_queue(dd->queue);
|
||||
|
||||
spin_lock(dd->queue->queue_lock);
|
||||
blk_mq_tagset_busy_iter(&dd->tags,
|
||||
mtip_queue_cmd, dd);
|
||||
|
|
@ -2826,6 +2834,8 @@ restart_eh:
|
|||
mtip_abort_cmd, dd);
|
||||
|
||||
clear_bit(MTIP_PF_TO_ACTIVE_BIT, &dd->port->flags);
|
||||
|
||||
blk_mq_unquiesce_queue(dd->queue);
|
||||
}
|
||||
|
||||
if (test_bit(MTIP_PF_ISSUE_CMDS_BIT, &port->flags)) {
|
||||
|
|
@ -3995,8 +4005,9 @@ static int mtip_block_remove(struct driver_data *dd)
|
|||
dd->disk->disk_name);
|
||||
|
||||
blk_freeze_queue_start(dd->queue);
|
||||
blk_mq_stop_hw_queues(dd->queue);
|
||||
blk_mq_quiesce_queue(dd->queue);
|
||||
blk_mq_tagset_busy_iter(&dd->tags, mtip_no_dev_cleanup, dd);
|
||||
blk_mq_unquiesce_queue(dd->queue);
|
||||
|
||||
/*
|
||||
* Delete our gendisk structure. This also removes the device
|
||||
|
|
|
|||
|
|
@ -661,9 +661,9 @@ static void nbd_clear_req(struct request *req, void *data, bool reserved)
|
|||
|
||||
static void nbd_clear_que(struct nbd_device *nbd)
|
||||
{
|
||||
blk_mq_stop_hw_queues(nbd->disk->queue);
|
||||
blk_mq_quiesce_queue(nbd->disk->queue);
|
||||
blk_mq_tagset_busy_iter(&nbd->tag_set, nbd_clear_req, NULL);
|
||||
blk_mq_start_hw_queues(nbd->disk->queue);
|
||||
blk_mq_unquiesce_queue(nbd->disk->queue);
|
||||
dev_dbg(disk_to_dev(nbd->disk), "queue cleared\n");
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -840,7 +840,7 @@ static int virtblk_freeze(struct virtio_device *vdev)
|
|||
/* Make sure no work handler is accessing the device. */
|
||||
flush_work(&vblk->config_work);
|
||||
|
||||
blk_mq_stop_hw_queues(vblk->disk->queue);
|
||||
blk_mq_quiesce_queue(vblk->disk->queue);
|
||||
|
||||
vdev->config->del_vqs(vdev);
|
||||
return 0;
|
||||
|
|
@ -857,7 +857,7 @@ static int virtblk_restore(struct virtio_device *vdev)
|
|||
|
||||
virtio_device_ready(vdev);
|
||||
|
||||
blk_mq_start_stopped_hw_queues(vblk->disk->queue, true);
|
||||
blk_mq_unquiesce_queue(vblk->disk->queue);
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
|
|
|||
Loading…
Reference in a new issue