diff options
| author | Vitaliy Gusev <gusev.vitaliy@gmail.com> | 2021-08-02 02:01:56 +0300 |
|---|---|---|
| committer | Robert Mustacchi <rm@fingolfin.org> | 2022-01-04 23:28:15 +0000 |
| commit | 214d537cc1e7896ae3489ebec3ae766e01f32b2a (patch) | |
| tree | d40b5e2bd08120733745dfe13fcd0640c217f72e /usr/src/uts/common/rpc | |
| parent | 45ede40b2394db7967e59f19288fae9b62efd4aa (diff) | |
| download | illumos-joyent-214d537cc1e7896ae3489ebec3ae766e01f32b2a.tar.gz | |
13990 nfssrv: get rid of one crget for nfsv4
Reviewed by: Dan McDonald <danmcd@joyent.com>
Reviewed by: Evan Layton <elayton@tintri.com>
Reviewed by: Marcel Telka <marcel@telka.sk>
Approved by: Robert Mustacchi <rm@fingolfin.org>
Diffstat (limited to 'usr/src/uts/common/rpc')
| -rw-r--r-- | usr/src/uts/common/rpc/svc.c | 20 | ||||
| -rw-r--r-- | usr/src/uts/common/rpc/svc.h | 3 |
2 files changed, 23 insertions, 0 deletions
diff --git a/usr/src/uts/common/rpc/svc.c b/usr/src/uts/common/rpc/svc.c index 12cd548af3..6acf9bb76d 100644 --- a/usr/src/uts/common/rpc/svc.c +++ b/usr/src/uts/common/rpc/svc.c @@ -23,6 +23,7 @@ * Copyright 2012 Marcel Telka <marcel@telka.sk> * Copyright 2015 Nexenta Systems, Inc. All rights reserved. * Copyright 2018 OmniOS Community Edition (OmniOSce) Association. + * Copyright 2021 Racktop Systems, Inc. */ /* @@ -2868,3 +2869,22 @@ rpc_msg_free(struct rpc_msg **msg, int cb_verf_oa_length) kmem_free(m, sizeof (*m)); m = NULL; } + +/* + * Generally 'cr_ref' should be 1, otherwise reference is kept + * in underlying calls, so reset it. + */ +cred_t * +svc_xprt_cred(SVCXPRT *xprt) +{ + cred_t *cr = xprt->xp_cred; + + ASSERT(cr != NULL); + + if (crgetref(cr) != 1) { + crfree(cr); + cr = crget(); + xprt->xp_cred = cr; + } + return (cr); +} diff --git a/usr/src/uts/common/rpc/svc.h b/usr/src/uts/common/rpc/svc.h index 2ed1ce5e34..28d2f29777 100644 --- a/usr/src/uts/common/rpc/svc.h +++ b/usr/src/uts/common/rpc/svc.h @@ -1158,6 +1158,9 @@ extern SVCXPRT *svc_clone_init(void); extern void svc_clone_free(SVCXPRT *); extern void svc_clone_link(SVCMASTERXPRT *, SVCXPRT *, SVCXPRT *); extern void svc_clone_unlink(SVCXPRT *); + +/* Get cached preallocated cred */ +extern cred_t *svc_xprt_cred(SVCXPRT *); #endif /* _KERNEL */ #ifdef __cplusplus |
