Print this page
11909 THREAD_KPRI_RELEASE does nothing of the sort
Reviewed by: Bryan Cantrill <bryan@joyent.com>
Reviewed by: Jerry Jelinek <jerry.jelinek@joyent.com>

@@ -19,10 +19,11 @@
  * CDDL HEADER END
  */
 /*
  * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
  * Use is subject to license terms.
+ * Copyright 2019 Joyent, Inc.
  */
 
 /* Copyright (c) 1983, 1984, 1985, 1986, 1987, 1988, 1989 AT&T */
 /* All Rights Reserved */
 

@@ -219,44 +220,26 @@
 
 /*
  * Wait for all of the direct IO operations to finish
  */
 
-uint32_t        ufs_directio_drop_kpri = 0;     /* enable kpri hack */
-
 static int
 directio_wait(struct directio_buf *tail, long *bytes_iop)
 {
         int     error = 0, newerror;
         struct directio_buf     *dbp;
-        uint_t  kpri_req_save;
 
         /*
          * The linked list of directio buf structures is maintained
          * in reverse order (tail->last request->penultimate request->...)
          */
-        /*
-         * This is the k_pri_req hack. Large numbers of threads
-         * sleeping with kernel priority will cause scheduler thrashing
-         * on an MP machine. This can be seen running Oracle using
-         * directio to ufs files. Sleep at normal priority here to
-         * more closely mimic physio to a device partition. This
-         * workaround is disabled by default as a niced thread could
-         * be starved from running while holding i_rwlock and i_contents.
-         */
-        if (ufs_directio_drop_kpri) {
-                kpri_req_save = curthread->t_kpri_req;
-                curthread->t_kpri_req = 0;
-        }
         while ((dbp = tail) != NULL) {
                 tail = dbp->next;
                 newerror = directio_wait_one(dbp, bytes_iop);
                 if (error == 0)
                         error = newerror;
         }
-        if (ufs_directio_drop_kpri)
-                curthread->t_kpri_req = kpri_req_save;
         return (error);
 }
 /*
  * Initiate direct IO request
  */