dsched - Encapsulate tdio for curthread creation
authorAlex Hornung <ahornung@gmail.com>
Thu, 29 Jul 2010 15:07:11 +0000 (16:07 +0100)
committerAlex Hornung <ahornung@gmail.com>
Thu, 29 Jul 2010 15:08:16 +0000 (16:08 +0100)
* Encapsulate the creation of a tdio for a thread created during the
  "prepare" method.

sys/kern/dsched/fq/fq_core.c
sys/kern/kern_dsched.c
sys/sys/dsched.h

index 7598430..823895f 100644 (file)
@@ -65,7 +65,6 @@ extern struct dsched_policy dsched_fq_policy;
 void
 fq_dispatcher(struct fq_disk_ctx *diskctx)
 {
-       struct dsched_thread_ctx *tdctx;
        struct dsched_thread_io *ds_tdio, *ds_tdio2;
        struct fq_thread_io     *tdio;
        struct bio *bio, *bio2;
@@ -76,10 +75,8 @@ fq_dispatcher(struct fq_disk_ctx *diskctx)
         * since it isn't assigned one during fq_prepare, as the disk
         * is not set up yet.
         */
-       tdctx = dsched_get_thread_priv(curthread);
-       KKASSERT(tdctx != NULL);
-
-       tdio = (struct fq_thread_io *)dsched_thread_io_alloc(diskctx->head.dp, tdctx, &dsched_fq_policy);
+       tdio = (struct fq_thread_io *)dsched_new_policy_thread_tdio(&diskctx->head,
+           &dsched_fq_policy);
 
        DSCHED_DISK_CTX_LOCK(&diskctx->head);
        for(;;) {
index 8c8efe3..102ef94 100644 (file)
@@ -936,6 +936,19 @@ dsched_exit_thread(struct thread *td)
        atomic_subtract_int(&dsched_stats.nthreads, 1);
 }
 
+struct dsched_thread_io *
+dsched_new_policy_thread_tdio(struct dsched_disk_ctx *diskctx,
+    struct dsched_policy *pol) {
+       struct dsched_thread_ctx *tdctx;
+       struct dsched_thread_io *tdio;
+
+       tdctx = dsched_get_thread_priv(curthread);
+       KKASSERT(tdctx != NULL);
+
+       tdio = dsched_thread_io_alloc(diskctx->dp, tdctx, pol);
+       return tdio;
+}
+
 /* DEFAULT NOOP POLICY */
 
 static int
index c2e900c..164a3d7 100644 (file)
@@ -232,6 +232,8 @@ void        dsched_disk_ctx_unref(struct dsched_disk_ctx *diskctx);
 void   dsched_thread_io_unref(struct dsched_thread_io *tdio);
 void   dsched_thread_ctx_unref(struct dsched_thread_ctx *tdctx);
 
+struct dsched_thread_io *dsched_new_policy_thread_tdio(struct dsched_disk_ctx *diskctx,
+       struct dsched_policy *pol);
 struct dsched_thread_io *dsched_thread_io_alloc(struct disk *dp,
        struct dsched_thread_ctx *tdctx, struct dsched_policy *pol);
 struct dsched_disk_ctx *dsched_disk_ctx_alloc(struct disk *dp,