Lines Matching refs:li

78 #define	TABLE_LOCK(vp, li)      \  argument
79 (&(li)->li_hashtable[ltablehash((vp), (li)->li_htsize)].lh_lock)
84 #define TABLE_BUCKET(vp, li) \ argument
85 ((li)->li_hashtable[ltablehash((vp), (li)->li_htsize)].lh_chain)
90 #define TABLE_COUNT(vp, li) \ argument
91 ((li)->li_hashtable[ltablehash((vp), (li)->li_htsize)].lh_count)
96 #define TABLE_LOCK_ENTER(vp, li) table_lock_enter(vp, li) argument
97 #define TABLE_LOCK_EXIT(vp, li) \ argument
98 mutex_exit(&(li)->li_hashtable[ltablehash((vp), \
99 (li)->li_htsize)].lh_lock)
155 table_lock_enter(vnode_t *vp, struct loinfo *li) in table_lock_enter() argument
162 htsize = li->li_htsize; in table_lock_enter()
164 chain = (struct lobucket *)li->li_hashtable; in table_lock_enter()
167 if (li->li_hashtable == chain && li->li_htsize == htsize) in table_lock_enter()
194 lsetup(struct loinfo *li, uint_t htsize) in lsetup() argument
196 li->li_refct = 0; in lsetup()
197 li->li_lfs = NULL; in lsetup()
200 li->li_htsize = htsize; in lsetup()
201 li->li_hashtable = kmem_zalloc(htsize * sizeof (*li->li_hashtable), in lsetup()
203 mutex_init(&li->li_lfslock, NULL, MUTEX_DEFAULT, NULL); in lsetup()
204 mutex_init(&li->li_htlock, NULL, MUTEX_DEFAULT, NULL); in lsetup()
205 li->li_retired = NULL; in lsetup()
212 ldestroy(struct loinfo *li) in ldestroy() argument
218 mutex_destroy(&li->li_htlock); in ldestroy()
219 mutex_destroy(&li->li_lfslock); in ldestroy()
220 htsize = li->li_htsize; in ldestroy()
221 table = li->li_hashtable; in ldestroy()
224 kmem_free(table, htsize * sizeof (*li->li_hashtable)); in ldestroy()
229 lrhp = li->li_retired; in ldestroy()
234 trhp->lrh_size * sizeof (*li->li_hashtable)); in ldestroy()
237 li->li_retired = NULL; in ldestroy()
255 makelonode(struct vnode *vp, struct loinfo *li, int flag) in makelonode() argument
262 TABLE_LOCK_ENTER(vp, li); in makelonode()
264 lp = lfind(vp, li); in makelonode()
272 TABLE_LOCK_EXIT(vp, li); in makelonode()
282 TABLE_LOCK_ENTER(vp, li); in makelonode()
284 lp = lfind(vp, li); in makelonode()
293 atomic_inc_32(&li->li_refct); in makelonode()
294 vfsp = makelfsnode(vp->v_vfsp, li); in makelonode()
302 lsave(lp, li); in makelonode()
309 TABLE_LOCK_EXIT(vp, li); in makelonode()
317 makelfsnode(struct vfs *vfsp, struct loinfo *li) in makelfsnode() argument
325 if (vfsp == li->li_realvfs) in makelfsnode()
326 return (li->li_mountvfs); in makelfsnode()
327 ASSERT(li->li_refct > 0); in makelfsnode()
328 mutex_enter(&li->li_lfslock); in makelfsnode()
329 if ((lfs = lfsfind(vfsp, li)) == NULL) { in makelfsnode()
330 mutex_exit(&li->li_lfslock); in makelfsnode()
332 mutex_enter(&li->li_lfslock); in makelfsnode()
333 if ((tlfs = lfsfind(vfsp, li)) != NULL) { in makelfsnode()
345 VFS_INIT(&lfs->lfs_vfs, lo_vfsops, (caddr_t)li); in makelfsnode()
346 lfs->lfs_vfs.vfs_fstype = li->li_mountvfs->vfs_fstype; in makelfsnode()
348 ((vfsp->vfs_flag | li->li_mflag) & ~li->li_dflag) & in makelfsnode()
368 lfs->lfs_next = li->li_lfs; in makelfsnode()
369 li->li_lfs = lfs; in makelfsnode()
375 mutex_exit(&li->li_lfslock); in makelfsnode()
383 freelfsnode(struct lfsnode *lfs, struct loinfo *li) in freelfsnode() argument
388 ASSERT(MUTEX_HELD(&li->li_lfslock)); in freelfsnode()
389 ASSERT(li->li_refct > 0); in freelfsnode()
390 for (this = li->li_lfs; this != NULL; this = this->lfs_next) { in freelfsnode()
394 li->li_lfs = lfs->lfs_next; in freelfsnode()
423 lfsfind(struct vfs *vfsp, struct loinfo *li) in lfsfind() argument
427 ASSERT(MUTEX_HELD(&li->li_lfslock)); in lfsfind()
444 for (lfs = li->li_lfs; lfs != NULL; lfs = lfs->lfs_next) { in lfsfind()
465 struct loinfo *li = vtoli(vfsp); in lo_realvfs() local
468 ASSERT(li->li_refct > 0); in lo_realvfs()
469 if (vfsp == li->li_mountvfs) { in lo_realvfs()
471 *realrootvpp = vtol(li->li_rootvp)->lo_vp; in lo_realvfs()
472 return (li->li_realvfs); in lo_realvfs()
474 mutex_enter(&li->li_lfslock); in lo_realvfs()
475 for (lfs = li->li_lfs; lfs != NULL; lfs = lfs->lfs_next) { in lo_realvfs()
479 mutex_exit(&li->li_lfslock); in lo_realvfs()
500 lretire(struct loinfo *li, struct lobucket *table, uint_t size) in lretire() argument
508 mutex_enter(&li->li_htlock); in lretire()
509 lrhp->lrh_next = li->li_retired; in lretire()
510 li->li_retired = lrhp; in lretire()
511 mutex_exit(&li->li_htlock); in lretire()
518 lgrow(struct loinfo *li, uint_t newsize) in lgrow() argument
529 if ((newtable = kmem_zalloc(newsize * sizeof (*li->li_hashtable), in lgrow()
533 mutex_enter(&li->li_htlock); in lgrow()
534 if (newsize <= li->li_htsize) { in lgrow()
535 mutex_exit(&li->li_htlock); in lgrow()
536 kmem_free(newtable, newsize * sizeof (*li->li_hashtable)); in lgrow()
539 oldsize = li->li_htsize; in lgrow()
540 oldtable = li->li_hashtable; in lgrow()
579 li->li_hashtable = newtable; in lgrow()
586 li->li_htsize = newsize; in lgrow()
595 mutex_exit(&li->li_htlock); in lgrow()
597 lretire(li, oldtable, oldsize); in lgrow()
604 lsave(lnode_t *lp, struct loinfo *li) in lsave() argument
607 ASSERT(MUTEX_HELD(TABLE_LOCK(lp->lo_vp, li))); in lsave()
611 lp, ltablehash(lp->lo_vp, li)); in lsave()
614 TABLE_COUNT(lp->lo_vp, li)++; in lsave()
615 lp->lo_next = TABLE_BUCKET(lp->lo_vp, li); in lsave()
616 TABLE_BUCKET(lp->lo_vp, li) = lp; in lsave()
618 if (li->li_refct > (li->li_htsize << lo_resize_threshold)) { in lsave()
619 TABLE_LOCK_EXIT(lp->lo_vp, li); in lsave()
620 lgrow(li, li->li_htsize << lo_resize_factor); in lsave()
621 TABLE_LOCK_ENTER(lp->lo_vp, li); in lsave()
630 lfs_rele(struct lfsnode *lfs, struct loinfo *li) in lfs_rele() argument
634 ASSERT(MUTEX_HELD(&li->li_lfslock)); in lfs_rele()
637 freelfsnode(lfs, li); in lfs_rele()
652 struct loinfo *li = vtoli(vp->v_vfsp); in freelonode() local
656 lp, ltablehash(lp->lo_vp, li)); in freelonode()
658 TABLE_LOCK_ENTER(lp->lo_vp, li); in freelonode()
664 TABLE_LOCK_EXIT(lp->lo_vp, li); in freelonode()
669 for (lt = TABLE_BUCKET(lp->lo_vp, li); lt != NULL; in freelonode()
676 atomic_dec_32(&li->li_refct); in freelonode()
679 if (vfsp != li->li_mountvfs) { in freelonode()
680 mutex_enter(&li->li_lfslock); in freelonode()
684 lfs = li->li_lfs; in freelonode()
688 lfs_rele(lfs, li); in freelonode()
695 freelfsnode(lfs, li); in freelonode()
699 mutex_exit(&li->li_lfslock); in freelonode()
702 TABLE_BUCKET(lt->lo_vp, li) = lt->lo_next; in freelonode()
706 TABLE_COUNT(lt->lo_vp, li)--; in freelonode()
707 TABLE_LOCK_EXIT(lt->lo_vp, li); in freelonode()
722 lfind(struct vnode *vp, struct loinfo *li) in lfind() argument
726 ASSERT(MUTEX_HELD(TABLE_LOCK(vp, li))); in lfind()
728 lt = TABLE_BUCKET(vp, li); in lfind()