Beispiel #1
0
void
lockIdSet(struct AFS_FLOCK *flock, struct SimpleLocks *slp, int clid)
{
    if (slp) {
	slp->pid = get_user_struct()->u_procp->p_pid;
    } else {
	flock->l_pid = get_user_struct()->u_procp->p_pid;
    }
}
Beispiel #2
0
static int
lockIdcmp2(struct AFS_FLOCK *flock1, struct vcache *vp,
	   struct SimpleLocks *alp, int onlymine, int clid)
{
    struct SimpleLocks *slp;
#if	defined(AFS_SUN5_ENV)
    proc_t *procp = ttoproc(curthread);
#else
#if !defined(AFS_AIX41_ENV) && !defined(AFS_LINUX20_ENV) && !defined(AFS_SGI65_ENV) && !defined(AFS_DARWIN_ENV) && !defined(AFS_XBSD_ENV)
#ifdef AFS_SGI64_ENV
    afs_proc_t *procp = curprocp;
#elif defined(UKERNEL)
    afs_proc_t *procp = get_user_struct()->u_procp;
#else
    afs_proc_t *procp = u.u_procp;
#endif /* AFS_SGI64_ENV */
#endif
#endif

    if (alp) {
#if	defined(AFS_AIX_ENV) || defined(AFS_SUN5_ENV) || defined(AFS_SGI_ENV)
	if (flock1->l_sysid != alp->sysid) {
	    return 1;
	}
#endif
	if ((flock1->l_pid == alp->pid) ||
#if defined(AFS_AIX41_ENV) || defined(AFS_LINUX20_ENV) || defined(AFS_HPUX_ENV)
	    (!onlymine && (flock1->l_pid == getppid()))
#else
#if defined(AFS_SGI65_ENV) || defined(AFS_DARWIN_ENV) || defined(AFS_XBSD_ENV)
	    /* XXX check this. used to be *only* irix for some reason. */
	    (!onlymine && (flock1->l_pid == clid))
#else
	    (!onlymine && (flock1->l_pid == procp->p_ppid))
#endif
#endif
	    ) {
	    return 0;
	}
	return 1;
    }

    for (slp = vp->slocks; slp; slp = slp->next) {
#if defined(AFS_HAVE_FLOCK_SYSID)
	if (flock1->l_sysid != slp->sysid) {
	    continue;
	}
#endif
	if (flock1->l_pid == slp->pid) {
	    return 0;
	}
    }
    return (1);			/* failure */
}
Beispiel #3
0
int
afs_root(OSI_VFS_DECL(afsp), struct vnode **avpp)
{
    afs_int32 code = 0;
    struct vrequest treq;
    struct vcache *tvp = 0;
    OSI_VFS_CONVERT(afsp);

    AFS_STATCNT(afs_root);
    if (afs_globalVp && (afs_globalVp->f.states & CStatd)) {
	tvp = afs_globalVp;
    } else {
	if (afs_globalVp) {
	    afs_PutVCache(afs_globalVp);
	    afs_globalVp = NULL;
	}

	if (!(code = afs_InitReq(&treq, get_user_struct()->u_cred))
	    && !(code = afs_CheckInit())) {
	    tvp = afs_GetVCache(&afs_rootFid, &treq, NULL, NULL);
	    /* we really want this to stay around */
	    if (tvp) {
		afs_globalVp = tvp;
	    } else
		code = ENOENT;
	}
    }
    if (tvp) {
	VN_HOLD(AFSTOV(tvp));

	AFSTOV(tvp)->v_flag |= VROOT;	/* No-op on Ultrix 2.2 */
	afs_globalVFS = afsp;
	*avpp = AFSTOV(tvp);
    }

    afs_Trace3(afs_iclSetp, CM_TRACE_GOPEN, ICL_TYPE_POINTER, *avpp,
	       ICL_TYPE_INT32, 0, ICL_TYPE_INT32, code);
    return code;
}