diff options
author | Bryan Cantrill <bryan@joyent.com> | 2014-02-28 17:18:18 +0000 |
---|---|---|
committer | Robert Mustacchi <rm@joyent.com> | 2014-07-16 10:36:03 -0700 |
commit | 5cd496e3c5514951ae23bdd897cb29b202e2ff62 (patch) | |
tree | 1b0e62f21e6f526672c4ce23bca78428164110a1 /usr/src | |
parent | 9bb41d3cc34999b217b8f098b47a445972d4cea3 (diff) | |
download | illumos-joyent-5cd496e3c5514951ae23bdd897cb29b202e2ff62.tar.gz |
4994 nlm_register_lock_locally() fails to unlock held locks
Reviewed by: Gordon Ross <gordon.ross@nexenta.com>
Reviewed by: Dan McDonald <danmcd@omniti.com>
Reviewed by: Marcel Telka <marcel@telka.sk>
Approved by: Richard Lowe <richlowe@richlowe.net>
Diffstat (limited to 'usr/src')
-rw-r--r-- | usr/src/uts/common/klm/klmops.c | 4 | ||||
-rw-r--r-- | usr/src/uts/common/klm/nlm_client.c | 18 |
2 files changed, 19 insertions, 3 deletions
diff --git a/usr/src/uts/common/klm/klmops.c b/usr/src/uts/common/klm/klmops.c index a8adbe76c1..2036ead94d 100644 --- a/usr/src/uts/common/klm/klmops.c +++ b/usr/src/uts/common/klm/klmops.c @@ -123,9 +123,7 @@ lm4_shrlock(struct vnode *vp, int cmd, } /* - * Helper for lm_frlock, lm4_frlock, nfs_lockrelease - * After getting a lock from a remote lock manager, - * register the lock locally. + * Helper for nfs_lockrelease. */ void lm_register_lock_locally(struct vnode *vp, struct lm_sysid *ls, diff --git a/usr/src/uts/common/klm/nlm_client.c b/usr/src/uts/common/klm/nlm_client.c index ca513afb15..8ae6b3682f 100644 --- a/usr/src/uts/common/klm/nlm_client.c +++ b/usr/src/uts/common/klm/nlm_client.c @@ -28,6 +28,7 @@ /* * Copyright 2011 Nexenta Systems, Inc. All rights reserved. * Copyright (c) 2012 by Delphix. All rights reserved. + * Copyright (c) 2014, Joyent, Inc. All rights reserved. */ /* @@ -619,6 +620,23 @@ nlm_register_lock_locally(struct vnode *vp, struct nlm_host *hostp, { int sysid = 0; + if (hostp == NULL) { + mntinfo_t *mi; + servinfo_t *sv; + const char *netid; + struct nlm_globals *g; + + mi = VTOMI(vp); + sv = mi->mi_curr_serv; + netid = nlm_knc_to_netid(sv->sv_knconf); + + if (netid != NULL) { + g = zone_getspecific(nlm_zone_key, curzone); + hostp = nlm_host_findcreate(g, sv->sv_hostname, + netid, &sv->sv_addr); + } + } + if (hostp != NULL) { sysid = hostp->nh_sysid | LM_SYSID_CLIENT; } |