Lines Matching refs:ip

136 	struct ud_inode *ip;  in ud_search_icache()  local
146 for (ip = ih->ih_chain[0]; in ud_search_icache()
147 ip != (struct ud_inode *)ih; in ud_search_icache()
148 ip = ip->i_forw) { in ud_search_icache()
149 if ((prn == ip->i_icb_prn) && (ploc == ip->i_icb_block) && in ud_search_icache()
150 (vfsp->vfs_dev == ip->i_dev)) { in ud_search_icache()
152 return (ip); in ud_search_icache()
167 struct ud_inode *ip; in ud_iget() local
194 for (ip = ih->ih_chain[0]; in ud_iget()
195 ip != (struct ud_inode *)ih; in ud_iget()
196 ip = ip->i_forw) { in ud_iget()
198 if ((prn == ip->i_icb_prn) && in ud_iget()
199 (ploc == ip->i_icb_block) && in ud_iget()
200 (vfsp->vfs_dev == ip->i_dev)) { in ud_iget()
202 vp = ITOV(ip); in ud_iget()
206 rw_enter(&ip->i_contents, RW_READER); in ud_iget()
207 mutex_enter(&ip->i_tlock); in ud_iget()
208 if ((ip->i_flag & IREF) == 0) { in ud_iget()
210 ud_remove_from_free_list(ip, UD_UNKN); in ud_iget()
213 ip->i_flag |= IREF; in ud_iget()
214 mutex_exit(&ip->i_tlock); in ud_iget()
215 rw_exit(&ip->i_contents); in ud_iget()
217 *ipp = ip; in ud_iget()
264 ip = udf_ifreeh; in ud_iget()
265 vp = ITOV(ip); in ud_iget()
267 ud_remove_from_free_list(ip, UD_BEGIN); in ud_iget()
270 if (ip->i_flag & IREF) { in ud_iget()
278 rw_enter(&ip->i_contents, RW_WRITER); in ud_iget()
286 mutex_enter(&ip->i_tlock); in ud_iget()
287 ip->i_flag = (ip->i_flag & IMODTIME) | IREF; in ud_iget()
288 mutex_exit(&ip->i_tlock); in ud_iget()
291 if (ud_syncip(ip, B_INVAL, I_SYNC) != 0) { in ud_iget()
292 ud_idrop(ip); in ud_iget()
293 rw_exit(&ip->i_contents); in ud_iget()
298 mutex_enter(&ip->i_tlock); in ud_iget()
299 ip->i_flag &= ~IMODTIME; in ud_iget()
300 mutex_exit(&ip->i_tlock); in ud_iget()
302 if (ip->i_ext) { in ud_iget()
303 kmem_free(ip->i_ext, in ud_iget()
304 sizeof (struct icb_ext) * ip->i_ext_count); in ud_iget()
305 ip->i_ext = 0; in ud_iget()
306 ip->i_ext_count = ip->i_ext_used = 0; in ud_iget()
309 if (ip->i_con) { in ud_iget()
310 kmem_free(ip->i_con, in ud_iget()
311 sizeof (struct icb_ext) * ip->i_con_count); in ud_iget()
312 ip->i_con = 0; in ud_iget()
313 ip->i_con_count = ip->i_con_used = ip->i_con_read = 0; in ud_iget()
332 ip = (struct ud_inode *)kmem_zalloc(sizeof (struct ud_inode), in ud_iget()
335 if ((ip == NULL) || (vp == NULL)) { in ud_iget()
339 if (ip != NULL) in ud_iget()
340 kmem_free(ip, sizeof (struct ud_inode)); in ud_iget()
347 if (ip == NULL) in ud_iget()
348 ip = (struct ud_inode *) in ud_iget()
356 ip->i_vnode = vp; in ud_iget()
358 ip->i_marker1 = (uint32_t)0xAAAAAAAA; in ud_iget()
359 ip->i_marker2 = (uint32_t)0xBBBBBBBB; in ud_iget()
360 ip->i_marker3 = (uint32_t)0xCCCCCCCC; in ud_iget()
362 rw_init(&ip->i_rwlock, NULL, RW_DEFAULT, NULL); in ud_iget()
363 rw_init(&ip->i_contents, NULL, RW_DEFAULT, NULL); in ud_iget()
364 mutex_init(&ip->i_tlock, NULL, MUTEX_DEFAULT, NULL); in ud_iget()
366 ip->i_forw = ip; in ud_iget()
367 ip->i_back = ip; in ud_iget()
368 vp->v_data = (caddr_t)ip; in ud_iget()
370 ip->i_flag = IREF; in ud_iget()
371 cv_init(&ip->i_wrcv, NULL, CV_DRIVER, NULL); in ud_iget()
376 rw_enter(&ip->i_contents, RW_WRITER); in ud_iget()
382 rw_exit(&ip->i_contents); in ud_iget()
391 rw_exit(&ip->i_contents); in ud_iget()
401 remque(ip); in ud_iget()
402 ip->i_forw = ip; in ud_iget()
403 ip->i_back = ip; in ud_iget()
404 insque(ip, ih); in ud_iget()
406 ip->i_dev = vfsp->vfs_dev; in ud_iget()
407 ip->i_udf = udf_vfsp; in ud_iget()
408 ip->i_diroff = 0; in ud_iget()
409 ip->i_devvp = ip->i_udf->udf_devvp; in ud_iget()
410 ip->i_icb_prn = prn; in ud_iget()
411 ip->i_icb_block = ploc; in ud_iget()
412 ip->i_icb_lbano = loc; in ud_iget()
413 ip->i_nextr = 0; in ud_iget()
414 ip->i_seq = 0; in ud_iget()
425 bp = ud_bread(ip->i_dev, in ud_iget()
426 ip->i_icb_lbano << udf_vfsp->udf_l2d_shift, in ud_iget()
436 ip->i_icb_block, 1, udf_vfsp->udf_lbsize) != 0)) { in ud_iget()
441 bp->b_un.b_addr, ip->i_icb_block) == 0) { in ud_iget()
448 ip->i_icb_prn = old_prn; in ud_iget()
449 ip->i_icb_block = old_block; in ud_iget()
450 ip->i_icb_lbano = old_lbano; in ud_iget()
455 bp = ud_bread(ip->i_dev, in ud_iget()
462 UD_FILE_ENTRY, ip->i_icb_block, 1, in ud_iget()
482 ip->i_icb_lbano = 0; in ud_iget()
490 ip->i_icb_prn = 0xffff; in ud_iget()
491 ip->i_icb_block = 0; in ud_iget()
499 remque(ip); in ud_iget()
500 ip->i_forw = ip; in ud_iget()
501 ip->i_back = ip; in ud_iget()
505 mutex_enter(&ip->i_tlock); in ud_iget()
507 ud_add_to_free_list(ip, UD_BEGIN); in ud_iget()
509 ip->i_flag = 0; in ud_iget()
510 mutex_exit(&ip->i_tlock); in ud_iget()
511 rw_exit(&ip->i_contents); in ud_iget()
522 old_prn = ip->i_icb_prn; in ud_iget()
523 old_block = ip->i_icb_block; in ud_iget()
524 old_lbano = ip->i_icb_lbano; in ud_iget()
539 ibp = ud_bread(ip->i_dev, in ud_iget()
540 (ip->i_icb_lbano + 1) << udf_vfsp->udf_l2d_shift, in ud_iget()
554 UD_INDIRECT_ENT, ip->i_icb_block + 1, in ud_iget()
559 ip->i_icb_prn = SWAP_16(lad->lad_ext_prn); in ud_iget()
560 ip->i_icb_block = SWAP_32(lad->lad_ext_loc); in ud_iget()
561 ip->i_icb_lbano = ud_xlate_to_daddr(udf_vfsp, in ud_iget()
562 ip->i_icb_prn, ip->i_icb_block, in ud_iget()
574 ip->i_icb_block + 1) != 0) { in ud_iget()
593 ip->i_uid = SWAP_32(fe->fe_uid); in ud_iget()
594 if (ip->i_uid == -1) { in ud_iget()
595 ip->i_uid = ud_default_uid; in ud_iget()
597 ip->i_gid = SWAP_32(fe->fe_gid); in ud_iget()
598 if (ip->i_gid == -1) { in ud_iget()
599 ip->i_gid = ud_default_gid; in ud_iget()
601 ip->i_perm = SWAP_32(fe->fe_perms) & 0xFFFF; in ud_iget()
603 ip->i_perm &= ~(IWRITE | (IWRITE >> 5) | (IWRITE >> 10)); in ud_iget()
606 ip->i_nlink = SWAP_16(fe->fe_lcount); in ud_iget()
607 ip->i_size = SWAP_64(fe->fe_info_len); in ud_iget()
608 ip->i_lbr = SWAP_64(fe->fe_lbr); in ud_iget()
610 ud_dtime2utime(&ip->i_atime, &fe->fe_acc_time); in ud_iget()
611 ud_dtime2utime(&ip->i_mtime, &fe->fe_mod_time); in ud_iget()
612 ud_dtime2utime(&ip->i_ctime, &fe->fe_attr_time); in ud_iget()
615 ip->i_uniqid = SWAP_64(fe->fe_uniq_id); in ud_iget()
625 UD_EXT_ATTR_HDR, ip->i_icb_block, 1, in ud_iget()
641 ea_len, ea_off, ip->i_icb_block); in ud_iget()
661 ip->i_icb_block); in ud_iget()
665 ip->i_major = GET_32(&ds->ds_major_id); in ud_iget()
666 ip->i_minor = GET_32(&ds->ds_minor_id); in ud_iget()
682 ip->i_icb_block); in ud_iget()
710 ip->i_nextr = 0; in ud_iget()
712 ip->i_maxent = SWAP_16(fe->fe_icb_tag.itag_max_ent); in ud_iget()
713 ip->i_astrat = SWAP_16(fe->fe_icb_tag.itag_strategy); in ud_iget()
715 ip->i_desc_type = icb_tag_flags & 0x7; in ud_iget()
718 ip->i_ext = NULL; in ud_iget()
719 ip->i_ext_count = ip->i_ext_used = 0; in ud_iget()
720 ip->i_con = 0; in ud_iget()
721 ip->i_con_count = ip->i_con_used = ip->i_con_read = 0; in ud_iget()
723 ip->i_data_off = 0xB0 + SWAP_32(fe->fe_len_ear); in ud_iget()
724 ip->i_max_emb = udf_vfsp->udf_lbsize - ip->i_data_off; in ud_iget()
725 if (ip->i_desc_type == ICB_FLAG_SHORT_AD) { in ud_iget()
729 ip->i_ext_used = 0; in ud_iget()
730 ip->i_ext_count = ndesc = in ud_iget()
732 ip->i_ext_count = in ud_iget()
733 ((ip->i_ext_count / EXT_PER_MALLOC) + 1) * EXT_PER_MALLOC; in ud_iget()
734 ip->i_ext = (struct icb_ext *)kmem_zalloc(ip->i_ext_count * in ud_iget()
736 ip->i_cur_max_ext = ip->i_max_emb / sizeof (struct short_ad); in ud_iget()
737 ip->i_cur_max_ext --; in ud_iget()
739 if ((ip->i_astrat != STRAT_TYPE4) && in ud_iget()
740 (ip->i_astrat != STRAT_TYPE4096)) { in ud_iget()
746 iext = ip->i_ext; in ud_iget()
753 if (ip->i_con == NULL) { in ud_iget()
754 ip->i_con_count = EXT_PER_MALLOC; in ud_iget()
755 ip->i_con_used = 0; in ud_iget()
756 ip->i_con_read = 0; in ud_iget()
757 ip->i_con = kmem_zalloc( in ud_iget()
758 ip->i_con_count * in ud_iget()
762 con = &ip->i_con[ip->i_con_used]; in ud_iget()
767 ip->i_con_used++; in ud_iget()
783 ip->i_ext_used++; in ud_iget()
787 } else if (ip->i_desc_type == ICB_FLAG_LONG_AD) { in ud_iget()
791 ip->i_ext_used = 0; in ud_iget()
792 ip->i_ext_count = ndesc = in ud_iget()
794 ip->i_ext_count = in ud_iget()
795 ((ip->i_ext_count / EXT_PER_MALLOC) + 1) * EXT_PER_MALLOC; in ud_iget()
796 ip->i_ext = (struct icb_ext *)kmem_zalloc(ip->i_ext_count * in ud_iget()
799 ip->i_cur_max_ext = ip->i_max_emb / sizeof (struct long_ad); in ud_iget()
800 ip->i_cur_max_ext --; in ud_iget()
802 if ((ip->i_astrat != STRAT_TYPE4) && in ud_iget()
803 (ip->i_astrat != STRAT_TYPE4096)) { in ud_iget()
809 iext = ip->i_ext; in ud_iget()
816 if (ip->i_con == NULL) { in ud_iget()
817 ip->i_con_count = EXT_PER_MALLOC; in ud_iget()
818 ip->i_con_used = 0; in ud_iget()
819 ip->i_con_read = 0; in ud_iget()
820 ip->i_con = kmem_zalloc( in ud_iget()
821 ip->i_con_count * in ud_iget()
825 con = &ip->i_con[ip->i_con_used]; in ud_iget()
830 ip->i_con_used++; in ud_iget()
845 ip->i_ext_used++; in ud_iget()
849 } else if (ip->i_desc_type == ICB_FLAG_ONE_AD) { in ud_iget()
858 ip->i_desc_type); in ud_iget()
864 ip->i_char = ISUID; in ud_iget()
866 ip->i_char = 0; in ud_iget()
869 ip->i_char |= ISGID; in ud_iget()
872 ip->i_char |= ISVTX; in ud_iget()
876 ip->i_type = VDIR; in ud_iget()
879 ip->i_type = VREG; in ud_iget()
882 ip->i_type = VBLK; in ud_iget()
885 ip->i_type = VCHR; in ud_iget()
888 ip->i_type = VFIFO; in ud_iget()
891 ip->i_type = VSOCK; in ud_iget()
894 ip->i_type = VLNK; in ud_iget()
897 ip->i_type = VNON; in ud_iget()
901 if (ip->i_type == VBLK || ip->i_type == VCHR) { in ud_iget()
902 ip->i_rdev = makedevice(ip->i_major, ip->i_minor); in ud_iget()
913 vp->v_type = ip->i_type; in ud_iget()
914 vp->v_rdev = ip->i_rdev; in ud_iget()
915 if (ip->i_udf->udf_root_blkno == loc) { in ud_iget()
922 *ipp = ip; in ud_iget()
923 rw_exit(&ip->i_contents); in ud_iget()
929 ud_iinactive(struct ud_inode *ip, struct cred *cr) in ud_iinactive() argument
943 rw_enter(&ip->i_contents, RW_WRITER); in ud_iinactive()
958 vp = ITOV(ip); in ud_iinactive()
965 if ((vp->v_count > 1) || ((ip->i_flag & IREF) == 0)) { in ud_iinactive()
968 rw_exit(&ip->i_contents); in ud_iinactive()
978 if (ip->i_udf == NULL) { in ud_iinactive()
979 addr = (caddr_t)ip->i_ext; in ud_iinactive()
980 size = sizeof (struct icb_ext) * ip->i_ext_count; in ud_iinactive()
981 ip->i_ext = 0; in ud_iinactive()
982 ip->i_ext_count = ip->i_ext_used = 0; in ud_iinactive()
983 addr1 = (caddr_t)ip->i_con; in ud_iinactive()
984 size1 = sizeof (struct icb_ext) * ip->i_con_count; in ud_iinactive()
985 ip->i_con = 0; in ud_iinactive()
986 ip->i_con_count = ip->i_con_used = ip->i_con_read = 0; in ud_iinactive()
987 rw_exit(&ip->i_contents); in ud_iinactive()
994 cv_destroy(&ip->i_wrcv); /* throttling */ in ud_iinactive()
995 rw_destroy(&ip->i_rwlock); in ud_iinactive()
996 rw_exit(&ip->i_contents); in ud_iinactive()
997 rw_destroy(&ip->i_contents); in ud_iinactive()
1001 kmem_free(ip, sizeof (struct ud_inode)); in ud_iinactive()
1005 if ((ip->i_udf->udf_flags & UDF_FL_RDONLY) == 0) { in ud_iinactive()
1006 if (ip->i_nlink <= 0) { in ud_iinactive()
1007 ip->i_marker3 = (uint32_t)0xDDDD0000; in ud_iinactive()
1008 ip->i_nlink = 1; /* prevent free-ing twice */ in ud_iinactive()
1009 (void) ud_itrunc(ip, 0, 0, cr); in ud_iinactive()
1010 type = ip->i_type; in ud_iinactive()
1011 ip->i_perm = 0; in ud_iinactive()
1012 ip->i_uid = 0; in ud_iinactive()
1013 ip->i_gid = 0; in ud_iinactive()
1014 ip->i_rdev = 0; /* Zero in core version of rdev */ in ud_iinactive()
1015 mutex_enter(&ip->i_tlock); in ud_iinactive()
1016 ip->i_flag |= IUPD|ICHG; in ud_iinactive()
1017 mutex_exit(&ip->i_tlock); in ud_iinactive()
1018 ud_ifree(ip, type); in ud_iinactive()
1019 ip->i_icb_prn = 0xFFFF; in ud_iinactive()
1025 (void) ud_syncip(ip, B_FREE | B_ASYNC, 0); in ud_iinactive()
1035 rw_exit(&ip->i_contents); in ud_iinactive()
1040 ud_iupdat(ip, 0); in ud_iinactive()
1070 mutex_enter(&ip->i_tlock); in ud_iinactive()
1072 ud_add_to_free_list(ip, UD_END); in ud_iinactive()
1074 ip->i_flag &= IMODTIME; in ud_iinactive()
1075 mutex_exit(&ip->i_tlock); in ud_iinactive()
1076 rw_exit(&ip->i_contents); in ud_iinactive()
1091 mutex_enter(&ip->i_tlock); in ud_iinactive()
1093 ud_add_to_free_list(ip, UD_BEGIN); in ud_iinactive()
1095 ip->i_flag &= IMODTIME; in ud_iinactive()
1096 mutex_exit(&ip->i_tlock); in ud_iinactive()
1097 rw_exit(&ip->i_contents); in ud_iinactive()
1122 remque(ip); in ud_iinactive()
1123 ip->i_forw = ip; in ud_iinactive()
1124 ip->i_back = ip; in ud_iinactive()
1129 if (ip->i_icb_prn != 0xFFFF) { in ud_iinactive()
1130 ud_iupdat(ip, 0); in ud_iinactive()
1132 addr = (caddr_t)ip->i_ext; in ud_iinactive()
1133 size = sizeof (struct icb_ext) * ip->i_ext_count; in ud_iinactive()
1134 ip->i_ext = 0; in ud_iinactive()
1135 ip->i_ext_count = ip->i_ext_used = 0; in ud_iinactive()
1136 addr1 = (caddr_t)ip->i_con; in ud_iinactive()
1137 size1 = sizeof (struct icb_ext) * ip->i_con_count; in ud_iinactive()
1138 ip->i_con = 0; in ud_iinactive()
1139 ip->i_con_count = ip->i_con_used = ip->i_con_read = 0; in ud_iinactive()
1140 cv_destroy(&ip->i_wrcv); /* throttling */ in ud_iinactive()
1141 rw_destroy(&ip->i_rwlock); in ud_iinactive()
1142 rw_exit(&ip->i_contents); in ud_iinactive()
1143 rw_destroy(&ip->i_contents); in ud_iinactive()
1146 ip->i_marker3 = (uint32_t)0xDDDDDDDD; in ud_iinactive()
1148 kmem_free(ip, sizeof (struct ud_inode)); in ud_iinactive()
1154 ud_iupdat(struct ud_inode *ip, int32_t waitfor) in ud_iupdat() argument
1163 ASSERT(RW_WRITE_HELD(&ip->i_contents)); in ud_iupdat()
1169 if (ip->i_udf == NULL) { in ud_iupdat()
1173 udf_vfsp = ip->i_udf; in ud_iupdat()
1174 flag = ip->i_flag; /* Atomic read */ in ud_iupdat()
1177 ip->i_flag &= ~(IUPD|IACC|ICHG|IMOD|IMODACC|IATTCHG); in ud_iupdat()
1181 bp = ud_bread(ip->i_dev, in ud_iupdat()
1182 ip->i_icb_lbano << udf_vfsp->udf_l2d_shift, in ud_iupdat()
1183 ip->i_udf->udf_lbsize); in ud_iupdat()
1190 ip->i_icb_block, in ud_iupdat()
1191 1, ip->i_udf->udf_lbsize) != 0) { in ud_iupdat()
1196 mutex_enter(&ip->i_tlock); in ud_iupdat()
1197 if (ip->i_flag & (IUPD|IACC|ICHG)) { in ud_iupdat()
1198 IMARK(ip); in ud_iupdat()
1200 ip->i_flag &= ~(IUPD|IACC|ICHG|IMOD|IMODACC); in ud_iupdat()
1201 mutex_exit(&ip->i_tlock); in ud_iupdat()
1203 fe->fe_uid = SWAP_32(ip->i_uid); in ud_iupdat()
1204 fe->fe_gid = SWAP_32(ip->i_gid); in ud_iupdat()
1206 fe->fe_perms = SWAP_32(ip->i_perm); in ud_iupdat()
1208 fe->fe_lcount = SWAP_16(ip->i_nlink); in ud_iupdat()
1209 fe->fe_info_len = SWAP_64(ip->i_size); in ud_iupdat()
1210 fe->fe_lbr = SWAP_64(ip->i_lbr); in ud_iupdat()
1212 ud_utime2dtime(&ip->i_atime, &fe->fe_acc_time); in ud_iupdat()
1213 ud_utime2dtime(&ip->i_mtime, &fe->fe_mod_time); in ud_iupdat()
1214 ud_utime2dtime(&ip->i_ctime, &fe->fe_attr_time); in ud_iupdat()
1216 if (ip->i_char & ISUID) { in ud_iupdat()
1221 if (ip->i_char & ISGID) { in ud_iupdat()
1224 if (ip->i_char & ISVTX) { in ud_iupdat()
1227 tag_flags |= ip->i_desc_type; in ud_iupdat()
1237 fe->fe_icb_tag.itag_strategy = SWAP_16(ip->i_astrat); in ud_iupdat()
1244 if (ip->i_desc_type == ICB_FLAG_ONE_AD) { in ud_iupdat()
1245 crc_len += ip->i_size; in ud_iupdat()
1246 fe->fe_len_adesc = SWAP_32(((uint32_t)ip->i_size)); in ud_iupdat()
1247 } else if ((ip->i_size != 0) && (ip->i_ext != NULL) && in ud_iupdat()
1248 (ip->i_ext_used != 0)) { in ud_iupdat()
1250 if ((error = ud_read_icb_till_off(ip, in ud_iupdat()
1251 ip->i_size)) == 0) { in ud_iupdat()
1252 if (ip->i_astrat == STRAT_TYPE4) { in ud_iupdat()
1253 error = ud_updat_ext4(ip, fe); in ud_iupdat()
1254 } else if (ip->i_astrat == STRAT_TYPE4096) { in ud_iupdat()
1255 error = ud_updat_ext4096(ip, fe); in ud_iupdat()
1270 ip->i_udf->udf_lbsize - crc_len); in ud_iupdat()
1272 ud_make_tag(ip->i_udf, &fe->fe_tag, in ud_iupdat()
1273 UD_FILE_ENTRY, ip->i_icb_block, crc_len); in ud_iupdat()
1283 ip->i_flag &= ~(IBDWRITE); in ud_iupdat()
1295 ip->i_flag |= (IBDWRITE); in ud_iupdat()
1304 blkflush(ip->i_dev, in ud_iupdat()
1305 (daddr_t)fsbtodb(udf_vfsp, ip->i_icb_lbano)); in ud_iupdat()
1306 ip->i_flag &= ~(IBDWRITE); in ud_iupdat()
1312 ud_updat_ext4(struct ud_inode *ip, struct file_entry *fe) in ud_updat_ext4() argument
1323 ASSERT(ip); in ud_updat_ext4()
1325 ASSERT((ip->i_desc_type == ICB_FLAG_SHORT_AD) || in ud_updat_ext4()
1326 (ip->i_desc_type == ICB_FLAG_LONG_AD)); in ud_updat_ext4()
1328 if (ip->i_desc_type == ICB_FLAG_SHORT_AD) { in ud_updat_ext4()
1332 } else if (ip->i_desc_type == ICB_FLAG_LONG_AD) { in ud_updat_ext4()
1341 ndent = ip->i_max_emb / elen; in ud_updat_ext4()
1343 if (ip->i_ext_used < ndent) { in ud_updat_ext4()
1345 if (ip->i_desc_type == ICB_FLAG_SHORT_AD) { in ud_updat_ext4()
1346 ud_make_sad(ip->i_ext, sad, ip->i_ext_used); in ud_updat_ext4()
1348 ud_make_lad(ip->i_ext, lad, ip->i_ext_used); in ud_updat_ext4()
1350 fe->fe_len_adesc = SWAP_32(ip->i_ext_used * elen); in ud_updat_ext4()
1356 while (index < ip->i_ext_used) { in ud_updat_ext4()
1370 icon = &ip->i_con[con_index]; in ud_updat_ext4()
1375 icon = &ip->i_con[con_index]; in ud_updat_ext4()
1377 bno = ud_xlate_to_daddr(ip->i_udf, in ud_updat_ext4()
1379 icon->ib_count >> ip->i_udf->udf_l2d_shift, in ud_updat_ext4()
1381 bp = ud_bread(ip->i_dev, in ud_updat_ext4()
1382 bno << ip->i_udf->udf_l2d_shift, in ud_updat_ext4()
1383 ip->i_udf->udf_lbsize); in ud_updat_ext4()
1395 if (count > (ip->i_ext_used - index)) { in ud_updat_ext4()
1396 count = ip->i_ext_used - index; in ud_updat_ext4()
1401 if (con_index >= ip->i_con_used) { in ud_updat_ext4()
1404 icon = &ip->i_con[con_index]; in ud_updat_ext4()
1414 iext = &ip->i_ext[index]; in ud_updat_ext4()
1415 if (ip->i_desc_type == ICB_FLAG_SHORT_AD) { in ud_updat_ext4()
1444 oicon = &ip->i_con[con_index - 1]; in ud_updat_ext4()
1453 SWAP_32(ip->i_icb_block); in ud_updat_ext4()
1459 ud_make_tag(ip->i_udf, &aed->aed_tag, in ud_updat_ext4()
1474 if (con_index != ip->i_con_used) { in ud_updat_ext4()
1478 lbmask = ip->i_udf->udf_lbmask; in ud_updat_ext4()
1479 l2b = ip->i_udf->udf_l2b_shift; in ud_updat_ext4()
1483 for (; con_index < ip->i_con_used; con_index++) { in ud_updat_ext4()
1484 icon = &ip->i_con[con_index]; in ud_updat_ext4()
1486 ud_free_space(ip->i_udf->udf_vfs, icon->ib_prn, in ud_updat_ext4()
1489 ip->i_cur_max_ext -= (count / elen) - 1; in ud_updat_ext4()
1491 ip->i_con_used = temp; in ud_updat_ext4()
1498 ud_updat_ext4096(struct ud_inode *ip, struct file_entry *fe) in ud_updat_ext4096() argument
1684 ud_trunc_ext4(struct ud_inode *ip, u_offset_t length) in ud_trunc_ext4() argument
1695 ASSERT((ip->i_desc_type == ICB_FLAG_SHORT_AD) || in ud_trunc_ext4()
1696 (ip->i_desc_type == ICB_FLAG_LONG_AD)); in ud_trunc_ext4()
1698 if (ip->i_ext_used == 0) { in ud_trunc_ext4()
1702 ext_used = ip->i_ext_used; in ud_trunc_ext4()
1704 lbmask = ip->i_udf->udf_lbmask; in ud_trunc_ext4()
1705 l2b = ip->i_udf->udf_l2b_shift; in ud_trunc_ext4()
1707 ASSERT(ip->i_ext); in ud_trunc_ext4()
1709 ip->i_lbr = 0; in ud_trunc_ext4()
1711 iext = &ip->i_ext[index]; in ud_trunc_ext4()
1731 ip->i_ext_used = index + 1; in ud_trunc_ext4()
1735 ip->i_lbr += iext->ib_count >> l2b; in ud_trunc_ext4()
1738 if (ip->i_ext_used != index) { in ud_trunc_ext4()
1740 ip->i_lbr += in ud_trunc_ext4()
1745 ip->i_size = length; in ud_trunc_ext4()
1746 mutex_enter(&ip->i_tlock); in ud_trunc_ext4()
1747 ip->i_flag |= ICHG|IUPD; in ud_trunc_ext4()
1748 mutex_exit(&ip->i_tlock); in ud_trunc_ext4()
1749 ud_iupdat(ip, 1); in ud_trunc_ext4()
1759 ud_free_space(ip->i_udf->udf_vfs, text.ib_prn, in ud_trunc_ext4()
1763 for (index = ip->i_ext_used; index < ext_used; index++) { in ud_trunc_ext4()
1764 iext = &ip->i_ext[index]; in ud_trunc_ext4()
1767 ud_free_space(ip->i_udf->udf_vfs, iext->ib_prn, in ud_trunc_ext4()
1777 if (ip->i_con) { in ud_trunc_ext4()
1779 ASSERT(ip->i_con_count >= ip->i_con_used); in ud_trunc_ext4()
1785 if (ip->i_desc_type == ICB_FLAG_SHORT_AD) { in ud_trunc_ext4()
1787 } else if (ip->i_desc_type == ICB_FLAG_LONG_AD) { in ud_trunc_ext4()
1790 ndent = ip->i_max_emb / elen; in ud_trunc_ext4()
1791 if (ip->i_ext_used > ndent) { in ud_trunc_ext4()
1792 ecount = ip->i_ext_used - ndent; in ud_trunc_ext4()
1797 for (index = 0; index < ip->i_con_used; index++) { in ud_trunc_ext4()
1798 icon = &ip->i_con[index]; in ud_trunc_ext4()
1812 ud_free_space(ip->i_udf->udf_vfs, in ud_trunc_ext4()
1815 ip->i_cur_max_ext -= nient; in ud_trunc_ext4()
1824 ip->i_con_used -= con_freed; in ud_trunc_ext4()
1825 if (ip->i_con_read > ip->i_con_used) { in ud_trunc_ext4()
1826 ip->i_con_read = ip->i_con_used; in ud_trunc_ext4()
1832 ud_trunc_ext4096(struct ud_inode *ip, u_offset_t length) in ud_trunc_ext4096() argument
1838 ud_trunc_ext4(ip, length); in ud_trunc_ext4096()
1860 struct ud_inode *ip, *next; in ud_iflush() local
1873 ip = next; in ud_iflush()
1874 next = ip->i_forw; in ud_iflush()
1875 if (ip->i_dev != dev) { in ud_iflush()
1878 vp = ITOV(ip); in ud_iflush()
1888 if (ip->i_flag & IREF) { in ud_iflush()
1898 rw_enter(&ip->i_contents, RW_WRITER); in ud_iflush()
1899 remque(ip); in ud_iflush()
1900 ip->i_forw = ip; in ud_iflush()
1901 ip->i_back = ip; in ud_iflush()
1911 (void) ud_syncip(ip, B_INVAL, I_SYNC); in ud_iflush()
1912 rw_exit(&ip->i_contents); in ud_iflush()
1930 ud_iaccess(struct ud_inode *ip, int32_t mode, struct cred *cr, int dolock) in ud_iaccess() argument
1936 rw_enter(&ip->i_contents, RW_READER); in ud_iaccess()
1937 ASSERT(RW_LOCK_HELD(&ip->i_contents)); in ud_iaccess()
1946 if (ip->i_udf->udf_flags & UDF_FL_RDONLY) { in ud_iaccess()
1947 if ((ip->i_type != VCHR) && in ud_iaccess()
1948 (ip->i_type != VBLK) && in ud_iaccess()
1949 (ip->i_type != VFIFO)) { in ud_iaccess()
1963 if (crgetuid(cr) != ip->i_uid) { in ud_iaccess()
1965 if (!groupmember((uid_t)ip->i_gid, cr)) in ud_iaccess()
1969 ret = secpolicy_vnode_access2(cr, ITOV(ip), ip->i_uid, in ud_iaccess()
1970 UD2VA_PERM(ip->i_perm << shift), UD2VA_PERM(mode)); in ud_iaccess()
1974 rw_exit(&ip->i_contents); in ud_iaccess()
1979 ud_imark(struct ud_inode *ip) in ud_imark() argument
1985 if (ip->i_flag & IACC) { in ud_imark()
1986 ip->i_atime.tv_sec = now.tv_sec; in ud_imark()
1987 ip->i_atime.tv_nsec = now.tv_nsec; in ud_imark()
1989 if (ip->i_flag & IUPD) { in ud_imark()
1990 ip->i_mtime.tv_sec = now.tv_sec; in ud_imark()
1991 ip->i_mtime.tv_nsec = now.tv_nsec; in ud_imark()
1992 ip->i_flag |= IMODTIME; in ud_imark()
1994 if (ip->i_flag & ICHG) { in ud_imark()
1995 ip->i_diroff = 0; in ud_imark()
1996 ip->i_ctime.tv_sec = now.tv_sec; in ud_imark()
1997 ip->i_ctime.tv_nsec = now.tv_nsec; in ud_imark()
2003 ud_itimes_nolock(struct ud_inode *ip) in ud_itimes_nolock() argument
2007 if (ip->i_flag & (IUPD|IACC|ICHG)) { in ud_itimes_nolock()
2008 if (ip->i_flag & ICHG) { in ud_itimes_nolock()
2009 ip->i_flag |= IMOD; in ud_itimes_nolock()
2011 ip->i_flag |= IMODACC; in ud_itimes_nolock()
2013 ud_imark(ip); in ud_itimes_nolock()
2014 ip->i_flag &= ~(IACC|IUPD|ICHG); in ud_itimes_nolock()
2019 ud_delcache(struct ud_inode *ip) in ud_delcache() argument
2024 remque(ip); in ud_delcache()
2025 ip->i_forw = ip; in ud_delcache()
2026 ip->i_back = ip; in ud_delcache()
2031 ud_idrop(struct ud_inode *ip) in ud_idrop() argument
2033 struct vnode *vp = ITOV(ip); in ud_idrop()
2035 ASSERT(RW_WRITE_HELD(&ip->i_contents)); in ud_idrop()
2051 mutex_enter(&ip->i_tlock); in ud_idrop()
2053 if (!vn_has_cached_data(vp) || ip->i_perm == 0) { in ud_idrop()
2054 ud_add_to_free_list(ip, UD_BEGIN); in ud_idrop()
2059 ud_add_to_free_list(ip, UD_END); in ud_idrop()
2062 ip->i_flag &= IMODTIME; in ud_idrop()
2063 mutex_exit(&ip->i_tlock); in ud_idrop()
2067 ud_add_to_free_list(struct ud_inode *ip, uint32_t at) in ud_add_to_free_list() argument
2069 ASSERT(ip); in ud_add_to_free_list()
2079 if (iq == ip) { in ud_add_to_free_list()
2080 cmn_err(CE_WARN, "Duplicate %p\n", (void *)ip); in ud_add_to_free_list()
2087 ip->i_freef = NULL; in ud_add_to_free_list()
2088 ip->i_freeb = NULL; in ud_add_to_free_list()
2093 udf_ifreeh = ip; in ud_add_to_free_list()
2094 udf_ifreet = ip; in ud_add_to_free_list()
2100 ip->i_freef = udf_ifreeh; in ud_add_to_free_list()
2101 udf_ifreeh->i_freeb = ip; in ud_add_to_free_list()
2102 udf_ifreeh = ip; in ud_add_to_free_list()
2107 ip->i_freeb = udf_ifreet; in ud_add_to_free_list()
2108 udf_ifreet->i_freef = ip; in ud_add_to_free_list()
2109 udf_ifreet = ip; in ud_add_to_free_list()
2115 ud_remove_from_free_list(struct ud_inode *ip, uint32_t at) in ud_remove_from_free_list() argument
2117 ASSERT(ip); in ud_remove_from_free_list()
2127 if (iq == ip) { in ud_remove_from_free_list()
2134 (void *)ip, found); in ud_remove_from_free_list()
2139 if ((ip->i_freef == NULL) && (ip->i_freeb == NULL)) { in ud_remove_from_free_list()
2140 if (ip != udf_ifreeh) { in ud_remove_from_free_list()
2145 if ((at == UD_BEGIN) || (ip == udf_ifreeh)) { in ud_remove_from_free_list()
2146 udf_ifreeh = ip->i_freef; in ud_remove_from_free_list()
2147 if (ip->i_freef == NULL) { in ud_remove_from_free_list()
2153 ip->i_freeb->i_freef = ip->i_freef; in ud_remove_from_free_list()
2154 if (ip->i_freef) { in ud_remove_from_free_list()
2155 ip->i_freef->i_freeb = ip->i_freeb; in ud_remove_from_free_list()
2157 udf_ifreet = ip->i_freeb; in ud_remove_from_free_list()
2160 ip->i_freef = NULL; in ud_remove_from_free_list()
2161 ip->i_freeb = NULL; in ud_remove_from_free_list()