Home | History | Annotate | Download | only in udf

Lines Matching defs:udf_node

71 #define VTOI(vnode) ((struct udf_node *) (vnode)->v_data)
800 udf_lock_node(struct udf_node *udf_node, int flag, char const *fname, const int lineno)
804 mutex_enter(&udf_node->node_mutex);
806 while (udf_node->i_flags & IN_LOCKED) {
807 ret = cv_timedwait(&udf_node->node_lock, &udf_node->node_mutex, hz/8);
810 DPRINTF(LOCKING, ( "udf_lock_node: udf_node %p would block "
812 udf_node, fname, lineno,
813 udf_node->lock_fname, udf_node->lock_lineno));
817 udf_node->i_flags |= IN_LOCKED | flag;
819 udf_node->lock_fname = fname;
820 udf_node->lock_lineno = lineno;
822 mutex_exit(&udf_node->node_mutex);
827 udf_unlock_node(struct udf_node *udf_node, int flag)
829 mutex_enter(&udf_node->node_mutex);
830 udf_node->i_flags &= ~(IN_LOCKED | flag);
831 cv_broadcast(&udf_node->node_lock);
832 mutex_exit(&udf_node->node_mutex);
955 udf_get_c_type(struct udf_node *udf_node)
959 isdir = (udf_node->vnode->v_type == VDIR);
962 if (udf_node->ump)
963 if (udf_node == udf_node->ump->metadatabitmap_node)
1751 struct udf_node *bitmap_node;
1825 struct udf_node *bitmap_node;
2206 udf_adjust_filecount(struct udf_node *udf_node, int sign)
2208 struct udf_mount *ump = udf_node->ump;
2213 if (udf_node->fe) {
2214 udf_file_type = udf_node->fe->icbtag.file_type;
2216 udf_file_type = udf_node->efe->icbtag.file_type;
2363 udf_extattr_search_intern(struct udf_node *node,
2591 udf_update_lvid_from_vat_extattr(struct udf_node *vat_node)
2658 udf_update_vat_extattr_from_lvid(struct udf_node *vat_node)
2719 udf_vat_read(struct udf_node *vat_node, uint8_t *blob, int size, uint32_t offset)
2731 udf_vat_write(struct udf_node *vat_node, uint8_t *blob, int size, uint32_t offset)
2763 struct udf_node *vat_node = ump->vat_node;
2862 struct udf_node *vat_node = ump->vat_node;
2902 udf_check_for_vat(struct udf_node *vat_node)
3077 struct udf_node *vat_node, *accepted_vat_node;
3344 struct udf_node *rootdir_node, *streamdir_node;
3497 const struct udf_node *a_node = a;
3498 const struct udf_node *b_node = b;
3507 const struct udf_node *a_node = a;
3517 .rbto_node_offset = offsetof(struct udf_node, rbnode),
4029 struct udf_node *udf_node = VTOI(vp);
4030 struct udf_mount *ump = udf_node->ump;
4043 lb_size = udf_rw32(udf_node->ump->logical_vol->lb_size);
4048 udf_c_type = udf_get_c_type(udf_node);
4062 error = udf_reserve_space(ump, udf_node, udf_c_type,
4078 struct udf_node *udf_node = VTOI(vp);
4092 udf_node->i_flags |= mask;
4365 udf_getaccessmode(struct udf_node *udf_node)
4367 struct file_entry *fe = udf_node->fe;
4368 struct extfile_entry *efe = udf_node->efe;
4373 UDF_LOCK_NODE(udf_node, 0);
4379 assert(udf_node->efe);
4396 UDF_UNLOCK_NODE(udf_node, 0);
4403 udf_setaccessmode(struct udf_node *udf_node, mode_t mode)
4405 struct file_entry *fe = udf_node->fe;
4406 struct extfile_entry *efe = udf_node->efe;
4410 UDF_LOCK_NODE(udf_node, 0);
4436 UDF_UNLOCK_NODE(udf_node, 0);
4441 udf_getownership(struct udf_node *udf_node, uid_t *uidp, gid_t *gidp)
4443 struct udf_mount *ump = udf_node->ump;
4444 struct file_entry *fe = udf_node->fe;
4445 struct extfile_entry *efe = udf_node->efe;
4449 UDF_LOCK_NODE(udf_node, 0);
4454 assert(udf_node->efe);
4468 UDF_UNLOCK_NODE(udf_node, 0);
4473 udf_setownership(struct udf_node *udf_node, uid_t uid, gid_t gid)
4475 struct udf_mount *ump = udf_node->ump;
4476 struct file_entry *fe = udf_node->fe;
4477 struct extfile_entry *efe = udf_node->efe;
4481 UDF_LOCK_NODE(udf_node, 0);
4499 UDF_UNLOCK_NODE(udf_node, 0);
4507 udf_dirhash_fill(struct udf_node *dir_node)
4590 struct udf_node *dir_node = VTOI(vp);
4821 udf_dir_detach(struct udf_mount *ump, struct udf_node *dir_node,
4822 struct udf_node *udf_node, struct componentname *cnp)
4915 if (udf_node->fe) {
4916 refcnt = udf_rw16(udf_node->fe->link_cnt);
4918 KASSERT(udf_node->efe);
4919 refcnt = udf_rw16(udf_node->efe->link_cnt);
4924 if (udf_node->fe) {
4925 udf_node->fe->link_cnt = udf_rw16(refcnt);
4927 udf_node->efe->link_cnt = udf_rw16(refcnt);
4932 udf_node->i_flags |= IN_DELETED;
4951 udf_node->i_flags |= IN_MODIFIED;
4956 udf_adjust_filecount(udf_node, -1);
4975 udf_dir_update_rootentry(struct udf_mount *ump, struct udf_node *dir_node,
4976 struct udf_node *new_parent_node)
5097 udf_dir_attach(struct udf_mount *ump, struct udf_node *dir_node,
5098 struct udf_node *udf_node, struct vattr *vap, struct componentname *cnp)
5137 if (udf_node->fe) {
5138 unique_id = udf_rw64(udf_node->fe->unique_id);
5139 refcnt = udf_rw16(udf_node->fe->link_cnt);
5141 unique_id = udf_rw64(udf_node->efe->unique_id);
5142 refcnt = udf_rw16(udf_node->efe->link_cnt);
5147 udf_adjust_filecount(udf_node, 1);
5253 fid->icb = udf_node->loc;
5283 if (udf_node->fe) {
5284 refcnt = udf_rw16(udf_node->fe->link_cnt);
5285 udf_node->fe->link_cnt = udf_rw16(refcnt+1);
5287 KASSERT(udf_node->efe);
5288 refcnt = udf_rw16(udf_node->efe->link_cnt);
5289 udf_node->efe->link_cnt = udf_rw16(refcnt+1);
5293 if (udf_node->i_flags & IN_DELETED) {
5295 udf_node->i_flags &= ~IN_DELETED;
5321 udf_node->i_flags |= IN_CHANGE | IN_MODIFY; /* | IN_CREATE? */
5322 /* VN_KNOTE(udf_node, ...) */
5323 udf_update(udf_node->vnode, NULL, NULL, NULL, 0);
5357 struct udf_node *udf_node;
5366 udf_node = NULL;
5382 /* build udf_node (do initialise!) */
5383 udf_node = pool_get(&udf_node_pool, PR_WAITOK);
5384 memset(udf_node, 0, sizeof(struct udf_node));
5388 vp->v_data = udf_node;
5391 udf_node->ump = ump;
5392 udf_node->vnode = vp;
5393 udf_node->loc = node_icb_loc;
5394 udf_node->lockf = 0;
5395 mutex_init(&udf_node->node_mutex, MUTEX_DEFAULT, IPL_NONE);
5396 cv_init(&udf_node->node_lock, "udf_nlk");
5398 udf_node->outstanding_bufs = 0;
5399 udf_node->outstanding_nodedscr = 0;
5400 udf_node->uncommitted_lbs = 0;
5404 if (memcmp(&udf_node->loc, &ump->fileset_desc->rootdir_icb,
5460 if (udf_node->fe)
5462 udf_node->fe);
5463 udf_node->fe = &dscr->fe;
5464 strat = udf_rw16(udf_node->fe->icbtag.strat_type);
5465 udf_file_type = udf_node->fe->icbtag.file_type;
5466 file_size = udf_rw64(udf_node->fe->inf_len);
5468 if (udf_node->efe)
5470 udf_node->efe);
5471 udf_node->efe = &dscr->efe;
5472 strat = udf_rw16(udf_node->efe->icbtag.strat_type);
5473 udf_file_type = udf_node->efe->icbtag.file_type;
5474 file_size = udf_rw64(udf_node->efe->inf_len);
5509 /* recycle udf_node */
5510 udf_dispose_node(udf_node);
5517 assert((udf_node->fe) || (udf_node->efe));
5529 udf_node->write_loc = icb_loc;
5530 udf_node->needs_indirect = needs_indirect;
5537 UDF_LOCK_NODE(udf_node, 0);
5538 udf_node->num_extensions = 0;
5543 udf_get_adslot(udf_node, slot, &icb_loc, &eof);
5558 if (udf_node->num_extensions >= UDF_MAX_ALLOC_EXTENTS) {
5561 "udf_node\n"));
5569 "extension size in udf_node\n"));
5591 udf_node->ext[udf_node->num_extensions] = &dscr->aee;
5592 udf_node->ext_loc[udf_node->num_extensions] = icb_loc;
5594 udf_node->num_extensions++;
5597 UDF_UNLOCK_NODE(udf_node, 0);
5601 /* recycle udf_node */
5602 udf_dispose_node(udf_node);
5658 *new_key = &udf_node->loc.loc;
5665 struct udf_node **udf_noderes, int lktype)
5688 udf_writeout_node(struct udf_node *udf_node, int waitfor)
5696 KASSERT(udf_node->outstanding_bufs == 0);
5697 KASSERT(udf_node->outstanding_nodedscr == 0);
5699 KASSERT(LIST_EMPTY(&udf_node->vnode->v_dirtyblkhd));
5701 if (udf_node->i_flags & IN_DELETED) {
5703 udf_cleanup_reservation(udf_node);
5708 UDF_LOCK_NODE(udf_node, 0);
5711 udf_cleanup_reservation(udf_node);
5714 udf_node->outstanding_nodedscr = 1;
5717 udf_node->i_flags &= ~(IN_MODIFIED | IN_ACCESSED);
5720 if (udf_node->i_flags & IN_NODE_REBUILD) {
5722 udf_node->outstanding_nodedscr += udf_node->num_extensions;
5723 for (extnr = 0; extnr < udf_node->num_extensions; extnr++) {
5724 loc = &udf_node->ext_loc[extnr];
5725 dscr = (union dscrptr *) udf_node->ext[extnr];
5726 error = udf_write_logvol_dscr(udf_node, dscr, loc, 0);
5731 udf_node->i_flags &= ~(IN_NODE_REBUILD);
5734 if (udf_node->fe) {
5735 KASSERT(udf_node->efe == NULL);
5736 dscr = (union dscrptr *) udf_node->fe;
5738 KASSERT(udf_node->efe);
5739 KASSERT(udf_node->fe == NULL);
5740 dscr = (union dscrptr *) udf_node->efe;
5744 loc = &udf_node->write_loc;
5745 error = udf_write_logvol_dscr(udf_node, dscr, loc, waitfor);
5753 udf_dispose_node(struct udf_node *udf_node)
5758 DPRINTF(NODE, ("udf_dispose_node called on node %p\n", udf_node));
5759 if (!udf_node) {
5764 vp = udf_node->vnode;
5767 panic("disposing UDF node with pending I/O's, udf_node = %p, "
5768 "v_numoutput = %d", udf_node, vp->v_numoutput);
5771 udf_cleanup_reservation(udf_node);
5776 dirhash_purge(&udf_node->dir_hash);
5779 mutex_destroy(&udf_node->node_mutex);
5780 cv_destroy(&udf_node->node_lock);
5782 /* dissociate our udf_node from the vnode */
5783 genfs_node_destroy(udf_node->vnode);
5789 for (extnr = 0; extnr < udf_node->num_extensions; extnr++) {
5790 udf_free_logvol_dscr(udf_node->ump, &udf_node->ext_loc[extnr],
5791 udf_node->ext[extnr]);
5792 udf_node->ext[extnr] = (void *) 0xdeadcccc;
5795 if (udf_node->fe)
5796 udf_free_logvol_dscr(udf_node->ump, &udf_node->loc,
5797 udf_node->fe);
5798 if (udf_node->efe)
5799 udf_free_logvol_dscr(udf_node->ump, &udf_node->loc,
5800 udf_node->efe);
5802 udf_node->fe = (void *) 0xdeadaaaa;
5803 udf_node->efe = (void *) 0xdeadbbbb;
5804 udf_node->ump = (void *) 0xdeadbeef;
5805 pool_put(&udf_node_pool, udf_node);
5823 struct udf_node *dir_node = VTOI(dvp);
5824 struct udf_node *udf_node;
5900 /* build udf_node (do initialise!) */
5901 udf_node = pool_get(&udf_node_pool, PR_WAITOK);
5902 memset(udf_node, 0, sizeof(struct udf_node));
5906 udf_node->ump = ump;
5907 udf_node->vnode = vp;
5908 vp->v_data = udf_node;
5909 udf_node->loc = node_icb_loc;
5910 udf_node->write_loc = node_icb_loc;
5911 udf_node->lockf = 0;
5912 mutex_init(&udf_node->node_mutex, MUTEX_DEFAULT, IPL_NONE);
5913 cv_init(&udf_node->node_lock, "udf_nlk");
5914 udf_node->outstanding_bufs = 0;
5915 udf_node->outstanding_nodedscr = 0;
5916 udf_node->uncommitted_lbs = 0;
5934 udf_create_logvol_dscr(ump, udf_node, &node_icb_loc, &dscr);
5938 udf_node->fe = &dscr->fe;
5939 fid_size = udf_create_new_fe(ump, udf_node->fe,
5940 udf_file_type, &udf_node->loc,
5944 udf_node->efe = &dscr->efe;
5945 fid_size = udf_create_new_efe(ump, udf_node->efe,
5946 udf_file_type, &udf_node->loc,
5949 KASSERT(dscr->tag.tag_loc == udf_node->loc.loc.lb_num);
5956 udf_setaccessmode(udf_node, vap->va_mode);
5961 udf_setownership(udf_node, uid, gid);
5963 *key_len = sizeof(udf_node->loc.loc);
5964 *new_key = &udf_node->loc.loc;
5974 struct udf_node *udf_node, *dir_node = VTOI(dvp);
5982 udf_node = VTOI(*vpp);
5983 error = udf_dir_attach(ump, dir_node, udf_node, vap, cnp);
5985 struct long_ad *node_icb_loc = &udf_node->loc;
5992 /* recycle udf_node */
5993 udf_dispose_node(udf_node);
6001 udf_adjust_filecount(udf_node, 1);
6010 udf_free_descriptor_space(struct udf_node *udf_node, struct long_ad *loc, void *mem)
6012 struct udf_mount *ump = udf_node->ump;
6032 udf_delete_node(struct udf_node *udf_node)
6038 if (udf_node->i_flags & IN_NO_DELETE)
6042 lvint = udf_rw32(udf_node->ump->logvol_integrity->integrity_type);
6047 (void) udf_resize_node(udf_node, 0, &dummy);
6050 udf_node->i_flags &= ~(IN_MODIFIED | IN_ACCESSED | IN_ACCESS |
6054 udf_adjust_filecount(udf_node, -1);
6060 loc = &udf_node->loc;
6062 dscr = udf_node->fe;
6063 udf_free_descriptor_space(udf_node, loc, dscr);
6064 dscr = udf_node->efe;
6065 udf_free_descriptor_space(udf_node, loc, dscr);
6068 dscr = udf_node->ext[extnr];
6069 loc = &udf_node->ext_loc[extnr];
6070 udf_free_descriptor_space(udf_node, loc, dscr);
6078 udf_resize_node(struct udf_node *udf_node, uint64_t new_size, int *extended)
6080 struct file_entry *fe = udf_node->fe;
6081 struct extfile_entry *efe = udf_node->efe;
6088 assert(udf_node->efe);
6101 error = udf_grow_node(udf_node, new_size);
6103 error = udf_shrink_node(udf_node, new_size);
6113 udf_itimes(struct udf_node *udf_node, struct timespec *acc,
6128 if (!udf_node)
6131 fe = udf_node->fe;
6132 efe = udf_node->efe;
6134 if (!(udf_node->i_flags & (IN_ACCESS|IN_CHANGE|IN_UPDATE|IN_MODIFY)))
6148 error = udf_extattr_search_intern(udf_node,
6158 assert(udf_node->efe);
6168 if (udf_node->i_flags & IN_ACCESS) {
6175 if (udf_node->i_flags & (IN_UPDATE | IN_MODIFY)) {
6181 udf_timestamp_to_timespec(udf_node->ump, ctime, &cur_birth);
6196 if (udf_node->i_flags & (IN_CHANGE | IN_MODIFY))
6200 if (udf_node->i_flags & (IN_ACCESS | IN_MODIFY))
6201 udf_node->i_flags |= IN_ACCESSED;
6202 if (udf_node->i_flags & (IN_UPDATE | IN_CHANGE))
6203 udf_node->i_flags |= IN_MODIFIED;
6206 udf_node->i_flags &= ~(IN_ACCESS | IN_CHANGE | IN_UPDATE | IN_MODIFY);
6216 struct udf_node *udf_node = VTOI(vp);
6217 struct udf_mount *ump = udf_node->ump;
6226 snprintb(bits, sizeof(bits), IN_FLAGBITS, udf_node->i_flags);
6232 udf_itimes(udf_node, acc, mod, birth);
6235 if (udf_node->fe) {
6236 dscrptr = (union dscrptr *) udf_node->fe;
6237 impl_id = &udf_node->fe->imp_id;
6239 dscrptr = (union dscrptr *) udf_node->efe;
6240 impl_id = &udf_node->efe->imp_id;
6256 flags = udf_node->i_flags & (IN_MODIFIED | IN_ACCESSED);
6258 flags = udf_node->i_flags & IN_MODIFIED;
6290 struct udf_node *dir_node = VTOI(vp);
6415 struct udf_node *udf_node, *n_udf_node;
6422 udf_node = RB_TREE_MIN(&ump->udf_node_tree);
6423 for (;udf_node; udf_node = n_udf_node) {
6426 vp = udf_node->vnode;
6429 udf_node, RB_DIR_RIGHT);
6445 vdirty += udf_node->outstanding_bufs +
6446 udf_node->outstanding_nodedscr;
6454 vdirty += udf_node->outstanding_bufs +
6455 udf_node->outstanding_nodedscr;
6469 struct udf_node *udf_node;
6473 udf_node = VTOI(vp);
6479 if (udf_node == NULL)
6481 if ((udf_node->i_flags & (IN_ACCESSED | IN_UPDATE | IN_MODIFIED)) == 0)
6494 struct udf_node *udf_node, *udf_next_node;
6506 udf_node = VTOI(vp);
6507 udf_node->i_flags |= IN_SYNCED;
6508 rb_tree_insert_node(&ump->udf_node_tree, udf_node);
6538 for (udf_node = RB_TREE_MIN(&ump->udf_node_tree);
6539 udf_node; udf_node = udf_next_node) {
6541 udf_node, RB_DIR_RIGHT);
6542 rb_tree_remove_node(&ump->udf_node_tree, udf_node);
6543 udf_node->i_flags &= ~IN_SYNCED;
6544 vrele(udf_node->vnode);
6562 udf_read_internal(struct udf_node *node, uint8_t *blob)
6606 udf_write_internal(struct udf_node *node, uint8_t *blob)
6646 udf_read_filebuf(struct udf_node *udf_node, struct buf *buf)
6649 struct udf_mount *ump = udf_node->ump;
6659 sector_size = udf_node->ump->discinfo.sector_size;
6664 what = udf_get_c_type(udf_node);
6681 error = udf_translate_file_extent(udf_node, from, sectors, mapping);
6691 error = udf_read_internal(udf_node, (uint8_t *) buf->b_data);
6752 assert(nestbuf->b_vp == udf_node->vnode);
6775 udf_write_filebuf(struct udf_node *udf_node, struct buf *buf)
6778 struct udf_mount *ump = udf_node->ump;
6787 lb_size = udf_rw32(udf_node->ump->logical_vol->lb_size);
6792 what = udf_get_c_type(udf_node);
6809 error = udf_translate_file_extent(udf_node, from, num_lb, mapping);
6820 error = udf_write_internal(udf_node, (uint8_t *) buf->b_data);
6837 * mapping in the udf_node.
6866 KASSERT(nestbuf->b_vp == udf_node->vnode);
6876 udf_node->outstanding_bufs++;