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