Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/sys Defer to synchronous I/O before the aiodone work queue e...



details:   https://anonhg.NetBSD.org/src/rev/298ed51ef56e
branches:  trunk
changeset: 460073:298ed51ef56e
user:      mlelstv <mlelstv%NetBSD.org@localhost>
date:      Sun Oct 06 05:48:00 2019 +0000

description:
Defer to synchronous I/O before the aiodone work queue exists.

diffstat:

 sys/miscfs/genfs/genfs_io.c |  9 +++++++--
 sys/uvm/uvm_swap.c          |  9 +++++++--
 2 files changed, 14 insertions(+), 4 deletions(-)

diffs (81 lines):

diff -r 039ba0d04321 -r 298ed51ef56e sys/miscfs/genfs/genfs_io.c
--- a/sys/miscfs/genfs/genfs_io.c       Sun Oct 06 02:30:58 2019 +0000
+++ b/sys/miscfs/genfs/genfs_io.c       Sun Oct 06 05:48:00 2019 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: genfs_io.c,v 1.75 2019/07/11 16:59:14 maxv Exp $       */
+/*     $NetBSD: genfs_io.c,v 1.76 2019/10/06 05:48:00 mlelstv Exp $    */
 
 /*
  * Copyright (c) 1982, 1986, 1989, 1993
@@ -31,7 +31,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: genfs_io.c,v 1.75 2019/07/11 16:59:14 maxv Exp $");
+__KERNEL_RCSID(0, "$NetBSD: genfs_io.c,v 1.76 2019/10/06 05:48:00 mlelstv Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -561,6 +561,9 @@
        if (kva == 0)
                return EBUSY;
 
+       if (uvm.aiodone_queue == NULL)
+               async = 0;
+
        mbp = getiobuf(vp, true);
        mbp->b_bufsize = totalbytes;
        mbp->b_data = (void *)kva;
@@ -1377,6 +1380,7 @@
            UVMPAGER_MAPIN_WRITE | UVMPAGER_MAPIN_WAITOK);
        len = npages << PAGE_SHIFT;
 
+       KASSERT(uvm.aiodone_queue != NULL);
        error = genfs_do_io(vp, off, kva, len, flags, UIO_WRITE,
                            uvm_aio_biodone);
 
@@ -1400,6 +1404,7 @@
            UVMPAGER_MAPIN_READ | UVMPAGER_MAPIN_WAITOK);
        len = npages << PAGE_SHIFT;
 
+       KASSERT(uvm.aiodone_queue != NULL);
        error = genfs_do_io(vp, off, kva, len, flags, UIO_WRITE,
                            uvm_aio_biodone);
 
diff -r 039ba0d04321 -r 298ed51ef56e sys/uvm/uvm_swap.c
--- a/sys/uvm/uvm_swap.c        Sun Oct 06 02:30:58 2019 +0000
+++ b/sys/uvm/uvm_swap.c        Sun Oct 06 05:48:00 2019 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: uvm_swap.c,v 1.180 2019/01/27 05:22:19 kre Exp $       */
+/*     $NetBSD: uvm_swap.c,v 1.181 2019/10/06 05:48:00 mlelstv Exp $   */
 
 /*
  * Copyright (c) 1995, 1996, 1997, 2009 Matthew R. Green
@@ -30,7 +30,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: uvm_swap.c,v 1.180 2019/01/27 05:22:19 kre Exp $");
+__KERNEL_RCSID(0, "$NetBSD: uvm_swap.c,v 1.181 2019/10/06 05:48:00 mlelstv Exp $");
 
 #include "opt_uvmhist.h"
 #include "opt_compat_netbsd.h"
@@ -1778,6 +1778,10 @@
        write = (flags & B_READ) == 0;
        async = (flags & B_ASYNC) != 0;
 
+       /* XXX swap io make take place before the aiodone queue exists */
+       if (uvm.aiodone_queue == NULL)
+               async = 0;
+
        /*
         * allocate a buf for the i/o.
         */
@@ -1832,6 +1836,7 @@
         */
 
        if (async) {
+               KASSERT(uvm.aiodone_queue != NULL);
                bp->b_iodone = uvm_aio_biodone;
                UVMHIST_LOG(pdhist, "doing async!", 0, 0, 0, 0);
                if (curlwp == uvm.pagedaemon_lwp)



Home | Main Index | Thread Index | Old Index