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>
re #12783 rb4338 Flow control is needed in rpcmod when the NFS server is unable to keep up with the network

*** 18,28 **** --- 18,30 ---- * * CDDL HEADER END */ /* * Copyright (c) 1989, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright 2012 Marcel Telka <marcel@telka.sk> * Copyright 2013 Nexenta Systems, Inc. All rights reserved. + * Copyright 2018 OmniOS Community Edition (OmniOSce) Association. */ /* Copyright (c) 1983, 1984, 1985, 1986, 1987, 1988, 1989 AT&T */ /* All Rights Reserved */ /* * Portions of this source code were derived from Berkeley
*** 187,197 **** /* destroy a clone xprt */ void (*xp_start)(SVCMASTERXPRT *); /* `ready-to-receive' */ void (*xp_clone_xprt)(SVCXPRT *, SVCXPRT *); /* transport specific clone function */ ! void (*xp_tattrs) (SVCXPRT *, int, void **); }; #define SVC_TATTR_ADDRMASK 1 #else /* _KERNEL */ --- 189,203 ---- /* destroy a clone xprt */ void (*xp_start)(SVCMASTERXPRT *); /* `ready-to-receive' */ void (*xp_clone_xprt)(SVCXPRT *, SVCXPRT *); /* transport specific clone function */ ! void (*xp_tattrs)(SVCXPRT *, int, void **); ! /* transport specific hold function */ ! void (*xp_hold)(queue_t *); ! /* transport specific release function */ ! void (*xp_release)(queue_t *, mblk_t *, bool_t); }; #define SVC_TATTR_ADDRMASK 1 #else /* _KERNEL */
*** 530,539 **** --- 536,553 ---- #define SVC_CLONE_XPRT(src_xprt, dst_xprt) \ if ((src_xprt)->xp_ops->xp_clone_xprt) \ (*(src_xprt)->xp_ops->xp_clone_xprt) \ (src_xprt, dst_xprt) + #define SVC_HOLD(xprt) \ + if ((xprt)->xp_ops->xp_hold) \ + (*(xprt)->xp_ops->xp_hold)((xprt)->xp_wq) + + #define SVC_RELE(xprt, mp, enable) \ + if ((xprt)->xp_ops->xp_release) \ + (*(xprt)->xp_ops->xp_release)((xprt)->xp_wq, (mp), (enable)) + #define SVC_RECV(clone_xprt, mp, msg) \ (*(clone_xprt)->xp_ops->xp_recv)((clone_xprt), (mp), (msg)) /* * PSARC 2003/523 Contract Private Interface
*** 726,735 **** --- 740,758 ---- extern void xprt_register(); extern void xprt_unregister(); #endif /* __STDC__ */ #endif /* _KERNEL */ + #ifdef _KERNEL + /* + * Transport hold and release. + */ + extern void rpcmod_hold(queue_t *); + extern void rpcmod_release(queue_t *, mblk_t *, bool_t); + extern void mir_svc_hold(queue_t *); + extern void mir_svc_release(queue_t *, mblk_t *, bool_t); + #endif /* _KERNEL */ /* * When the service routine is called, it must first check to see if it * knows about the procedure; if not, it should call svcerr_noproc * and return. If so, it should deserialize its arguments via