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