svn commit: r293665 - stable/10/sys/dev/nvd
Jim Harris
jimharris at FreeBSD.org
Mon Jan 11 17:22:58 UTC 2016
Author: jimharris
Date: Mon Jan 11 17:22:57 2016
New Revision: 293665
URL: https://svnweb.freebsd.org/changeset/base/293665
Log:
MFC r293322:
nvd: break out submission logic into separate function
This enables a future patch using this same logic to submit
I/O directly bypassing the taskqueue.
Modified:
stable/10/sys/dev/nvd/nvd.c
Modified: stable/10/sys/dev/nvd/nvd.c
==============================================================================
--- stable/10/sys/dev/nvd/nvd.c Mon Jan 11 17:21:38 2016 (r293664)
+++ stable/10/sys/dev/nvd/nvd.c Mon Jan 11 17:22:57 2016 (r293665)
@@ -47,6 +47,8 @@ struct nvd_disk;
static disk_ioctl_t nvd_ioctl;
static disk_strategy_t nvd_strategy;
+static void nvd_done(void *arg, const struct nvme_completion *cpl);
+
static void *nvd_new_disk(struct nvme_namespace *ns, void *ctrlr);
static void destroy_geom_disk(struct nvd_disk *ndisk);
@@ -148,6 +150,26 @@ nvd_unload()
nvme_unregister_consumer(consumer_handle);
}
+static int
+nvd_bio_submit(struct nvd_disk *ndisk, struct bio *bp)
+{
+ int err;
+
+ bp->bio_driver1 = NULL;
+ atomic_add_int(&ndisk->cur_depth, 1);
+ err = nvme_ns_bio_process(ndisk->ns, bp, nvd_done);
+ if (err) {
+ atomic_add_int(&ndisk->cur_depth, -1);
+ bp->bio_error = err;
+ bp->bio_flags |= BIO_ERROR;
+ bp->bio_resid = bp->bio_bcount;
+ biodone(bp);
+ return (-1);
+ }
+
+ return (0);
+}
+
static void
nvd_strategy(struct bio *bp)
{
@@ -195,7 +217,6 @@ nvd_bioq_process(void *arg, int pending)
{
struct nvd_disk *ndisk = arg;
struct bio *bp;
- int err;
for (;;) {
mtx_lock(&ndisk->bioqlock);
@@ -204,17 +225,7 @@ nvd_bioq_process(void *arg, int pending)
if (bp == NULL)
break;
- bp->bio_driver1 = NULL;
- atomic_add_int(&ndisk->cur_depth, 1);
-
- err = nvme_ns_bio_process(ndisk->ns, bp, nvd_done);
-
- if (err) {
- atomic_add_int(&ndisk->cur_depth, -1);
- bp->bio_error = err;
- bp->bio_flags |= BIO_ERROR;
- bp->bio_resid = bp->bio_bcount;
- biodone(bp);
+ if (nvd_bio_submit(ndisk, bp) != 0) {
continue;
}
More information about the svn-src-stable-10
mailing list