Mercurial > illumos > illumos-gate
changeset 12631:7312bbaa193c
6906432 File system space on globalfilesystem shared by NFS not returned after rm(1) of files on NFS clients
6952856 Minor inconsistencies in rfs4_dss_clear_oldstate()
6954235 ASSERT() in the rfs4_state_has_access() have no effect
author | Marcel Telka <Marcel.Telka@Sun.COM> |
---|---|
date | Wed, 16 Jun 2010 16:07:57 +0200 |
parents | e9b26c370c79 |
children | 2e5ce9dbe1f9 |
files | usr/src/uts/common/fs/nfs/nfs4_state.c |
diffstat | 1 files changed, 10 insertions(+), 12 deletions(-) [+] |
line wrap: on
line diff
--- a/usr/src/uts/common/fs/nfs/nfs4_state.c Wed Jun 16 10:53:17 2010 +0100 +++ b/usr/src/uts/common/fs/nfs/nfs4_state.c Wed Jun 16 16:07:57 2010 +0200 @@ -19,8 +19,7 @@ * CDDL HEADER END */ /* - * Copyright 2009 Sun Microsystems, Inc. All rights reserved. - * Use is subject to license terms. + * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved. */ #include <sys/systm.h> @@ -741,8 +740,10 @@ rw_enter(&sip->oldstate_lock, RW_WRITER); os_head = sip->oldstate; - if (os_head == NULL) + if (os_head == NULL) { + rw_exit(&sip->oldstate_lock); return; + } /* skip dummy entry */ osp = os_head->next; @@ -754,8 +755,7 @@ if (osp->cl_id4.id_val) kmem_free(osp->cl_id4.id_val, osp->cl_id4.id_len); - if (osp->ss_pn) - kmem_free(osp->ss_pn, sizeof (rfs4_ss_pn_t)); + rfs4_ss_pnfree(osp->ss_pn); os_next = osp->next; remque(osp); @@ -763,11 +763,6 @@ osp = os_next; } - /* free dummy entry */ - kmem_free(osp, sizeof (rfs4_oldstate_t)); - - sip->oldstate = NULL; - rw_exit(&sip->oldstate_lock); } @@ -2910,6 +2905,9 @@ if (rfs4_dbe_is_invalid(dsp->rds_dbe)) return (TRUE); + if (dsp->rds_dtype == OPEN_DELEGATE_NONE) + return (TRUE); + if ((gethrestime_sec() - dsp->rds_client->rc_last_access > rfs4_lease_time)) { rfs4_dbe_invalidate(dsp->rds_dbe); @@ -3529,8 +3527,8 @@ */ if (sp->rs_share_deny & OPEN4_SHARE_DENY_READ) deny_read = 1; - ASSERT(fp->rf_deny_read - deny_read >= 0); - if (fp->rf_deny_read - deny_read > 0) + ASSERT(fp->rf_deny_read >= deny_read); + if (fp->rf_deny_read > deny_read) stat = NFS4ERR_OPENMODE; rfs4_dbe_unlock(fp->rf_dbe); rfs4_file_rele(fp);