Lines Matching refs:rp

2104 	rnode_t *rp;
2119 rp = VTOR(dvp);
2120 mutex_enter(&rp->r_statelock);
2125 mutex_exit(&rp->r_statelock);
2174 rinactive(rnode_t *rp, cred_t *cr)
2190 mutex_enter(&rp->r_statelock);
2191 while (rp->r_count > 0)
2192 cv_wait(&rp->r_cv, &rp->r_statelock);
2193 mutex_exit(&rp->r_statelock);
2198 vp = RTOV(rp);
2201 if ((rp->r_flags & RDIRTY) && !rp->r_error) {
2204 mutex_enter(&rp->r_statelock);
2205 if (!rp->r_error)
2206 rp->r_error = error;
2207 mutex_exit(&rp->r_statelock);
2217 mutex_enter(&rp->r_statelock);
2218 cred = rp->r_cred;
2219 rp->r_cred = NULL;
2220 contents = rp->r_symlink.contents;
2221 size = rp->r_symlink.size;
2222 rp->r_symlink.contents = NULL;
2223 vsp = rp->r_secattr;
2224 rp->r_secattr = NULL;
2225 info = rp->r_pathconf;
2226 rp->r_pathconf = NULL;
2227 mutex_exit(&rp->r_statelock);
2238 (void) nfs_access_purge_rp(rp);
2243 if (HAVE_RDDIR_CACHE(rp))
2364 rnode_t *rp = VTOR(vp);
2369 mutex_enter(&rp->r_statelock);
2370 if (rp->r_mtime <= t)
2372 mutex_exit(&rp->r_statelock);
2463 rnode_t *rp;
2472 if ((rp = rfind(rhtp, fh, vfsp)) != NULL) {
2473 vp = RTOV(rp);
2482 rp = rpfreelist;
2483 rp_rmfree(rp);
2486 vp = RTOV(rp);
2488 if (rp->r_flags & RHASHED) {
2489 rw_enter(&rp->r_hashq->r_lock, RW_WRITER);
2494 rw_exit(&rp->r_hashq->r_lock);
2499 rp_rmhash_locked(rp);
2500 rw_exit(&rp->r_hashq->r_lock);
2503 rinactive(rp, cr);
2518 nfs_rw_destroy(&rp->r_rwlock);
2519 nfs_rw_destroy(&rp->r_lkserlock);
2520 mutex_destroy(&rp->r_statelock);
2521 cv_destroy(&rp->r_cv);
2522 cv_destroy(&rp->r_commit.c_cv);
2523 nfs_free_r_path(rp);
2524 avl_destroy(&rp->r_dir);
2537 rp = kmem_cache_alloc(rnode_cache, KM_SLEEP);
2547 bzero(rp, sizeof (*rp));
2548 rp->r_vnode = vp;
2549 nfs_rw_init(&rp->r_rwlock, NULL, RW_DEFAULT, NULL);
2550 nfs_rw_init(&rp->r_lkserlock, NULL, RW_DEFAULT, NULL);
2551 mutex_init(&rp->r_statelock, NULL, MUTEX_DEFAULT, NULL);
2552 cv_init(&rp->r_cv, NULL, CV_DEFAULT, NULL);
2553 cv_init(&rp->r_commit.c_cv, NULL, CV_DEFAULT, NULL);
2554 rp->r_fh.fh_len = fh->fh_len;
2555 bcopy(fh->fh_buf, rp->r_fh.fh_buf, fh->fh_len);
2556 rp->r_server = mi->mi_curr_serv;
2566 rp->r_path = kmem_alloc(len, KM_SLEEP);
2570 s = rp->r_path;
2579 rp->r_path = kmem_alloc(2, KM_SLEEP);
2583 *rp->r_path = '.';
2584 *(rp->r_path + 1) = '\0';
2588 rp->r_putapage = putapage;
2589 rp->r_hashq = rhtp;
2590 rp->r_flags = RREADDIRPLUS;
2591 avl_create(&rp->r_dir, compar, sizeof (rddir_cache),
2594 vp->v_data = (caddr_t)rp;
2611 rp_addfree(rp, cr);
2615 rp_addhash(rp);
2637 rnode_t *rp;
2640 rp = VTOR(vp);
2641 rootfh = &rp->r_server->sv_fhandle;
2642 if (rootfh->fh_len == rp->r_fh.fh_len &&
2643 bcmp(rootfh->fh_buf, rp->r_fh.fh_buf, rp->r_fh.fh_len) == 0) {
2653 nfs_free_r_path(rnode_t *rp)
2658 path = rp->r_path;
2660 rp->r_path = NULL;
2676 rp_addfree(rnode_t *rp, cred_t *cr)
2681 vp = RTOV(rp);
2683 ASSERT(rp->r_freef == NULL && rp->r_freeb == NULL);
2694 if (((rnew > nrnode || !(rp->r_flags & RHASHED) || rp->r_error ||
2695 (vfsp->vfs_flag & VFS_UNMOUNTED)) && rp->r_count == 0)) {
2696 if (rp->r_flags & RHASHED) {
2697 rw_enter(&rp->r_hashq->r_lock, RW_WRITER);
2702 rw_exit(&rp->r_hashq->r_lock);
2706 rp_rmhash_locked(rp);
2707 rw_exit(&rp->r_hashq->r_lock);
2710 rinactive(rp, cr);
2739 destroy_rnode(rp);
2751 rw_enter(&rp->r_hashq->r_lock, RW_WRITER);
2757 rw_exit(&rp->r_hashq->r_lock);
2770 rp->r_freef = rp;
2771 rp->r_freeb = rp;
2772 rpfreelist = rp;
2774 rp->r_freef = rpfreelist;
2775 rp->r_freeb = rpfreelist->r_freeb;
2776 rpfreelist->r_freeb->r_freef = rp;
2777 rpfreelist->r_freeb = rp;
2779 !HAVE_RDDIR_CACHE(rp) &&
2780 rp->r_symlink.contents == NULL &&
2781 rp->r_secattr == NULL &&
2782 rp->r_pathconf == NULL)
2783 rpfreelist = rp;
2787 rw_exit(&rp->r_hashq->r_lock);
2797 rp_rmfree(rnode_t *rp)
2801 ASSERT(rp->r_freef != NULL && rp->r_freeb != NULL);
2803 if (rp == rpfreelist) {
2804 rpfreelist = rp->r_freef;
2805 if (rp == rpfreelist)
2809 rp->r_freeb->r_freef = rp->r_freef;
2810 rp->r_freef->r_freeb = rp->r_freeb;
2812 rp->r_freef = rp->r_freeb = NULL;
2821 rp_addhash(rnode_t *rp)
2824 ASSERT(RW_WRITE_HELD(&rp->r_hashq->r_lock));
2825 ASSERT(!(rp->r_flags & RHASHED));
2827 rp->r_hashf = rp->r_hashq->r_hashf;
2828 rp->r_hashq->r_hashf = rp;
2829 rp->r_hashb = (rnode_t *)rp->r_hashq;
2830 rp->r_hashf->r_hashb = rp;
2832 mutex_enter(&rp->r_statelock);
2833 rp->r_flags |= RHASHED;
2834 mutex_exit(&rp->r_statelock);
2843 rp_rmhash_locked(rnode_t *rp)
2846 ASSERT(RW_WRITE_HELD(&rp->r_hashq->r_lock));
2847 ASSERT(rp->r_flags & RHASHED);
2849 rp->r_hashb->r_hashf = rp->r_hashf;
2850 rp->r_hashf->r_hashb = rp->r_hashb;
2852 mutex_enter(&rp->r_statelock);
2853 rp->r_flags &= ~RHASHED;
2854 mutex_exit(&rp->r_statelock);
2863 rp_rmhash(rnode_t *rp)
2866 rw_enter(&rp->r_hashq->r_lock, RW_WRITER);
2867 rp_rmhash_locked(rp);
2868 rw_exit(&rp->r_hashq->r_lock);
2879 rnode_t *rp;
2884 for (rp = rhtp->r_hashf; rp != (rnode_t *)rhtp; rp = rp->r_hashf) {
2885 vp = RTOV(rp);
2887 rp->r_fh.fh_len == fh->fh_len &&
2888 bcmp(rp->r_fh.fh_buf, fh->fh_buf, fh->fh_len) == 0) {
2892 if (rp->r_freef != NULL) {
2900 if (rp->r_freef != NULL) {
2901 rp_rmfree(rp);
2909 return (rp);
2928 rnode_t *rp;
2933 for (rp = rtable[index].r_hashf;
2934 rp != (rnode_t *)(&rtable[index]);
2935 rp = rp->r_hashf) {
2936 vp = RTOV(rp);
2938 if (rp->r_freef == NULL ||
2940 (rp->r_flags & RDIRTY)) ||
2941 rp->r_count > 0) {
2961 rnode_t *rp;
2970 for (rp = rtable[index].r_hashf;
2971 rp != (rnode_t *)(&rtable[index]);
2972 rp = r_hashf) {
2974 r_hashf = rp->r_hashf;
2975 vp = RTOV(rp);
2978 if (rp->r_freef != NULL) {
2979 rp_rmfree(rp);
2981 rp_rmhash_locked(rp);
2982 rp->r_hashf = rlist;
2983 rlist = rp;
2991 for (rp = rlist; rp != NULL; rp = rlist) {
2992 rlist = rp->r_hashf;
2998 rp_addfree(rp, cr);
3008 destroy_rnode(rnode_t *rp)
3013 vp = RTOV(rp);
3017 ASSERT(rp->r_count == 0);
3018 ASSERT(rp->r_lmpl == NULL);
3019 ASSERT(rp->r_mapcnt == 0);
3020 ASSERT(!(rp->r_flags & RHASHED));
3021 ASSERT(rp->r_freef == NULL && rp->r_freeb == NULL);
3026 nfs_rw_destroy(&rp->r_rwlock);
3027 nfs_rw_destroy(&rp->r_lkserlock);
3028 mutex_destroy(&rp->r_statelock);
3029 cv_destroy(&rp->r_cv);
3030 cv_destroy(&rp->r_commit.c_cv);
3031 if (rp->r_flags & RDELMAPLIST)
3032 list_destroy(&rp->r_indelmap);
3033 nfs_free_r_path(rp);
3034 avl_destroy(&rp->r_dir);
3037 kmem_cache_free(rnode_cache, rp);
3049 rnode_t *rp;
3074 for (rp = rtable[index].r_hashf;
3075 rp != (rnode_t *)(&rtable[index]);
3076 rp = rp->r_hashf) {
3077 vp = RTOV(rp);
3094 ((rp->r_flags & RDIRTY) || rp->r_mapcnt > 0)) {
3130 acachehash(rnode_t *rp, cred_t *cr)
3133 return ((((intptr_t)rp >> ACACHE_SHIFT_BITS) + crgetuid(cr)) &
3143 nfs_access_check(rnode_t *rp, uint32_t acc, cred_t *cr)
3150 vp = RTOV(rp);
3154 if (rp->r_acache != NULL) {
3155 hp = &acache[acachehash(rp, cr)];
3159 if (crcmp(ap->cred, cr) == 0 && ap->rnode == rp) {
3189 nfs_access_cache(rnode_t *rp, uint32_t acc, uint32_t resacc, cred_t *cr)
3195 hp = &acache[acachehash(rp, cr)];
3206 nap->rnode = rp;
3214 if (rp->r_acache != NULL) {
3217 if (crcmp(ap->cred, cr) == 0 && ap->rnode == rp) {
3241 mutex_enter(&rp->r_statelock);
3242 nap->list = rp->r_acache;
3243 rp->r_acache = nap;
3244 mutex_exit(&rp->r_statelock);
3251 nfs_access_purge_rp(rnode_t *rp)
3261 if (rp->r_acache == NULL)
3264 mutex_enter(&rp->r_statelock);
3265 rplist = rp->r_acache;
3266 rp->r_acache = NULL;
3267 mutex_exit(&rp->r_statelock);
3885 nfs_free_data_reclaim(rnode_t *rp)
3898 mutex_enter(&rp->r_statelock);
3899 cred = rp->r_cred;
3900 rp->r_cred = NULL;
3901 contents = rp->r_symlink.contents;
3902 size = rp->r_symlink.size;
3903 rp->r_symlink.contents = NULL;
3904 vsp = rp->r_secattr;
3905 rp->r_secattr = NULL;
3906 info = rp->r_pathconf;
3907 rp->r_pathconf = NULL;
3908 mutex_exit(&rp->r_statelock);
3916 freed = nfs_access_purge_rp(rp);
3918 if (!HAVE_RDDIR_CACHE(rp) &&
3927 if (HAVE_RDDIR_CACHE(rp))
3928 nfs_purge_rddir_cache(RTOV(rp));
3954 nfs_active_data_reclaim(rnode_t *rp)
3966 if (!mutex_tryenter(&rp->r_statelock))
3968 contents = rp->r_symlink.contents;
3969 size = rp->r_symlink.size;
3970 rp->r_symlink.contents = NULL;
3971 vsp = rp->r_secattr;
3972 rp->r_secattr = NULL;
3973 info = rp->r_pathconf;
3974 rp->r_pathconf = NULL;
3975 mutex_exit(&rp->r_statelock);
3980 freed = nfs_access_purge_rp(rp);
3982 if (!HAVE_RDDIR_CACHE(rp) &&
3991 if (HAVE_RDDIR_CACHE(rp))
3992 nfs_purge_rddir_cache(RTOV(rp));
4021 rnode_t *rp;
4028 rp = rpfreelist;
4029 if (rp != NULL) {
4031 if (nfs_free_data_reclaim(rp))
4033 } while ((rp = rp->r_freef) != rpfreelist);
4044 rnode_t *rp;
4052 for (rp = rtable[index].r_hashf;
4053 rp != (rnode_t *)(&rtable[index]);
4054 rp = rp->r_hashf) {
4055 if (nfs_active_data_reclaim(rp))
4067 rnode_t *rp;
4075 while ((rp = rpfreelist) != NULL) {
4076 rp_rmfree(rp);
4078 if (rp->r_flags & RHASHED) {
4079 vp = RTOV(rp);
4080 rw_enter(&rp->r_hashq->r_lock, RW_WRITER);
4085 rw_exit(&rp->r_hashq->r_lock);
4090 rp_rmhash_locked(rp);
4091 rw_exit(&rp->r_hashq->r_lock);
4098 rp_addfree(rp, CRED());
4250 rnode_t *rp;
4385 rp = rfind(&rtable[index], &mi->mi_curr_serv->sv_fhandle,
4387 if (rp != NULL) {
4388 if (rp->r_flags & RHASHED)
4389 rp_rmhash_locked(rp);
4391 rp->r_server = svp;
4392 rp->r_fh = svp->sv_fhandle;
4393 (void) nfs_free_data_reclaim(rp);
4394 index = rtablehash(&rp->r_fh);
4395 rp->r_hashq = &rtable[index];
4396 rw_enter(&rp->r_hashq->r_lock, RW_WRITER);
4397 vn_exists(RTOV(rp));
4398 rp_addhash(rp);
4399 rw_exit(&rp->r_hashq->r_lock);
4400 VN_RELE(RTOV(rp));
4479 rnode_t *rp, *nrp;
4494 rp = VTOR(vp);
4506 error = failover_lookup(rp->r_path, rootvp,
4528 rp->r_server = mi->mi_curr_serv;
4545 * this thread here. Check for rp->r_server and
4562 if (rp->r_size != nrp->r_size || vp->v_type != nvp->v_type) {
4566 rp->r_server->sv_hostname,
4567 nrp->r_server->sv_hostname, rp->r_path);
4577 if (rp->r_flags & RHASHED)
4578 rp_rmhash(rp);
4579 rp->r_server = mi->mi_curr_serv;
4580 rp->r_fh = nrp->r_fh;
4581 rp->r_hashq = nrp->r_hashq;
4587 rp->r_attr = nrp->r_attr;
4588 rp->r_attrtime = nrp->r_attrtime;
4589 rp->r_mtime = nrp->r_mtime;
4590 (void) nfs_free_data_reclaim(rp);
4591 nfs_setswaplike(vp, &rp->r_attr);
4592 rw_enter(&rp->r_hashq->r_lock, RW_WRITER);
4593 rp_addhash(rp);
4594 rw_exit(&rp->r_hashq->r_lock);
4622 * of path in rp->r_path. We know that the path was a created