|
@@ -738,25 +738,6 @@ static int nvme_submit_bio_queue(struct nvme_queue *nvmeq, struct nvme_ns *ns,
|
|
|
return result;
|
|
|
}
|
|
|
|
|
|
-static void nvme_make_request(struct request_queue *q, struct bio *bio)
|
|
|
-{
|
|
|
- struct nvme_ns *ns = q->queuedata;
|
|
|
- struct nvme_queue *nvmeq = get_nvmeq(ns->dev);
|
|
|
- int result = -EBUSY;
|
|
|
-
|
|
|
- spin_lock_irq(&nvmeq->q_lock);
|
|
|
- if (bio_list_empty(&nvmeq->sq_cong))
|
|
|
- result = nvme_submit_bio_queue(nvmeq, ns, bio);
|
|
|
- if (unlikely(result)) {
|
|
|
- if (bio_list_empty(&nvmeq->sq_cong))
|
|
|
- add_wait_queue(&nvmeq->sq_full, &nvmeq->sq_cong_wait);
|
|
|
- bio_list_add(&nvmeq->sq_cong, bio);
|
|
|
- }
|
|
|
-
|
|
|
- spin_unlock_irq(&nvmeq->q_lock);
|
|
|
- put_nvmeq(nvmeq);
|
|
|
-}
|
|
|
-
|
|
|
static int nvme_process_cq(struct nvme_queue *nvmeq)
|
|
|
{
|
|
|
u16 head, phase;
|
|
@@ -797,6 +778,26 @@ static int nvme_process_cq(struct nvme_queue *nvmeq)
|
|
|
return 1;
|
|
|
}
|
|
|
|
|
|
+static void nvme_make_request(struct request_queue *q, struct bio *bio)
|
|
|
+{
|
|
|
+ struct nvme_ns *ns = q->queuedata;
|
|
|
+ struct nvme_queue *nvmeq = get_nvmeq(ns->dev);
|
|
|
+ int result = -EBUSY;
|
|
|
+
|
|
|
+ spin_lock_irq(&nvmeq->q_lock);
|
|
|
+ if (bio_list_empty(&nvmeq->sq_cong))
|
|
|
+ result = nvme_submit_bio_queue(nvmeq, ns, bio);
|
|
|
+ if (unlikely(result)) {
|
|
|
+ if (bio_list_empty(&nvmeq->sq_cong))
|
|
|
+ add_wait_queue(&nvmeq->sq_full, &nvmeq->sq_cong_wait);
|
|
|
+ bio_list_add(&nvmeq->sq_cong, bio);
|
|
|
+ }
|
|
|
+
|
|
|
+ nvme_process_cq(nvmeq);
|
|
|
+ spin_unlock_irq(&nvmeq->q_lock);
|
|
|
+ put_nvmeq(nvmeq);
|
|
|
+}
|
|
|
+
|
|
|
static irqreturn_t nvme_irq(int irq, void *data)
|
|
|
{
|
|
|
irqreturn_t result;
|