Lines Matching full:ip

70 ext4_ext_blk_check(struct inode *ip, e4fs_daddr_t blk)  in ext4_ext_blk_check()  argument
74 fs = ip->i_e2fs; in ext4_ext_blk_check()
83 ext4_ext_walk_index(struct inode *ip, struct ext4_extent_index *ex, int depth, in ext4_ext_walk_index() argument
91 fs = ip->i_e2fs; in ext4_ext_walk_index()
103 error = ext4_ext_blk_check(ip, blk); in ext4_ext_walk_index()
107 if ((error = bread(ip->i_devvp, in ext4_ext_walk_index()
113 error = ext4_ext_walk_header(ip, in ext4_ext_walk_index()
122 ext4_ext_walk_extent(struct inode *ip, struct ext4_extent *ep) in ext4_ext_walk_extent() argument
128 error = ext4_ext_blk_check(ip, blk); in ext4_ext_walk_extent()
141 ext4_ext_walk_header(struct inode *ip, struct ext4_extent_header *eh, int depth) in ext4_ext_walk_header() argument
145 error = ext4_ext_check_header(ip, eh, depth); in ext4_ext_walk_header()
157 error = ext4_ext_walk_index(ip, in ext4_ext_walk_header()
161 error = ext4_ext_walk_extent(ip, in ext4_ext_walk_header()
168 ext4_ext_walk(struct inode *ip) in ext4_ext_walk() argument
172 ehp = (struct ext4_extent_header *)ip->i_db; in ext4_ext_walk()
175 printf("Extent status:ip=%ju\n", ip->i_number); in ext4_ext_walk()
177 if (!(ip->i_flag & IN_E4EXTENTS)) in ext4_ext_walk()
180 return (ext4_ext_walk_header(ip, ehp, 0)); in ext4_ext_walk()
184 ext4_ext_print_path(struct inode *ip, struct ext4_extent_path *path) in ext4_ext_print_path() argument
191 printf("ip=%ju, Path:\n", ip->i_number); in ext4_ext_print_path()
195 error = ext4_ext_walk_index(ip, path->ep_index, in ext4_ext_print_path()
198 error = ext4_ext_walk_extent(ip, path->ep_ext); in ext4_ext_print_path()
207 ext4_ext_inode_header(struct inode *ip) in ext4_ext_inode_header() argument
210 return ((struct ext4_extent_header *)ip->i_db); in ext4_ext_inode_header()
221 ext4_ext_inode_depth(struct inode *ip) in ext4_ext_inode_depth() argument
225 ehp = (struct ext4_extent_header *)ip->i_data; in ext4_ext_inode_depth()
268 ext4_ext_in_cache(struct inode *ip, daddr_t lbn, struct ext4_extent *ep) in ext4_ext_in_cache() argument
273 ecp = &ip->i_ext_cache; in ext4_ext_in_cache()
288 ext4_ext_space_root(struct inode *ip) in ext4_ext_space_root() argument
292 size = sizeof(ip->i_data); in ext4_ext_space_root()
300 ext4_ext_space_block(struct inode *ip) in ext4_ext_space_block() argument
305 fs = ip->i_e2fs; in ext4_ext_space_block()
314 ext4_ext_space_root_idx(struct inode *ip) in ext4_ext_space_root_idx() argument
318 size = sizeof(ip->i_data); in ext4_ext_space_root_idx()
326 ext4_ext_space_block_idx(struct inode *ip) in ext4_ext_space_block_idx() argument
331 fs = ip->i_e2fs; in ext4_ext_space_block_idx()
340 ext4_ext_max_entries(struct inode *ip, int depth) in ext4_ext_max_entries() argument
343 if (depth == ext4_ext_inode_depth(ip)) { in ext4_ext_max_entries()
345 return (ext4_ext_space_root(ip)); in ext4_ext_max_entries()
347 return (ext4_ext_space_root_idx(ip)); in ext4_ext_max_entries()
350 return (ext4_ext_space_block(ip)); in ext4_ext_max_entries()
352 return (ext4_ext_space_block_idx(ip)); in ext4_ext_max_entries()
366 ext4_inode_block_validate(struct inode *ip, e4fs_daddr_t start_blk, in ext4_inode_block_validate() argument
371 fs = ip->i_e2fs; in ext4_inode_block_validate()
382 ext4_validate_extent(struct inode *ip, struct ext4_extent *ext) in ext4_validate_extent() argument
391 return (ext4_inode_block_validate(ip, blk, len)); in ext4_validate_extent()
395 ext4_validate_extent_idx(struct inode *ip, struct ext4_extent_index *ext_idx) in ext4_validate_extent_idx() argument
399 return (ext4_inode_block_validate(ip, blk, 1)); in ext4_validate_extent_idx()
403 ext4_validate_extent_entries(struct inode *ip, struct ext4_extent_header *eh, in ext4_validate_extent_entries() argument
419 if (ext4_validate_extent(ip, ext)) in ext4_validate_extent_entries()
435 if (ext4_validate_extent_idx(ip, ext_idx)) in ext4_validate_extent_entries()
447 ext4_ext_check_header(struct inode *ip, struct ext4_extent_header *eh, in ext4_ext_check_header() argument
470 if (le16toh(eh->eh_max) > ext4_ext_max_entries(ip, depth)) { in ext4_ext_check_header()
482 if (ext4_validate_extent_entries(ip, eh, depth)) { in ext4_ext_check_header()
600 ext4_ext_find_extent(struct inode *ip, daddr_t block, in ext4_ext_find_extent() argument
609 eh = ext4_ext_inode_header(ip); in ext4_ext_find_extent()
610 depth = ext4_ext_inode_depth(ip); in ext4_ext_find_extent()
614 error = ext4_ext_check_header(ip, eh, depth); in ext4_ext_find_extent()
641 error = bread(ip->i_devvp, fsbtodb(ip->i_e2fs, blk), in ext4_ext_find_extent()
642 ip->i_e2fs->e2fs_bsize, NOCRED, &bp); in ext4_ext_find_extent()
660 if (ext4_ext_check_header(ip, eh, i - 1) || in ext4_ext_find_extent()
661 ext2_extent_blk_csum_verify(ip, path[ppos].ep_data)) { in ext4_ext_find_extent()
671 error = ext4_ext_check_header(ip, eh, 0); in ext4_ext_find_extent()
694 ext4_ext_space_block_index(struct inode *ip) in ext4_ext_space_block_index() argument
699 fs = ip->i_e2fs; in ext4_ext_space_block_index()
708 ext4_ext_tree_init(struct inode *ip) in ext4_ext_tree_init() argument
712 ip->i_flag |= IN_E4EXTENTS; in ext4_ext_tree_init()
714 memset(ip->i_data, 0, sizeof(ip->i_data)); in ext4_ext_tree_init()
715 ehp = (struct ext4_extent_header *)ip->i_data; in ext4_ext_tree_init()
717 ehp->eh_max = htole16(ext4_ext_space_root(ip)); in ext4_ext_tree_init()
718 ip->i_ext_cache.ec_type = EXT4_EXT_CACHE_NO; in ext4_ext_tree_init()
719 ip->i_flag |= IN_CHANGE | IN_UPDATE; in ext4_ext_tree_init()
720 ext2_update(ip->i_vnode, 1); in ext4_ext_tree_init()
724 ext4_ext_put_in_cache(struct inode *ip, uint32_t blk, in ext4_ext_put_in_cache() argument
730 ip->i_ext_cache.ec_type = type; in ext4_ext_put_in_cache()
731 ip->i_ext_cache.ec_blk = blk; in ext4_ext_put_in_cache()
732 ip->i_ext_cache.ec_len = len; in ext4_ext_put_in_cache()
733 ip->i_ext_cache.ec_start = start; in ext4_ext_put_in_cache()
737 ext4_ext_blkpref(struct inode *ip, struct ext4_extent_path *path, in ext4_ext_blkpref() argument
745 fs = ip->i_e2fs; in ext4_ext_blkpref()
766 bg_start = (ip->i_block_group * EXT2_BLOCKS_PER_GROUP(ip->i_e2fs)) + in ext4_ext_blkpref()
791 ext4_ext_next_leaf_block(struct inode *ip, struct ext4_extent_path *path) in ext4_ext_next_leaf_block() argument
814 ext4_ext_dirty(struct inode *ip, struct ext4_extent_path *path) in ext4_ext_dirty() argument
821 fs = ip->i_e2fs; in ext4_ext_dirty()
828 bp = getblk(ip->i_devvp, fsbtodb(fs, blk), in ext4_ext_dirty()
833 ext2_extent_blk_csum_set(ip, bp->b_data); in ext4_ext_dirty()
836 ip->i_flag |= IN_CHANGE | IN_UPDATE; in ext4_ext_dirty()
837 error = ext2_update(ip->i_vnode, 1); in ext4_ext_dirty()
844 ext4_ext_insert_index(struct inode *ip, struct ext4_extent_path *path, in ext4_ext_insert_index() argument
886 return (ext4_ext_dirty(ip, path)); in ext4_ext_insert_index()
890 ext4_ext_alloc_meta(struct inode *ip) in ext4_ext_alloc_meta() argument
892 e4fs_daddr_t blk = ext2_alloc_meta(ip); in ext4_ext_alloc_meta()
894 ip->i_blocks += btodb(ip->i_e2fs->e2fs_bsize); in ext4_ext_alloc_meta()
895 ip->i_flag |= IN_CHANGE | IN_UPDATE; in ext4_ext_alloc_meta()
896 ext2_update(ip->i_vnode, 1); in ext4_ext_alloc_meta()
903 ext4_ext_blkfree(struct inode *ip, uint64_t blk, int count, int flags) in ext4_ext_blkfree() argument
908 fs = ip->i_e2fs; in ext4_ext_blkfree()
912 ext2_blkfree(ip, blk + i, fs->e2fs_bsize); in ext4_ext_blkfree()
914 if (ip->i_blocks >= blocksreleased) in ext4_ext_blkfree()
915 ip->i_blocks -= (btodb(fs->e2fs_bsize)*blocksreleased); in ext4_ext_blkfree()
917 ip->i_blocks = 0; in ext4_ext_blkfree()
919 ip->i_flag |= IN_CHANGE | IN_UPDATE; in ext4_ext_blkfree()
920 ext2_update(ip->i_vnode, 1); in ext4_ext_blkfree()
924 ext4_ext_split(struct inode *ip, struct ext4_extent_path *path, in ext4_ext_split() argument
929 int depth = ext4_ext_inode_depth(ip); in ext4_ext_split()
939 fs = ip->i_e2fs; in ext4_ext_split()
960 newblk = ext4_ext_alloc_meta(ip); in ext4_ext_split()
967 bp = getblk(ip->i_devvp, fsbtodb(fs, newblk), fs->e2fs_bsize, 0, 0, 0); in ext4_ext_split()
975 neh->eh_max = le16toh(ext4_ext_space_block(ip)); in ext4_ext_split()
1001 ext2_extent_blk_csum_set(ip, bp->b_data); in ext4_ext_split()
1009 ext4_ext_dirty(ip, path + depth); in ext4_ext_split()
1021 error = bread(ip->i_devvp, fsbtodb(fs, newblk), in ext4_ext_split()
1030 neh->eh_max = htole16(ext4_ext_space_block_index(ip)); in ext4_ext_split()
1048 ext2_extent_blk_csum_set(ip, bp->b_data); in ext4_ext_split()
1056 ext4_ext_dirty(ip, path + i); in ext4_ext_split()
1062 error = ext4_ext_insert_index(ip, path + at, border, newblk); in ext4_ext_split()
1072 ext4_ext_blkfree(ip, ablks[i], 1, 0); in ext4_ext_split()
1082 ext4_ext_grow_indepth(struct inode *ip, struct ext4_extent_path *path, in ext4_ext_grow_indepth() argument
1092 fs = ip->i_e2fs; in ext4_ext_grow_indepth()
1095 newblk = ext4_ext_alloc_meta(ip); in ext4_ext_grow_indepth()
1099 bp = getblk(ip->i_devvp, fsbtodb(fs, newblk), fs->e2fs_bsize, 0, 0, 0); in ext4_ext_grow_indepth()
1101 ext4_ext_blkfree(ip, newblk, 1, 0); in ext4_ext_grow_indepth()
1106 memmove(bp->b_data, curpath->ep_header, sizeof(ip->i_data)); in ext4_ext_grow_indepth()
1112 if (ext4_ext_inode_depth(ip)) in ext4_ext_grow_indepth()
1113 neh->eh_max = htole16(ext4_ext_space_block_index(ip)); in ext4_ext_grow_indepth()
1115 neh->eh_max = htole16(ext4_ext_space_block(ip)); in ext4_ext_grow_indepth()
1117 ext2_extent_blk_csum_set(ip, bp->b_data); in ext4_ext_grow_indepth()
1120 ext4_ext_blkfree(ip, newblk, 1, 0); in ext4_ext_grow_indepth()
1127 curpath->ep_header->eh_max = htole16(ext4_ext_space_root(ip)); in ext4_ext_grow_indepth()
1133 neh = ext4_ext_inode_header(ip); in ext4_ext_grow_indepth()
1135 ext4_ext_dirty(ip, curpath); in ext4_ext_grow_indepth()
1143 ext4_ext_create_new_leaf(struct inode *ip, struct ext4_extent_path *path, in ext4_ext_create_new_leaf() argument
1150 i = depth = ext4_ext_inode_depth(ip); in ext4_ext_create_new_leaf()
1164 error = ext4_ext_split(ip, path, newext, i); in ext4_ext_create_new_leaf()
1170 error = ext4_ext_find_extent(ip, le32toh(newext->e_blk), &path); in ext4_ext_create_new_leaf()
1175 error = ext4_ext_grow_indepth(ip, path, newext); in ext4_ext_create_new_leaf()
1181 error = ext4_ext_find_extent(ip, le32toh(newext->e_blk), &path); in ext4_ext_create_new_leaf()
1186 depth = ext4_ext_inode_depth(ip); in ext4_ext_create_new_leaf()
1197 ext4_ext_correct_indexes(struct inode *ip, struct ext4_extent_path *path) in ext4_ext_correct_indexes() argument
1204 depth = ext4_ext_inode_depth(ip); in ext4_ext_correct_indexes()
1221 ext4_ext_dirty(ip, path + k); in ext4_ext_correct_indexes()
1228 ext4_ext_dirty(ip, path + k); in ext4_ext_correct_indexes()
1235 ext4_ext_insert_extent(struct inode *ip, struct ext4_extent_path *path, in ext4_ext_insert_extent() argument
1243 depth = ext4_ext_inode_depth(ip); in ext4_ext_insert_extent()
1259 depth = ext4_ext_inode_depth(ip); in ext4_ext_insert_extent()
1266 next = ext4_ext_next_leaf_block(ip, path); in ext4_ext_insert_extent()
1272 error = ext4_ext_find_extent(ip, next, &npath); in ext4_ext_insert_extent()
1292 error = ext4_ext_create_new_leaf(ip, path, newext); in ext4_ext_insert_extent()
1296 depth = ext4_ext_inode_depth(ip); in ext4_ext_insert_extent()
1350 error = ext4_ext_correct_indexes(ip, path); in ext4_ext_insert_extent()
1354 ext4_ext_dirty(ip, path + depth); in ext4_ext_insert_extent()
1362 ip->i_ext_cache.ec_type = EXT4_EXT_CACHE_NO; in ext4_ext_insert_extent()
1367 ext4_new_blocks(struct inode *ip, daddr_t lbn, e4fs_daddr_t pref, in ext4_new_blocks() argument
1379 fs = ip->i_e2fs; in ext4_new_blocks()
1380 EXT2_LOCK(ip->i_ump); in ext4_new_blocks()
1381 *perror = ext2_alloc(ip, lbn, pref, (int)fs->e2fs_bsize, cred, &newblk); in ext4_new_blocks()
1386 ip->i_flag |= IN_CHANGE | IN_UPDATE; in ext4_new_blocks()
1387 ext2_update(ip->i_vnode, 1); in ext4_new_blocks()
1394 ext4_ext_get_blocks(struct inode *ip, e4fs_daddr_t iblk, in ext4_ext_get_blocks() argument
1412 if ((bpref = ext4_ext_in_cache(ip, iblk, &newex))) { in ext4_ext_get_blocks()
1425 error = ext4_ext_find_extent(ip, iblk, &path); in ext4_ext_get_blocks()
1430 depth = ext4_ext_inode_depth(ip); in ext4_ext_get_blocks()
1448 ext4_ext_put_in_cache(ip, lblk, e_len, in ext4_ext_get_blocks()
1455 if (S_ISREG(ip->i_mode) && (!ip->i_next_alloc_block)) { in ext4_ext_get_blocks()
1456 ip->i_next_alloc_goal = 0; in ext4_ext_get_blocks()
1459 bpref = ext4_ext_blkpref(ip, path, iblk); in ext4_ext_get_blocks()
1461 newblk = ext4_new_blocks(ip, iblk, bpref, cred, &allocated, &error); in ext4_ext_get_blocks()
1469 error = ext4_ext_insert_extent(ip, path, &newex); in ext4_ext_get_blocks()
1474 ext4_ext_put_in_cache(ip, iblk, allocated, newblk, EXT4_EXT_CACHE_IN); in ext4_ext_get_blocks()
1483 fs = ip->i_e2fs; in ext4_ext_get_blocks()
1484 error = bread(ip->i_devvp, fsbtodb(fs, newblk), in ext4_ext_get_blocks()
1506 ext4_ext_header(struct inode *ip) in ext4_ext_header() argument
1509 return ((struct ext4_extent_header *)ip->i_db); in ext4_ext_header()
1513 ext4_remove_blocks(struct inode *ip, struct ext4_extent *ex, in ext4_remove_blocks() argument
1524 ext4_ext_blkfree(ip, start, num, 0); in ext4_remove_blocks()
1531 ext4_ext_rm_index(struct inode *ip, struct ext4_extent_path *path) in ext4_ext_rm_index() argument
1542 ext4_ext_dirty(ip, path); in ext4_ext_rm_index()
1543 ext4_ext_blkfree(ip, leaf, 1, 0); in ext4_ext_rm_index()
1548 ext4_ext_rm_leaf(struct inode *ip, struct ext4_extent_path *path, in ext4_ext_rm_leaf() argument
1559 depth = ext4_ext_inode_depth(ip); in ext4_ext_rm_leaf()
1604 error = ext4_remove_blocks(ip, ex, a, b); in ext4_ext_rm_leaf()
1616 ext4_ext_dirty(ip, path + depth); in ext4_ext_rm_leaf()
1624 error = ext4_ext_correct_indexes(ip, path); in ext4_ext_rm_leaf()
1632 error = ext4_ext_rm_index(ip, path + depth); in ext4_ext_rm_leaf()
1639 ext4_read_extent_tree_block(struct inode *ip, e4fs_daddr_t pblk, in ext4_read_extent_tree_block() argument
1647 fs = ip->i_e2fs; in ext4_read_extent_tree_block()
1648 error = bread(ip->i_devvp, fsbtodb(fs, pblk), in ext4_read_extent_tree_block()
1661 error = ext4_ext_check_header(ip, eh, depth); in ext4_read_extent_tree_block()
1690 ext4_ext_remove_space(struct inode *ip, off_t length, int flags, in ext4_ext_remove_space() argument
1699 ehp = (struct ext4_extent_header *)ip->i_db; in ext4_ext_remove_space()
1700 depth = ext4_ext_inode_depth(ip); in ext4_ext_remove_space()
1702 error = ext4_ext_check_header(ip, ehp, depth); in ext4_ext_remove_space()
1714 error = ext4_ext_rm_leaf(ip, path, length); in ext4_ext_remove_space()
1740 bp = ext4_read_extent_tree_block(ip, in ext4_ext_remove_space()
1757 error = ext4_ext_rm_index(ip, path + i); in ext4_ext_remove_space()
1769 ext4_ext_header(ip)->eh_depth = 0; in ext4_ext_remove_space()
1770 ext4_ext_header(ip)->eh_max = htole16(ext4_ext_space_root(ip)); in ext4_ext_remove_space()
1771 ext4_ext_dirty(ip, path); in ext4_ext_remove_space()
1777 ip->i_ext_cache.ec_type = EXT4_EXT_CACHE_NO; in ext4_ext_remove_space()