Lines Matching refs:ip

255 	struct inode *ip = buf;  in ufs_inode_cache_constructor()  local
258 vp = ip->i_vnode = vn_alloc(kmflags); in ufs_inode_cache_constructor()
263 vp->v_data = ip; in ufs_inode_cache_constructor()
265 rw_init(&ip->i_rwlock, NULL, RW_DEFAULT, NULL); in ufs_inode_cache_constructor()
266 rw_init(&ip->i_contents, NULL, RW_DEFAULT, NULL); in ufs_inode_cache_constructor()
267 mutex_init(&ip->i_tlock, NULL, MUTEX_DEFAULT, NULL); in ufs_inode_cache_constructor()
268 dnlc_dir_init(&ip->i_danchor); in ufs_inode_cache_constructor()
270 cv_init(&ip->i_wrcv, NULL, CV_DRIVER, NULL); in ufs_inode_cache_constructor()
279 struct inode *ip = buf; in ufs_inode_cache_destructor() local
282 vp = ITOV(ip); in ufs_inode_cache_destructor()
284 rw_destroy(&ip->i_rwlock); in ufs_inode_cache_destructor()
285 rw_destroy(&ip->i_contents); in ufs_inode_cache_destructor()
286 mutex_destroy(&ip->i_tlock); in ufs_inode_cache_destructor()
288 dnlc_dir_fini(&ip->i_danchor); in ufs_inode_cache_destructor()
291 cv_destroy(&ip->i_wrcv); in ufs_inode_cache_destructor()
327 ufs_free_inode(struct inode *ip) in ufs_free_inode() argument
329 vn_invalid(ITOV(ip)); in ufs_free_inode()
330 kmem_cache_free(inode_cache, ip); in ufs_free_inode()
339 struct inode *ip; in ufs_alloc_inode() local
342 ip = kmem_cache_alloc(inode_cache, KM_SLEEP); in ufs_alloc_inode()
346 ip->i_freef = ip; in ufs_alloc_inode()
347 ip->i_freeb = ip; in ufs_alloc_inode()
348 ip->i_flag = IREF; in ufs_alloc_inode()
349 ip->i_seq = 0xFF; /* Unique initial value */ in ufs_alloc_inode()
350 ip->i_dev = ufsvfsp->vfs_dev; in ufs_alloc_inode()
351 ip->i_ufsvfs = ufsvfsp; in ufs_alloc_inode()
352 ip->i_devvp = ufsvfsp->vfs_devvp; in ufs_alloc_inode()
353 ip->i_number = ino; in ufs_alloc_inode()
354 ip->i_diroff = 0; in ufs_alloc_inode()
355 ip->i_nextr = 0; in ufs_alloc_inode()
356 ip->i_map = NULL; in ufs_alloc_inode()
357 ip->i_rdev = 0; in ufs_alloc_inode()
358 ip->i_writes = 0; in ufs_alloc_inode()
359 ip->i_mode = 0; in ufs_alloc_inode()
360 ip->i_delaylen = 0; in ufs_alloc_inode()
361 ip->i_delayoff = 0; in ufs_alloc_inode()
362 ip->i_nextrio = 0; in ufs_alloc_inode()
363 ip->i_ufs_acl = NULL; in ufs_alloc_inode()
364 ip->i_cflags = 0; in ufs_alloc_inode()
365 ip->i_mapcnt = 0; in ufs_alloc_inode()
366 ip->i_dquot = NULL; in ufs_alloc_inode()
367 ip->i_cachedir = CD_ENABLED; in ufs_alloc_inode()
368 ip->i_writer = NULL; in ufs_alloc_inode()
373 vp = ITOV(ip); in ufs_alloc_inode()
379 return (ip); in ufs_alloc_inode()
449 struct inode *ip, *sp; in ufs_iget_internal() local
477 for (ip = ih->ih_chain[0]; ip != (struct inode *)ih; ip = ip->i_forw) { in ufs_iget_internal()
478 if (ino != ip->i_number || vfs_dev != ip->i_dev || in ufs_iget_internal()
479 (ip->i_flag & ISTALE)) in ufs_iget_internal()
485 vp = ITOV(ip); /* for locknest */ in ufs_iget_internal()
488 rw_enter(&ip->i_contents, RW_READER); in ufs_iget_internal()
493 if ((ip->i_flag & IREF) == 0) { in ufs_iget_internal()
494 if (ufs_rmidle(ip)) in ufs_iget_internal()
501 if (ip->i_flag & ISTALE) { in ufs_iget_internal()
502 rw_exit(&ip->i_contents); in ufs_iget_internal()
508 *ipp = ip; in ufs_iget_internal()
517 rw_exit(&ip->i_contents); in ufs_iget_internal()
531 ip = ufs_alloc_inode(ufsvfsp, ino); in ufs_iget_internal()
532 vp = ITOV(ip); in ufs_iget_internal()
536 ip->i_doff = (offset_t)ioff + ldbtob(bno); in ufs_iget_internal()
546 ufs_free_inode(ip); in ufs_iget_internal()
557 rw_enter(&ip->i_contents, RW_WRITER); in ufs_iget_internal()
558 insque(ip, ih); in ufs_iget_internal()
563 bp = UFS_BREAD(ufsvfsp, ip->i_dev, bno, (int)fs->fs_bsize); in ufs_iget_internal()
571 ip->i_flag |= ISTALE; /* in case someone is looking it up */ in ufs_iget_internal()
572 rw_exit(&ip->i_contents); in ufs_iget_internal()
581 ip->i_ic = dp->di_ic; /* structure assignment */ in ufs_iget_internal()
587 if (ip->i_suid != UID_LONG) in ufs_iget_internal()
588 ip->i_uid = ip->i_suid; in ufs_iget_internal()
589 if (ip->i_sgid != GID_LONG) in ufs_iget_internal()
590 ip->i_gid = ip->i_sgid; in ufs_iget_internal()
592 ftype = ip->i_mode & IFMT; in ufs_iget_internal()
595 uint_t top16 = ip->i_ordev & 0xffff0000u; in ufs_iget_internal()
598 dv = expdev(ip->i_ordev); in ufs_iget_internal()
600 dv = expldev(ip->i_ordev); in ufs_iget_internal()
601 vp->v_rdev = ip->i_rdev = dv; in ufs_iget_internal()
609 if ((ftype == 0) || (ip->i_nlink <= 0)) { in ufs_iget_internal()
610 ip->i_flag |= ISTALE; in ufs_iget_internal()
611 rw_exit(&ip->i_contents); in ufs_iget_internal()
630 vp->v_type = IFTOVT((mode_t)ip->i_mode); in ufs_iget_internal()
638 if (ftype != 0 && ip->i_shadow != 0) { in ufs_iget_internal()
639 if ((error = ufs_si_load(ip, cr)) != 0) { in ufs_iget_internal()
640 ip->i_flag |= ISTALE; in ufs_iget_internal()
641 ip->i_ufs_acl = NULL; in ufs_iget_internal()
642 rw_exit(&ip->i_contents); in ufs_iget_internal()
653 if (ip->i_mode && ((ip->i_mode & IFMT) != IFSHAD) && in ufs_iget_internal()
654 ((ip->i_mode & IFMT) != IFATTRDIR)) { in ufs_iget_internal()
655 ip->i_dquot = getinoquota(ip); in ufs_iget_internal()
657 TRANS_MATA_IGET(ufsvfsp, ip); in ufs_iget_internal()
658 *ipp = ip; in ufs_iget_internal()
659 rw_exit(&ip->i_contents); in ufs_iget_internal()
669 ufs_iinactive(struct inode *ip) in ufs_iinactive() argument
675 struct vnode *vp = ITOV(ip); in ufs_iinactive()
676 struct ufsvfs *ufsvfsp = ip->i_ufsvfs; in ufs_iinactive()
683 dnlc_dir_purge(&ip->i_danchor); in ufs_iinactive()
688 rw_enter(&ip->i_contents, RW_WRITER); in ufs_iinactive()
689 ASSERT(ip->i_flag & IREF); in ufs_iinactive()
708 rw_exit(&ip->i_contents); in ufs_iinactive()
717 if (ip->i_ufsvfs == NULL) { in ufs_iinactive()
718 rw_exit(&ip->i_contents); in ufs_iinactive()
719 ufs_si_del(ip); in ufs_iinactive()
721 ufs_free_inode(ip); in ufs_iinactive()
732 if ((ip->i_flag & ISTALE) == 0 && ip->i_fs->fs_ronly == 0 && in ufs_iinactive()
733 ip->i_mode && ip->i_nlink <= 0) { in ufs_iinactive()
740 ip->i_flag |= IDEL; in ufs_iinactive()
747 if (ULOCKFS_IS_NOIDEL(ITOUL(ip))) { in ufs_iinactive()
751 rw_exit(&ip->i_contents); in ufs_iinactive()
754 if (!TRANS_ISTRANS(ip->i_ufsvfs)) { in ufs_iinactive()
755 rw_exit(&ip->i_contents); in ufs_iinactive()
756 ufs_delete(ip->i_ufsvfs, ip, 0); in ufs_iinactive()
762 uq = &ip->i_ufsvfs->vfs_delete; in ufs_iinactive()
768 ip->i_freef = iq; in ufs_iinactive()
769 ip->i_freeb = iq->i_freeb; in ufs_iinactive()
770 iq->i_freeb->i_freef = ip; in ufs_iinactive()
771 iq->i_freeb = ip; in ufs_iinactive()
773 uq->uq_ihead = ip; in ufs_iinactive()
775 uq->uq_ihead = ip; in ufs_iinactive()
776 ip->i_freef = ip; in ufs_iinactive()
777 ip->i_freeb = ip; in ufs_iinactive()
781 delq_info->delq_unreclaimed_blocks += ip->i_blocks; in ufs_iinactive()
792 rw_exit(&ip->i_contents); in ufs_iinactive()
804 ip->i_flag &= ~(IREF | IDIRECTIO); in ufs_iinactive()
806 if (vn_has_cached_data(vp) || ip->i_flag & IFASTSYMLNK) { in ufs_iinactive()
808 hip = (inode_t *)&ufs_useful_iq[IQHASH(ip)]; in ufs_iinactive()
812 hip = (inode_t *)&ufs_junk_iq[IQHASH(ip)]; in ufs_iinactive()
813 ip->i_flag |= IJUNKIQ; in ufs_iinactive()
816 ip->i_freef = hip; in ufs_iinactive()
817 ip->i_freeb = hip->i_freeb; in ufs_iinactive()
818 hip->i_freeb->i_freef = ip; in ufs_iinactive()
819 hip->i_freeb = ip; in ufs_iinactive()
828 rw_exit(&ip->i_contents); in ufs_iinactive()
837 ufs_iupdat(struct inode *ip, int waitfor) in ufs_iupdat() argument
842 struct ufsvfs *ufsvfsp = ip->i_ufsvfs; in ufs_iupdat()
853 ASSERT(RW_LOCK_HELD(&ip->i_contents)); in ufs_iupdat()
861 flag = ip->i_flag; /* Atomic read */ in ufs_iupdat()
868 fp = ip->i_fs; in ufs_iupdat()
872 mutex_enter(&ip->i_tlock); in ufs_iupdat()
873 ip->i_flag &= ~(IUPD|IACC|ICHG|IMOD|IMODACC|IATTCHG); in ufs_iupdat()
874 mutex_exit(&ip->i_tlock); in ufs_iupdat()
885 bp = UFS_BREAD(ufsvfsp, ip->i_dev, in ufs_iupdat()
886 (daddr_t)fsbtodb(fp, itod(fp, ip->i_number)), in ufs_iupdat()
889 mutex_enter(&ip->i_tlock); in ufs_iupdat()
890 ip->i_flag &= in ufs_iupdat()
892 mutex_exit(&ip->i_tlock); in ufs_iupdat()
899 mutex_enter(&ip->i_tlock); in ufs_iupdat()
900 ITIMES_NOLOCK(ip); in ufs_iupdat()
901 do_trans_times = ((ip->i_flag & (IMOD|IMODACC)) == IMODACC); in ufs_iupdat()
902 ip->i_flag &= ~(IUPD|IACC|ICHG|IMOD|IMODACC|IATTCHG); in ufs_iupdat()
903 mutex_exit(&ip->i_tlock); in ufs_iupdat()
910 TRANS_INODE_TIMES(ufsvfsp, ip); in ufs_iupdat()
930 suid = (ulong_t)ip->i_uid > (ulong_t)USHRT_MAX ? in ufs_iupdat()
931 UID_LONG : ip->i_uid; in ufs_iupdat()
932 sgid = (ulong_t)ip->i_gid > (ulong_t)USHRT_MAX ? in ufs_iupdat()
933 GID_LONG : ip->i_gid; in ufs_iupdat()
935 if ((ip->i_suid != suid) || (ip->i_sgid != sgid)) { in ufs_iupdat()
936 ip->i_suid = suid; in ufs_iupdat()
937 ip->i_sgid = sgid; in ufs_iupdat()
938 TRANS_INODE(ufsvfsp, ip); in ufs_iupdat()
941 if ((ip->i_mode & IFMT) == IFBLK || in ufs_iupdat()
942 (ip->i_mode & IFMT) == IFCHR) { in ufs_iupdat()
943 dev_t d = ip->i_rdev; in ufs_iupdat()
956 panic("ip %p: i_rdev too big", (void *)ip); in ufs_iupdat()
960 ip->i_ordev = dev32; /* can't use old fmt. */ in ufs_iupdat()
962 ip->i_ordev = cmpdev(d); in ufs_iupdat()
969 dp = (struct dinode *)bp->b_un.b_addr + itoo(fp, ip->i_number); in ufs_iupdat()
970 dp->di_ic = ip->i_ic; /* structure assignment */ in ufs_iupdat()
984 TRANS_LOG(ufsvfsp, (caddr_t)dp, ip->i_doff, in ufs_iupdat()
990 } else if (waitfor && (ip->i_ufsvfs->vfs_dio == 0)) { in ufs_iupdat()
997 mutex_enter(&ip->i_tlock); in ufs_iupdat()
998 ip->i_flag &= ~IBDWRITE; in ufs_iupdat()
999 mutex_exit(&ip->i_tlock); in ufs_iupdat()
1011 mutex_enter(&ip->i_tlock); in ufs_iupdat()
1012 ip->i_flag |= IBDWRITE; in ufs_iupdat()
1013 mutex_exit(&ip->i_tlock); in ufs_iupdat()
1022 blkflush(ip->i_dev, in ufs_iupdat()
1023 (daddr_t)fsbtodb(fp, itod(fp, ip->i_number))); in ufs_iupdat()
1024 mutex_enter(&ip->i_tlock); in ufs_iupdat()
1025 ip->i_flag &= ~IBDWRITE; in ufs_iupdat()
1026 mutex_exit(&ip->i_tlock); in ufs_iupdat()
1046 indirtrunc(struct inode *ip, daddr_t bn, daddr_t lastbn, int level, int flags) in indirtrunc() argument
1051 struct ufsvfs *ufsvfsp = ip->i_ufsvfs; in indirtrunc()
1057 ASSERT(RW_WRITE_HELD(&ip->i_contents)); in indirtrunc()
1080 ip->i_dev, (daddr_t)fsbtodb(fs, bn), (int)fs->fs_bsize); in indirtrunc()
1127 indirtrunc(ip, nb, (daddr_t)-1, level - 1, flags); in indirtrunc()
1128 free(ip, nb, (off_t)fs->fs_bsize, flags | I_IBLK); in indirtrunc()
1130 free(ip, nb, (off_t)fs->fs_bsize, flags); in indirtrunc()
1143 indirtrunc(ip, nb, last, level - 1, flags); in indirtrunc()
1162 struct inode *ip; in ufs_itrunc() local
1403 ip = &tip; in ufs_itrunc()
1424 bn = ip->i_ib[level]; in ufs_itrunc()
1427 indirtrunc(ip, bn, lastiblock[level], level, flags); in ufs_itrunc()
1429 ip->i_ib[level] = 0; in ufs_itrunc()
1430 free(ip, bn, (off_t)fs->fs_bsize, in ufs_itrunc()
1443 bn = ip->i_db[i]; in ufs_itrunc()
1446 ip->i_db[i] = 0; in ufs_itrunc()
1447 bsize = (off_t)blksize(fs, ip, i); in ufs_itrunc()
1448 free(ip, bn, bsize, flags); in ufs_itrunc()
1458 bn = ip->i_db[lastblock]; in ufs_itrunc()
1466 oldspace = blksize(fs, ip, lastblock); in ufs_itrunc()
1467 UFS_SET_ISIZE(length, ip); in ufs_itrunc()
1468 newspace = blksize(fs, ip, lastblock); in ufs_itrunc()
1470 err = ufs_fault(ITOV(ip), "ufs_itrunc: newspace == 0"); in ufs_itrunc()
1480 free(ip, bn, oldspace - newspace, flags); in ufs_itrunc()
1487 if (ip->i_ib[level] != oip->i_ib[level]) { in ufs_itrunc()
1488 err = ufs_fault(ITOV(ip), "ufs_itrunc: indirect block"); in ufs_itrunc()
1493 if (ip->i_db[i] != oip->i_db[i]) { in ufs_itrunc()
1494 err = ufs_fault(ITOV(ip), "ufs_itrunc: direct block"); in ufs_itrunc()
1527 ufs_iaccess(struct inode *ip, int mode, struct cred *cr, int dolock) in ufs_iaccess() argument
1533 rw_enter(&ip->i_contents, RW_READER); in ufs_iaccess()
1534 ASSERT(RW_LOCK_HELD(&ip->i_contents)); in ufs_iaccess()
1542 if (ip->i_fs->fs_ronly != 0) { in ufs_iaccess()
1543 if ((ip->i_mode & IFMT) != IFCHR && in ufs_iaccess()
1544 (ip->i_mode & IFMT) != IFBLK && in ufs_iaccess()
1545 (ip->i_mode & IFMT) != IFIFO) { in ufs_iaccess()
1554 if (ip->i_ufs_acl && ip->i_ufs_acl->aowner) { in ufs_iaccess()
1555 ret = ufs_acl_access(ip, mode, cr); in ufs_iaccess()
1564 if (crgetuid(cr) != ip->i_uid) { in ufs_iaccess()
1566 if (!groupmember((uid_t)ip->i_gid, cr)) in ufs_iaccess()
1571 ret = secpolicy_vnode_access2(cr, ITOV(ip), ip->i_uid, in ufs_iaccess()
1572 ip->i_mode << shift, mode); in ufs_iaccess()
1575 rw_exit(&ip->i_contents); in ufs_iaccess()
1589 ufs_rmidle(struct inode *ip) in ufs_rmidle() argument
1593 mutex_enter(&ip->i_tlock); in ufs_rmidle()
1594 if ((ip->i_flag & IREF) == 0) { in ufs_rmidle()
1596 ip->i_freef->i_freeb = ip->i_freeb; in ufs_rmidle()
1597 ip->i_freeb->i_freef = ip->i_freef; in ufs_rmidle()
1598 ip->i_freef = ip; in ufs_rmidle()
1599 ip->i_freeb = ip; in ufs_rmidle()
1600 ip->i_flag |= IREF; in ufs_rmidle()
1602 if (ip->i_flag & IJUNKIQ) { in ufs_rmidle()
1604 ip->i_flag &= ~IJUNKIQ; in ufs_rmidle()
1611 mutex_exit(&ip->i_tlock); in ufs_rmidle()
1622 struct inode *ip; /* current inode */ in ufs_scan_inodes() local
1656 for (ip = ih->ih_chain[0], lip_held = 0; in ufs_scan_inodes()
1657 ip != (struct inode *)ih; in ufs_scan_inodes()
1658 ip = lip->i_forw) { in ufs_scan_inodes()
1669 lip = ip; in ufs_scan_inodes()
1670 if (ufsvfsp != NULL && ip->i_ufsvfs != ufsvfsp) { in ufs_scan_inodes()
1682 VN_HOLD(ITOV(ip)); in ufs_scan_inodes()
1697 if (!rw_tryenter(&ip->i_contents, RW_WRITER)) { in ufs_scan_inodes()
1702 rw_enter(&ip->i_contents, RW_WRITER); in ufs_scan_inodes()
1705 rw_exit(&ip->i_contents); in ufs_scan_inodes()
1721 if ((ip->i_flag & ISTALE) == 0) { in ufs_scan_inodes()
1722 if ((error = (*func)(ip, arg)) != 0) in ufs_scan_inodes()
1745 ufs_imark(struct inode *ip) in ufs_imark() argument
1754 if (ip->i_flag & ISEQ) { in ufs_imark()
1755 ASSERT(ip->i_flag & (IUPD|ICHG)); in ufs_imark()
1756 ip->i_seq++; in ufs_imark()
1757 ip->i_flag &= ~ISEQ; in ufs_imark()
1797 if ((ip->i_flag & IACC) && !(ip->i_ufsvfs->vfs_noatime)) { in ufs_imark()
1798 ip->i_atime = iuniqtime; in ufs_imark()
1800 if (ip->i_flag & IUPD) { in ufs_imark()
1801 ip->i_mtime = iuniqtime; in ufs_imark()
1802 ip->i_flag |= IMODTIME; in ufs_imark()
1804 if (ip->i_flag & ICHG) { in ufs_imark()
1805 ip->i_diroff = 0; in ufs_imark()
1806 ip->i_ctime = iuniqtime; in ufs_imark()
1815 ufs_itimes_nolock(struct inode *ip) in ufs_itimes_nolock() argument
1822 if (((ip->i_flag & (IUPD|IACC|ICHG)) == IACC) && in ufs_itimes_nolock()
1823 (ip->i_ufsvfs->vfs_noatime)) { in ufs_itimes_nolock()
1827 if (ip->i_flag & (IUPD|IACC|ICHG)) { in ufs_itimes_nolock()
1828 if (ip->i_flag & ICHG) in ufs_itimes_nolock()
1829 ip->i_flag |= IMOD; in ufs_itimes_nolock()
1831 ip->i_flag |= IMODACC; in ufs_itimes_nolock()
1832 ufs_imark(ip); in ufs_itimes_nolock()
1833 ip->i_flag &= ~(IACC|IUPD|ICHG); in ufs_itimes_nolock()