Print this page
3354 kernel crash in rpcsec_gss after using gsscred
Reviewed by: Toomas Soome <tsoome@me.com>
Reviewed by: Carlos Neira <cneirabustos@gmail.com>
Approved by: Robert Mustacchi <rm@joyent.com>
NEX-14051 Be careful with RPC groups
Reviewed by: Rick McNeal <rick.mcneal@nexenta.com>
Reviewed by: Evan Layton <evan.layton@nexenta.com>
8085 Handle RPC groups better
Reviewed by: "Joshua M. Clulow" <josh@sysmgr.org>
Reviewed by: Paul Dagnelie <pcd@delphix.com>
Reviewed by: Jerry Jelinek <jerry.jelinek@joyent.com>
Approved by: Dan McDonald <danmcd@omniti.com>
NEX-2320 svc_queueclose() could wake up too much threads
Reviewed by: Rick Mesta <rick.mesta@nexenta.com>
Reviewed by: Gordon Ross <gordon.ross@nexenta.com>
Reviewed by: Dan Fields <dan.fields@nexenta.com>
Reviewed by: Josef Sipek <josef.sipek@nexenta.com>
Reviewed by: Tony Nguyen <tony.nguyen@nexenta.com>
re #12783 rb4338 Flow control is needed in rpcmod when the NFS server is unable to keep up with the network
re #13613 rb4516 Tunables needs volatile keyword
re #12714 rb4347 Corruption of the `xprt-ready' queue in svc_xprt_qdelete()
@@ -18,11 +18,13 @@
*
* CDDL HEADER END
*/
/*
+ * Copyright 2012 Marcel Telka <marcel@telka.sk>
* Copyright 2015 Nexenta Systems, Inc. All rights reserved.
+ * Copyright 2018 OmniOS Community Edition (OmniOSce) Association.
*/
/*
* Copyright 2010 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
@@ -217,11 +219,11 @@
/*
* Default stack size for service threads.
*/
#define DEFAULT_SVC_RUN_STKSIZE (0) /* default kernel stack */
-int svc_default_stksize = DEFAULT_SVC_RUN_STKSIZE;
+volatile int svc_default_stksize = DEFAULT_SVC_RUN_STKSIZE;
/*
* Default polling timeout for service threads.
* Multiplied by hz when used.
*/
@@ -246,11 +248,11 @@
/*
* Maximum number of requests from the same transport (in `drain' mode).
*/
#define DEFAULT_SVC_MAX_SAME_XPRT (8)
-int svc_default_max_same_xprt = DEFAULT_SVC_MAX_SAME_XPRT;
+volatile int svc_default_max_same_xprt = DEFAULT_SVC_MAX_SAME_XPRT;
/*
* Default `Redline' of non-detached threads.
* Total number of detached and reserved threads in an RPC server
@@ -294,31 +296,10 @@
*/
static caddr_t rqcred_head;
static kmutex_t rqcred_lock;
/*
- * Pointers to transport specific `rele' routines in rpcmod (set from rpcmod).
- */
-void (*rpc_rele)(queue_t *, mblk_t *, bool_t) = NULL;
-void (*mir_rele)(queue_t *, mblk_t *, bool_t) = NULL;
-
-/* ARGSUSED */
-void
-rpc_rdma_rele(queue_t *q, mblk_t *mp, bool_t enable)
-{
-}
-void (*rdma_rele)(queue_t *, mblk_t *, bool_t) = rpc_rdma_rele;
-
-
-/*
- * This macro picks which `rele' routine to use, based on the transport type.
- */
-#define RELE_PROC(xprt) \
- ((xprt)->xp_type == T_RDMA ? rdma_rele : \
- (((xprt)->xp_type == T_CLTS) ? rpc_rele : mir_rele))
-
-/*
* If true, then keep quiet about version mismatch.
* This macro is for broadcast RPC only. We have no broadcast RPC in
* kernel now but one may define a flag in the transport structure
* and redefine this macro.
*/
@@ -2385,11 +2366,11 @@
mutex_enter(&xprt->xp_req_lock);
enable = xprt->xp_enable;
if (enable)
xprt->xp_enable = FALSE;
mutex_exit(&xprt->xp_req_lock);
- (*RELE_PROC(xprt)) (clone_xprt->xp_wq, NULL, enable);
+ SVC_RELE(clone_xprt, NULL, enable);
}
/* NOTREACHED */
}
/*
@@ -2410,11 +2391,11 @@
pool = xprt->xp_pool;
while ((mp = xprt->xp_req_head) != NULL) {
/* remove the request from the list */
xprt->xp_req_head = mp->b_next;
mp->b_next = (mblk_t *)0;
- (*RELE_PROC(xprt)) (xprt->xp_wq, mp, FALSE);
+ SVC_RELE(xprt, mp, FALSE);
}
mutex_enter(&pool->p_req_lock);
pool->p_reqs -= xprt->xp_reqs;
pool->p_size -= xprt->xp_size;
@@ -2727,11 +2708,11 @@
mutex_enter(&xprt->xp_req_lock);
enable = xprt->xp_enable;
if (enable)
xprt->xp_enable = FALSE;
mutex_exit(&xprt->xp_req_lock);
- (*RELE_PROC(xprt)) (clone_xprt->xp_wq, NULL, enable);
+ SVC_RELE(clone_xprt, NULL, enable);
/* Mark the clone (thread) as detached */
clone_xprt->xp_reserved = FALSE;
clone_xprt->xp_detached = TRUE;