fs_subr.c revision 31ceb98b622e1a310256f4c4a1472beb92046db3
0dc2366f7b9f9f36e10909b1e95edbf2a261c2acVenugopal Iyer * CDDL HEADER START
c533a883a71cff9ff32df1c53c31201e1cbf371fhx * The contents of this file are subject to the terms of the
c533a883a71cff9ff32df1c53c31201e1cbf371fhx * Common Development and Distribution License (the "License").
c533a883a71cff9ff32df1c53c31201e1cbf371fhx * You may not use this file except in compliance with the License.
c533a883a71cff9ff32df1c53c31201e1cbf371fhx * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
c533a883a71cff9ff32df1c53c31201e1cbf371fhx * See the License for the specific language governing permissions
c533a883a71cff9ff32df1c53c31201e1cbf371fhx * and limitations under the License.
c533a883a71cff9ff32df1c53c31201e1cbf371fhx * When distributing Covered Code, include this CDDL HEADER in each
c533a883a71cff9ff32df1c53c31201e1cbf371fhx * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
c533a883a71cff9ff32df1c53c31201e1cbf371fhx * If applicable, add the following below this CDDL HEADER, with the
c533a883a71cff9ff32df1c53c31201e1cbf371fhx * fields enclosed by brackets "[]" replaced with your own identifying
c533a883a71cff9ff32df1c53c31201e1cbf371fhx * information: Portions Copyright [yyyy] [name of copyright owner]
c533a883a71cff9ff32df1c53c31201e1cbf371fhx * CDDL HEADER END
c533a883a71cff9ff32df1c53c31201e1cbf371fhx/* Copyright (c) 1984, 1986, 1987, 1988, 1989 AT&T */
c533a883a71cff9ff32df1c53c31201e1cbf371fhx/* All Rights Reserved */
c533a883a71cff9ff32df1c53c31201e1cbf371fhx * Copyright 2007 Sun Microsystems, Inc. All rights reserved.
c533a883a71cff9ff32df1c53c31201e1cbf371fhx * Use is subject to license terms.
c533a883a71cff9ff32df1c53c31201e1cbf371fhx#pragma ident "%Z%%M% %I% %E% SMI"
c533a883a71cff9ff32df1c53c31201e1cbf371fhx * Generic vnode operations.
cdc64593cc1046229f4ac4daf5ead688b5efe6ebxinghua wen - Sun Microsystems - Beijing China#include <acl/acl_common.h>
c533a883a71cff9ff32df1c53c31201e1cbf371fhxstatic callb_cpr_t *frlock_serialize_blocked(flk_cb_when_t, void *);
c533a883a71cff9ff32df1c53c31201e1cbf371fhx * Tunable to limit the number of retry to recover from STALE error.
c533a883a71cff9ff32df1c53c31201e1cbf371fhx * The associated operation is not supported by the file system.
c533a883a71cff9ff32df1c53c31201e1cbf371fhx * The associated operation is invalid (on this vnode).
c533a883a71cff9ff32df1c53c31201e1cbf371fhx * The associated operation is valid only for directories.
c533a883a71cff9ff32df1c53c31201e1cbf371fhx * Free the file system specific resources. For the file systems that
c533a883a71cff9ff32df1c53c31201e1cbf371fhx * do not support the forced unmount, it will be a nop function.
c533a883a71cff9ff32df1c53c31201e1cbf371fhx/*ARGSUSED*/
c533a883a71cff9ff32df1c53c31201e1cbf371fhx/* ARGSUSED */
c533a883a71cff9ff32df1c53c31201e1cbf371fhx/* ARGSUSED */
c533a883a71cff9ff32df1c53c31201e1cbf371fhx/* ARGSUSED */
c533a883a71cff9ff32df1c53c31201e1cbf371fhx register short events,
c533a883a71cff9ff32df1c53c31201e1cbf371fhx register short *reventsp,
c533a883a71cff9ff32df1c53c31201e1cbf371fhx * The file system has nothing to sync to disk. However, the
c533a883a71cff9ff32df1c53c31201e1cbf371fhx * VFS_SYNC operation must not fail.
c533a883a71cff9ff32df1c53c31201e1cbf371fhx/* ARGSUSED */
c533a883a71cff9ff32df1c53c31201e1cbf371fhx return (0);
c533a883a71cff9ff32df1c53c31201e1cbf371fhx/* ARGSUSED */
c533a883a71cff9ff32df1c53c31201e1cbf371fhxfs_rwlock(vnode_t *vp, int write_lock, caller_context_t *ctp)
c533a883a71cff9ff32df1c53c31201e1cbf371fhx return (-1);
c533a883a71cff9ff32df1c53c31201e1cbf371fhx/* ARGSUSED */
c533a883a71cff9ff32df1c53c31201e1cbf371fhxfs_rwunlock(vnode_t *vp, int write_lock, caller_context_t *ctp)
c533a883a71cff9ff32df1c53c31201e1cbf371fhx * Compare two vnodes.
c533a883a71cff9ff32df1c53c31201e1cbf371fhx * No-op seek operation.
c533a883a71cff9ff32df1c53c31201e1cbf371fhx/* ARGSUSED */
c533a883a71cff9ff32df1c53c31201e1cbf371fhx return ((*noffp < 0 || *noffp > MAXOFFSET_T) ? EINVAL : 0);
c533a883a71cff9ff32df1c53c31201e1cbf371fhx * File and record locking.
c533a883a71cff9ff32df1c53c31201e1cbf371fhx/* ARGSUSED */
c533a883a71cff9ff32df1c53c31201e1cbf371fhxfs_frlock(register vnode_t *vp, int cmd, struct flock64 *bfp, int flag,
c533a883a71cff9ff32df1c53c31201e1cbf371fhx switch (cmd) {
b510adae7e8895b2bf58eda3537fd56df35302e4fei feng - Sun Microsystems - Beijing China case F_SETLK_NBMAND:
b510adae7e8895b2bf58eda3537fd56df35302e4fei feng - Sun Microsystems - Beijing China * Are NBMAND locks allowed on this file?
b510adae7e8895b2bf58eda3537fd56df35302e4fei feng - Sun Microsystems - Beijing China if (!vp->v_vfsp ||
b510adae7e8895b2bf58eda3537fd56df35302e4fei feng - Sun Microsystems - Beijing China !(vp->v_vfsp->vfs_flag & VFS_NBMAND)) {
c533a883a71cff9ff32df1c53c31201e1cbf371fhx /*FALLTHROUGH*/
c533a883a71cff9ff32df1c53c31201e1cbf371fhx * Check whether there is an NBMAND share reservation that
c533a883a71cff9ff32df1c53c31201e1cbf371fhx * conflicts with the lock request.
c533a883a71cff9ff32df1c53c31201e1cbf371fhx /* would check here for conflict with mapped region */
c533a883a71cff9ff32df1c53c31201e1cbf371fhx * If there is an NBMAND share reservation that conflicts
c533a883a71cff9ff32df1c53c31201e1cbf371fhx * with the lock request, block until the conflicting share
c533a883a71cff9ff32df1c53c31201e1cbf371fhx * reservation goes away.
cdc64593cc1046229f4ac4daf5ead688b5efe6ebxinghua wen - Sun Microsystems - Beijing China if (nbl_need_check(vp)) {
cdc64593cc1046229f4ac4daf5ead688b5efe6ebxinghua wen - Sun Microsystems - Beijing China bfp->l_pid = ttoproc(curthread)->p_pid;
cdc64593cc1046229f4ac4daf5ead688b5efe6ebxinghua wen - Sun Microsystems - Beijing China bfp->l_sysid = 0;
cdc64593cc1046229f4ac4daf5ead688b5efe6ebxinghua wen - Sun Microsystems - Beijing China frcmd = SETFLCK|SLPFLCK;
cdc64593cc1046229f4ac4daf5ead688b5efe6ebxinghua wen - Sun Microsystems - Beijing China case F_HASREMOTELOCKS:
cdc64593cc1046229f4ac4daf5ead688b5efe6ebxinghua wen - Sun Microsystems - Beijing China nlmid = GETNLMID(bfp->l_sysid);
cdc64593cc1046229f4ac4daf5ead688b5efe6ebxinghua wen - Sun Microsystems - Beijing China if (nlmid != 0) { /* booted as a cluster */
cdc64593cc1046229f4ac4daf5ead688b5efe6ebxinghua wen - Sun Microsystems - Beijing China l_has_rmt(bfp) =
cdc64593cc1046229f4ac4daf5ead688b5efe6ebxinghua wen - Sun Microsystems - Beijing China cl_flk_has_remote_locks_for_nlmid(vp, nlmid);
cdc64593cc1046229f4ac4daf5ead688b5efe6ebxinghua wen - Sun Microsystems - Beijing China } else { /* not booted as a cluster */
cdc64593cc1046229f4ac4daf5ead688b5efe6ebxinghua wen - Sun Microsystems - Beijing China l_has_rmt(bfp) = flk_has_remote_locks(vp);
cdc64593cc1046229f4ac4daf5ead688b5efe6ebxinghua wen - Sun Microsystems - Beijing China error = EINVAL;
cdc64593cc1046229f4ac4daf5ead688b5efe6ebxinghua wen - Sun Microsystems - Beijing China * If this is a blocking lock request and we're serializing lock
cdc64593cc1046229f4ac4daf5ead688b5efe6ebxinghua wen - Sun Microsystems - Beijing China * requests, modify the callback list to leave the critical region
cdc64593cc1046229f4ac4daf5ead688b5efe6ebxinghua wen - Sun Microsystems - Beijing China * while we're waiting for the lock.
cdc64593cc1046229f4ac4daf5ead688b5efe6ebxinghua wen - Sun Microsystems - Beijing China if (serialize && (frcmd & SLPFLCK) != 0) {
cdc64593cc1046229f4ac4daf5ead688b5efe6ebxinghua wen - Sun Microsystems - Beijing China flk_add_callback(&serialize_callback,
cdc64593cc1046229f4ac4daf5ead688b5efe6ebxinghua wen - Sun Microsystems - Beijing China frlock_serialize_blocked, vp, flk_cbp);
cdc64593cc1046229f4ac4daf5ead688b5efe6ebxinghua wen - Sun Microsystems - Beijing China flk_cbp = &serialize_callback;
d2a61391af480de12cf4264080d7254a6de96e2apengcheng chen - Sun Microsystems - Beijing China error = reclock(vp, bfp, frcmd, flag, offset, flk_cbp);
c533a883a71cff9ff32df1c53c31201e1cbf371fhx * Callback when a lock request blocks and we are serializing requests. If
cdc64593cc1046229f4ac4daf5ead688b5efe6ebxinghua wen - Sun Microsystems - Beijing China * before sleeping, leave the critical region. If after wakeup, reenter
c533a883a71cff9ff32df1c53c31201e1cbf371fhx * the critical region.
0dc2366f7b9f9f36e10909b1e95edbf2a261c2acVenugopal Iyerfrlock_serialize_blocked(flk_cb_when_t when, void *infop)
19d332fefbc61327bb6187d0eb818629f3b52c6ffei feng - Sun Microsystems - Beijing China nbl_start_crit(vp, RW_WRITER);
c533a883a71cff9ff32df1c53c31201e1cbf371fhx * Allow any flags.
c533a883a71cff9ff32df1c53c31201e1cbf371fhx/* ARGSUSED */
c533a883a71cff9ff32df1c53c31201e1cbf371fhx return (0);
c533a883a71cff9ff32df1c53c31201e1cbf371fhx * Return the answer requested to poll() for non-device files.
c533a883a71cff9ff32df1c53c31201e1cbf371fhx * Only POLLIN, POLLRDNORM, and POLLOUT are recognized.
c533a883a71cff9ff32df1c53c31201e1cbf371fhx/* ARGSUSED */
c533a883a71cff9ff32df1c53c31201e1cbf371fhx register short events,
c533a883a71cff9ff32df1c53c31201e1cbf371fhx register short *reventsp,
d2a61391af480de12cf4264080d7254a6de96e2apengcheng chen - Sun Microsystems - Beijing China struct pollhead **phpp)
c533a883a71cff9ff32df1c53c31201e1cbf371fhx *phpp = !anyyet && !*reventsp ? &fs_pollhd : (struct pollhead *)NULL;
c533a883a71cff9ff32df1c53c31201e1cbf371fhx return (0);
c533a883a71cff9ff32df1c53c31201e1cbf371fhx * POSIX pathconf() support.
c533a883a71cff9ff32df1c53c31201e1cbf371fhx/* ARGSUSED */
c533a883a71cff9ff32df1c53c31201e1cbf371fhxfs_pathconf(vnode_t *vp, int cmd, ulong_t *valp, cred_t *cr)
c533a883a71cff9ff32df1c53c31201e1cbf371fhx register int error = 0;
c533a883a71cff9ff32df1c53c31201e1cbf371fhx switch (cmd) {
bcb5c89da22515e2ccf139578bad3caebcd716adSowmini Varadhan val = rstchown; /* chown restricted enabled */
c533a883a71cff9ff32df1c53c31201e1cbf371fhx * If ever we come here it means that underlying file system
c533a883a71cff9ff32df1c53c31201e1cbf371fhx * does not recognise the command and therefore this
c533a883a71cff9ff32df1c53c31201e1cbf371fhx * configurable limit cannot be determined. We return -1
c533a883a71cff9ff32df1c53c31201e1cbf371fhx * and don't change errno.
cdc64593cc1046229f4ac4daf5ead688b5efe6ebxinghua wen - Sun Microsystems - Beijing China * Dispose of a page.
cdc64593cc1046229f4ac4daf5ead688b5efe6ebxinghua wen - Sun Microsystems - Beijing China/* ARGSUSED */
d62cb7fff63265824a8e6725a3bcef698f6134c9hxfs_dispose(struct vnode *vp, page_t *pp, int fl, int dn, struct cred *cr)
09539a3c2da6fef054f5306232ef0480de261eabpengcheng chen - Sun Microsystems - Beijing China page_destroy(pp, dn);
09539a3c2da6fef054f5306232ef0480de261eabpengcheng chen - Sun Microsystems - Beijing China/* ARGSUSED */
d40f4da491abdcae192eb797766f5f44772a832fpengcheng chen - Sun Microsystems - Beijing Chinafs_nodispose(struct vnode *vp, page_t *pp, int fl, int dn, struct cred *cr)
d62cb7fff63265824a8e6725a3bcef698f6134c9hx * fabricate acls for file systems that do not support acls.
d62cb7fff63265824a8e6725a3bcef698f6134c9hx/* ARGSUSED */
c533a883a71cff9ff32df1c53c31201e1cbf371fhx vsecattr->vsa_dfaclcnt = 0; /* Default ACLs are not fabricated */
c533a883a71cff9ff32df1c53c31201e1cbf371fhx vsecattr->vsa_aclcnt = 4; /* USER, GROUP, OTHER, and CLASS */
c533a883a71cff9ff32df1c53c31201e1cbf371fhx vsecattr->vsa_aclentp = kmem_zalloc(4 * sizeof (aclent_t),
c533a883a71cff9ff32df1c53c31201e1cbf371fhx aclentp->a_perm = ((ushort_t)(vattr.va_mode & 0700)) >> 6;
c533a883a71cff9ff32df1c53c31201e1cbf371fhx aclentp->a_perm = ((ushort_t)(vattr.va_mode & 0070)) >> 3;
cdc64593cc1046229f4ac4daf5ead688b5efe6ebxinghua wen - Sun Microsystems - Beijing China aclentp->a_id = (gid_t)-1; /* Really undefined */
cdc64593cc1046229f4ac4daf5ead688b5efe6ebxinghua wen - Sun Microsystems - Beijing China } else if (vsecattr->vsa_mask & (VSA_ACECNT | VSA_ACE)) {
cdc64593cc1046229f4ac4daf5ead688b5efe6ebxinghua wen - Sun Microsystems - Beijing China vsecattr->vsa_aclcnt = 6;
cdc64593cc1046229f4ac4daf5ead688b5efe6ebxinghua wen - Sun Microsystems - Beijing China vsecattr->vsa_aclentp = kmem_zalloc(6 * sizeof (ace_t),
cdc64593cc1046229f4ac4daf5ead688b5efe6ebxinghua wen - Sun Microsystems - Beijing China acep = vsecattr->vsa_aclentp;
cdc64593cc1046229f4ac4daf5ead688b5efe6ebxinghua wen - Sun Microsystems - Beijing China (void) memcpy(acep, trivial_acl, sizeof (ace_t) * 6);
cdc64593cc1046229f4ac4daf5ead688b5efe6ebxinghua wen - Sun Microsystems - Beijing China adjust_ace_pair(acep, (vattr.va_mode & 0700) >> 6);
cdc64593cc1046229f4ac4daf5ead688b5efe6ebxinghua wen - Sun Microsystems - Beijing China adjust_ace_pair(acep + 2, (vattr.va_mode & 0070) >> 3);
cdc64593cc1046229f4ac4daf5ead688b5efe6ebxinghua wen - Sun Microsystems - Beijing China adjust_ace_pair(acep + 4, vattr.va_mode & 0007);
cdc64593cc1046229f4ac4daf5ead688b5efe6ebxinghua wen - Sun Microsystems - Beijing China * Common code for implementing DOS share reservations
cdc64593cc1046229f4ac4daf5ead688b5efe6ebxinghua wen - Sun Microsystems - Beijing China/* ARGSUSED4 */
cdc64593cc1046229f4ac4daf5ead688b5efe6ebxinghua wen - Sun Microsystems - Beijing Chinafs_shrlock(struct vnode *vp, int cmd, struct shrlock *shr, int flag, cred_t *cr)
c533a883a71cff9ff32df1c53c31201e1cbf371fhx * Make sure that the file was opened with permissions appropriate
cdc64593cc1046229f4ac4daf5ead688b5efe6ebxinghua wen - Sun Microsystems - Beijing China * for the request, and make sure the caller isn't trying to sneak
cdc64593cc1046229f4ac4daf5ead688b5efe6ebxinghua wen - Sun Microsystems - Beijing China * in an NBMAND request.
cdc64593cc1046229f4ac4daf5ead688b5efe6ebxinghua wen - Sun Microsystems - Beijing China if (((shr->s_access & F_RDACC) && (flag & FREAD) == 0) ||
cdc64593cc1046229f4ac4daf5ead688b5efe6ebxinghua wen - Sun Microsystems - Beijing China ((shr->s_access & F_WRACC) && (flag & FWRITE) == 0))
cdc64593cc1046229f4ac4daf5ead688b5efe6ebxinghua wen - Sun Microsystems - Beijing China return (EBADF);
cdc64593cc1046229f4ac4daf5ead688b5efe6ebxinghua wen - Sun Microsystems - Beijing China if (shr->s_deny & F_MANDDNY)
cdc64593cc1046229f4ac4daf5ead688b5efe6ebxinghua wen - Sun Microsystems - Beijing China return (EINVAL);
cdc64593cc1046229f4ac4daf5ead688b5efe6ebxinghua wen - Sun Microsystems - Beijing China if (cmd == F_SHARE_NBMAND) {
19d332fefbc61327bb6187d0eb818629f3b52c6ffei feng - Sun Microsystems - Beijing China /* must have write permission to deny read access */
19d332fefbc61327bb6187d0eb818629f3b52c6ffei feng - Sun Microsystems - Beijing China if ((shr->s_deny & F_RDDNY) && (flag & FWRITE) == 0)
cdc64593cc1046229f4ac4daf5ead688b5efe6ebxinghua wen - Sun Microsystems - Beijing China return (EBADF);
c533a883a71cff9ff32df1c53c31201e1cbf371fhx /* make sure nbmand is allowed on the file */
c533a883a71cff9ff32df1c53c31201e1cbf371fhx switch (cmd) {
cdc64593cc1046229f4ac4daf5ead688b5efe6ebxinghua wen - Sun Microsystems - Beijing China shr->s_deny |= F_MANDDNY;
cdc64593cc1046229f4ac4daf5ead688b5efe6ebxinghua wen - Sun Microsystems - Beijing China /*FALLTHROUGH*/
cdc64593cc1046229f4ac4daf5ead688b5efe6ebxinghua wen - Sun Microsystems - Beijing China case F_HASREMOTELOCKS:
c533a883a71cff9ff32df1c53c31201e1cbf371fhx * We are overloading this command to refer to remote
c533a883a71cff9ff32df1c53c31201e1cbf371fhx * shares as well as remote locks, despite its name.
cdc64593cc1046229f4ac4daf5ead688b5efe6ebxinghua wen - Sun Microsystems - Beijing China error = EINVAL;
c533a883a71cff9ff32df1c53c31201e1cbf371fhx/*ARGSUSED1*/
c533a883a71cff9ff32df1c53c31201e1cbf371fhxfs_vnevent_nosupport(vnode_t *vp, vnevent_t vnevent, vnode_t *dvp, char *cname)
b510adae7e8895b2bf58eda3537fd56df35302e4fei feng - Sun Microsystems - Beijing China ASSERT(vp != NULL);
c50ced99bb75273dc8c4c36876d2e8f59a64f4b1pengcheng chen - Sun Microsystems - Beijing China return (ENOTSUP);
c533a883a71cff9ff32df1c53c31201e1cbf371fhx/*ARGSUSED1*/
c533a883a71cff9ff32df1c53c31201e1cbf371fhxfs_vnevent_support(vnode_t *vp, vnevent_t vnevent, vnode_t *dvp, char *cname)
c533a883a71cff9ff32df1c53c31201e1cbf371fhx return (0);
c533a883a71cff9ff32df1c53c31201e1cbf371fhx * return 1 for non-trivial ACL.
c533a883a71cff9ff32df1c53c31201e1cbf371fhx * NB: It is not necessary for the caller to VOP_RWLOCK since
c533a883a71cff9ff32df1c53c31201e1cbf371fhx * we only issue VOP_GETSECATTR.
c533a883a71cff9ff32df1c53c31201e1cbf371fhx * Returns 0 == trivial
c533a883a71cff9ff32df1c53c31201e1cbf371fhx * 1 == NOT Trivial
c533a883a71cff9ff32df1c53c31201e1cbf371fhx * <0 could not determine.
c533a883a71cff9ff32df1c53c31201e1cbf371fhx /* determine the forms of ACLs maintained */
c533a883a71cff9ff32df1c53c31201e1cbf371fhx error = VOP_PATHCONF(vp, _PC_ACL_ENABLED, &acl_styles, cr);
c533a883a71cff9ff32df1c53c31201e1cbf371fhx /* clear bits we don't understand and establish default acl_style */
19d332fefbc61327bb6187d0eb818629f3b52c6ffei feng - Sun Microsystems - Beijing China vsecattr.vsa_dfaclcnt = 0;
19d332fefbc61327bb6187d0eb818629f3b52c6ffei feng - Sun Microsystems - Beijing China while (acl_styles) {
19d332fefbc61327bb6187d0eb818629f3b52c6ffei feng - Sun Microsystems - Beijing China /* select one of the styles as current flavor */
cdc64593cc1046229f4ac4daf5ead688b5efe6ebxinghua wen - Sun Microsystems - Beijing China acl_flavor = 0;
c50ced99bb75273dc8c4c36876d2e8f59a64f4b1pengcheng chen - Sun Microsystems - Beijing China acl_flavor = _ACL_ACE_ENABLED;
c50ced99bb75273dc8c4c36876d2e8f59a64f4b1pengcheng chen - Sun Microsystems - Beijing China vsecattr.vsa_mask = VSA_ACECNT | VSA_ACE;
c50ced99bb75273dc8c4c36876d2e8f59a64f4b1pengcheng chen - Sun Microsystems - Beijing China if (error == 0)
19d332fefbc61327bb6187d0eb818629f3b52c6ffei feng - Sun Microsystems - Beijing China /* that flavor failed */
cdc64593cc1046229f4ac4daf5ead688b5efe6ebxinghua wen - Sun Microsystems - Beijing China acl_styles &= ~acl_flavor;
c533a883a71cff9ff32df1c53c31201e1cbf371fhx /* if all styles fail then assume trivial */
c533a883a71cff9ff32df1c53c31201e1cbf371fhx return (0);
c533a883a71cff9ff32df1c53c31201e1cbf371fhx /* process the flavor that worked */
c533a883a71cff9ff32df1c53c31201e1cbf371fhx if (vsecattr.vsa_dfaclcnt && vsecattr.vsa_dfaclentp != NULL)
f3c4902c7f91725a7b538a3d82f1993bff02944fpengcheng chen - Sun Microsystems - Beijing China if (acl_flavor & _ACL_ACE_ENABLED) {
19d332fefbc61327bb6187d0eb818629f3b52c6ffei feng - Sun Microsystems - Beijing China isnontrivial = ace_trivial(vsecattr.vsa_aclentp,
c533a883a71cff9ff32df1c53c31201e1cbf371fhx /* ACE has no vsecattr.vsa_dfaclcnt */
cdc64593cc1046229f4ac4daf5ead688b5efe6ebxinghua wen - Sun Microsystems - Beijing China * Check whether we need a retry to recover from STALE error.
c533a883a71cff9ff32df1c53c31201e1cbf371fhx return (1);