Author: jimharris
Date: Thu Jan  7 15:59:51 2016
New Revision: 293322
URL: https://svnweb.freebsd.org/changeset/base/293322

Log:
  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.
  
  MFC after:    3 days
  Sponsored by: Intel

Modified:
  head/sys/dev/nvd/nvd.c

Modified: head/sys/dev/nvd/nvd.c
==============================================================================
--- head/sys/dev/nvd/nvd.c      Thu Jan  7 15:58:44 2016        (r293321)
+++ head/sys/dev/nvd/nvd.c      Thu Jan  7 15:59:51 2016        (r293322)
@@ -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;
                }
 
_______________________________________________
svn-src-head@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to