Lines Matching refs:inode

107  *	Every inode has an extent status tree and all allocation blocks
116 * Extent status tree is protected by inode->i_es_lock.
147 static int __es_insert_extent(struct inode *inode, struct extent_status *newes,
149 static int __es_remove_extent(struct inode *inode, ext4_lblk_t lblk,
155 static int __revise_pending(struct inode *inode, ext4_lblk_t lblk,
181 static void ext4_es_print_tree(struct inode *inode)
186 printk(KERN_DEBUG "status extents for inode %lu:", inode->i_ino);
187 tree = &EXT4_I(inode)->i_es_tree;
200 #define ext4_es_print_tree(inode)
246 * @inode - file containing the range
259 static void __es_find_extent_range(struct inode *inode,
271 tree = &EXT4_I(inode)->i_es_tree;
310 void ext4_es_find_extent_range(struct inode *inode,
317 if (EXT4_SB(inode->i_sb)->s_mount_state & EXT4_FC_REPLAY)
320 trace_ext4_es_find_extent_range_enter(inode, lblk);
322 read_lock(&EXT4_I(inode)->i_es_lock);
323 __es_find_extent_range(inode, matching_fn, lblk, end, es);
324 read_unlock(&EXT4_I(inode)->i_es_lock);
326 trace_ext4_es_find_extent_range_exit(inode, es);
333 * @inode - file containing the range
344 static bool __es_scan_range(struct inode *inode,
350 __es_find_extent_range(inode, matching_fn, start, end, &es);
364 bool ext4_es_scan_range(struct inode *inode,
370 if (EXT4_SB(inode->i_sb)->s_mount_state & EXT4_FC_REPLAY)
373 read_lock(&EXT4_I(inode)->i_es_lock);
374 ret = __es_scan_range(inode, matching_fn, lblk, end);
375 read_unlock(&EXT4_I(inode)->i_es_lock);
384 * @inode - file containing the cluster
394 static bool __es_scan_clu(struct inode *inode,
398 struct ext4_sb_info *sbi = EXT4_SB(inode->i_sb);
404 return __es_scan_range(inode, matching_fn, lblk_start, lblk_end);
410 bool ext4_es_scan_clu(struct inode *inode,
416 if (EXT4_SB(inode->i_sb)->s_mount_state & EXT4_FC_REPLAY)
419 read_lock(&EXT4_I(inode)->i_es_lock);
420 ret = __es_scan_clu(inode, matching_fn, lblk);
421 read_unlock(&EXT4_I(inode)->i_es_lock);
426 static void ext4_es_list_add(struct inode *inode)
428 struct ext4_inode_info *ei = EXT4_I(inode);
429 struct ext4_sb_info *sbi = EXT4_SB(inode->i_sb);
442 static void ext4_es_list_del(struct inode *inode)
444 struct ext4_inode_info *ei = EXT4_I(inode);
445 struct ext4_sb_info *sbi = EXT4_SB(inode->i_sb);
490 static void ext4_es_init_extent(struct inode *inode, struct extent_status *es,
499 if (!EXT4_I(inode)->i_es_shk_nr++)
500 ext4_es_list_add(inode);
501 percpu_counter_inc(&EXT4_SB(inode->i_sb)->
505 EXT4_I(inode)->i_es_all_nr++;
506 percpu_counter_inc(&EXT4_SB(inode->i_sb)->s_es_stats.es_stats_all_cnt);
514 static void ext4_es_free_extent(struct inode *inode, struct extent_status *es)
516 EXT4_I(inode)->i_es_all_nr--;
517 percpu_counter_dec(&EXT4_SB(inode->i_sb)->s_es_stats.es_stats_all_cnt);
521 BUG_ON(EXT4_I(inode)->i_es_shk_nr == 0);
522 if (!--EXT4_I(inode)->i_es_shk_nr)
523 ext4_es_list_del(inode);
524 percpu_counter_dec(&EXT4_SB(inode->i_sb)->
571 ext4_es_try_to_merge_left(struct inode *inode, struct extent_status *es)
573 struct ext4_es_tree *tree = &EXT4_I(inode)->i_es_tree;
587 ext4_es_free_extent(inode, es);
595 ext4_es_try_to_merge_right(struct inode *inode, struct extent_status *es)
597 struct ext4_es_tree *tree = &EXT4_I(inode)->i_es_tree;
611 ext4_es_free_extent(inode, es1);
620 static void ext4_es_insert_extent_ext_check(struct inode *inode,
630 path = ext4_find_extent(inode, es->es_lblk, NULL, EXT4_EX_NOCACHE);
634 depth = ext_depth(inode);
653 "inode: %lu we can find an extent "
657 inode->i_ino, ee_block, ee_len,
671 pr_warn("ES insert assertion failed for inode: %lu "
673 "es_status [%d/%d/%llu/%c]\n", inode->i_ino,
681 pr_warn("ES insert assertion failed for inode: %lu "
683 "es_status [%d/%d/%llu/%c]\n", inode->i_ino,
694 pr_warn("ES insert assertion failed for inode: %lu "
697 "[%d/%d/%llu/%x]\n", inode->i_ino,
707 static void ext4_es_insert_extent_ind_check(struct inode *inode,
723 retval = ext4_ind_map_blocks(NULL, inode, &map, 0);
730 pr_warn("ES insert assertion failed for inode: %lu "
733 inode->i_ino, es->es_lblk, es->es_len,
739 "inode: %lu retval %d != es_len %d\n",
740 inode->i_ino, retval, es->es_len);
745 "inode: %lu m_pblk %llu != "
747 inode->i_ino, map.m_pblk,
760 pr_warn("ES insert assertion failed for inode: %lu "
763 inode->i_ino, es->es_lblk, es->es_len,
770 static inline void ext4_es_insert_extent_check(struct inode *inode,
777 BUG_ON(!rwsem_is_locked(&EXT4_I(inode)->i_data_sem));
778 if (ext4_test_inode_flag(inode, EXT4_INODE_EXTENTS))
779 ext4_es_insert_extent_ext_check(inode, es);
781 ext4_es_insert_extent_ind_check(inode, es);
784 static inline void ext4_es_insert_extent_check(struct inode *inode,
790 static int __es_insert_extent(struct inode *inode, struct extent_status *newes,
793 struct ext4_es_tree *tree = &EXT4_I(inode)->i_es_tree;
814 es = ext4_es_try_to_merge_left(inode, es);
821 es = ext4_es_try_to_merge_right(inode, es);
837 ext4_es_init_extent(inode, es, newes->es_lblk, newes->es_len,
849 * ext4_es_insert_extent() adds information to an inode's extent
854 int ext4_es_insert_extent(struct inode *inode, ext4_lblk_t lblk,
861 struct ext4_sb_info *sbi = EXT4_SB(inode->i_sb);
867 if (EXT4_SB(inode->i_sb)->s_mount_state & EXT4_FC_REPLAY)
870 es_debug("add [%u/%u) %llu %x to extent status tree of inode %lu\n",
871 lblk, len, pblk, status, inode->i_ino);
880 ext4_warning(inode->i_sb, "Inserting extent [%u/%u] as "
889 trace_ext4_es_insert_extent(inode, &newes);
891 ext4_es_insert_extent_check(inode, &newes);
894 test_opt(inode->i_sb, DELALLOC) &&
904 write_lock(&EXT4_I(inode)->i_es_lock);
906 err1 = __es_remove_extent(inode, lblk, end, NULL, es1);
916 err2 = __es_insert_extent(inode, &newes, es2);
929 err3 = __revise_pending(inode, lblk, len, &pr);
938 write_unlock(&EXT4_I(inode)->i_es_lock);
942 ext4_es_print_tree(inode);
951 void ext4_es_cache_extent(struct inode *inode, ext4_lblk_t lblk,
959 if (EXT4_SB(inode->i_sb)->s_mount_state & EXT4_FC_REPLAY)
965 trace_ext4_es_cache_extent(inode, &newes);
972 write_lock(&EXT4_I(inode)->i_es_lock);
974 es = __es_tree_search(&EXT4_I(inode)->i_es_tree.root, lblk);
976 __es_insert_extent(inode, &newes, NULL);
977 write_unlock(&EXT4_I(inode)->i_es_lock);
987 int ext4_es_lookup_extent(struct inode *inode, ext4_lblk_t lblk,
997 if (EXT4_SB(inode->i_sb)->s_mount_state & EXT4_FC_REPLAY)
1000 trace_ext4_es_lookup_extent_enter(inode, lblk);
1003 tree = &EXT4_I(inode)->i_es_tree;
1004 read_lock(&EXT4_I(inode)->i_es_lock);
1030 stats = &EXT4_SB(inode->i_sb)->s_es_stats;
1052 read_unlock(&EXT4_I(inode)->i_es_lock);
1054 trace_ext4_es_lookup_extent_exit(inode, es, found);
1072 * @inode - file containing range
1079 static void init_rsvd(struct inode *inode, ext4_lblk_t lblk,
1082 struct ext4_sb_info *sbi = EXT4_SB(inode->i_sb);
1112 * @inode - file containing extent
1121 static void count_rsvd(struct inode *inode, ext4_lblk_t lblk, long len,
1124 struct ext4_sb_info *sbi = EXT4_SB(inode->i_sb);
1233 * @inode - file containing block range
1244 static unsigned int get_rsvd(struct inode *inode, ext4_lblk_t end,
1248 struct ext4_sb_info *sbi = EXT4_SB(inode->i_sb);
1250 struct ext4_pending_tree *tree = &EXT4_I(inode)->i_pending_tree;
1362 * @inode - file containing range
1373 static int __es_remove_extent(struct inode *inode, ext4_lblk_t lblk,
1377 struct ext4_es_tree *tree = &EXT4_I(inode)->i_es_tree;
1387 if (reserved == NULL || !test_opt(inode->i_sb, DELALLOC))
1399 init_rsvd(inode, lblk, es, &rc);
1422 err = __es_insert_extent(inode, &newes, prealloc);
1441 count_rsvd(inode, orig_es.es_lblk + len1,
1448 count_rsvd(inode, lblk, orig_es.es_len - len1,
1459 count_rsvd(inode, es->es_lblk, es->es_len, es, &rc);
1462 ext4_es_free_extent(inode, es);
1475 count_rsvd(inode, es->es_lblk, orig_len - len1,
1487 *reserved = get_rsvd(inode, end, es, &rc);
1495 * @inode - file containing range
1502 int ext4_es_remove_extent(struct inode *inode, ext4_lblk_t lblk,
1510 if (EXT4_SB(inode->i_sb)->s_mount_state & EXT4_FC_REPLAY)
1513 trace_ext4_es_remove_extent(inode, lblk, len);
1514 es_debug("remove [%u/%u) from extent status tree of inode %lu\n",
1515 lblk, len, inode->i_ino);
1528 * so that we are sure __es_shrink() is done with the inode before it
1531 write_lock(&EXT4_I(inode)->i_es_lock);
1532 err = __es_remove_extent(inode, lblk, end, &reserved, es);
1539 write_unlock(&EXT4_I(inode)->i_es_lock);
1543 ext4_es_print_tree(inode);
1544 ext4_da_release_space(inode, reserved);
1572 /* Move the inode to the tail */
1590 * Now we hold i_es_lock which protects us from inode reclaim
1591 * freeing inode under us
1676 /* here we just find an inode that has the max nr. of objects */
1701 "maximum:\n %lu inode (%u objects, %u reclaimable)\n"
1765 * Shrink extents in given inode from ei->i_es_shrink_lblk till end. Scan at
1775 struct inode *inode = &ei->vfs_inode;
1801 ext4_es_free_extent(inode, es);
1817 struct inode *inode = &ei->vfs_inode;
1826 if (ext4_test_inode_state(inode, EXT4_STATE_EXT_PRECACHED) &&
1828 ext4_warning(inode->i_sb, "forced shrink of precached extents");
1843 void ext4_clear_inode_es(struct inode *inode)
1845 struct ext4_inode_info *ei = EXT4_I(inode);
1851 tree = &EXT4_I(inode)->i_es_tree;
1859 ext4_es_free_extent(inode, es);
1862 ext4_clear_inode_state(inode, EXT4_STATE_EXT_PRECACHED);
1867 static void ext4_print_pending_tree(struct inode *inode)
1873 printk(KERN_DEBUG "pending reservations for inode %lu:", inode->i_ino);
1874 tree = &EXT4_I(inode)->i_pending_tree;
1884 #define ext4_print_pending_tree(inode)
1910 * @inode - file containing the pending cluster reservation
1916 static struct pending_reservation *__get_pending(struct inode *inode,
1923 tree = &EXT4_I(inode)->i_pending_tree;
1942 * @inode - file containing the cluster
1949 static int __insert_pending(struct inode *inode, ext4_lblk_t lblk,
1952 struct ext4_sb_info *sbi = EXT4_SB(inode->i_sb);
1953 struct ext4_pending_tree *tree = &EXT4_I(inode)->i_pending_tree;
1999 * @inode - file containing the cluster
2004 static void __remove_pending(struct inode *inode, ext4_lblk_t lblk)
2006 struct ext4_sb_info *sbi = EXT4_SB(inode->i_sb);
2010 pr = __get_pending(inode, EXT4_B2C(sbi, lblk));
2012 tree = &EXT4_I(inode)->i_pending_tree;
2022 * @inode - file containing the cluster
2027 void ext4_remove_pending(struct inode *inode, ext4_lblk_t lblk)
2029 struct ext4_inode_info *ei = EXT4_I(inode);
2032 __remove_pending(inode, lblk);
2040 * @inode - file containing the cluster
2046 bool ext4_is_pending(struct inode *inode, ext4_lblk_t lblk)
2048 struct ext4_sb_info *sbi = EXT4_SB(inode->i_sb);
2049 struct ext4_inode_info *ei = EXT4_I(inode);
2053 ret = (bool)(__get_pending(inode, EXT4_B2C(sbi, lblk)) != NULL);
2064 * @inode - file containing the newly added block
2071 int ext4_es_insert_delayed_block(struct inode *inode, ext4_lblk_t lblk,
2080 if (EXT4_SB(inode->i_sb)->s_mount_state & EXT4_FC_REPLAY)
2083 es_debug("add [%u/1) delayed to extent status tree of inode %lu\n",
2084 lblk, inode->i_ino);
2089 trace_ext4_es_insert_delayed_block(inode, &newes, allocated);
2091 ext4_es_insert_extent_check(inode, &newes);
2100 write_lock(&EXT4_I(inode)->i_es_lock);
2102 err1 = __es_remove_extent(inode, lblk, lblk, NULL, es1);
2112 err2 = __es_insert_extent(inode, &newes, es2);
2123 err3 = __insert_pending(inode, lblk, &pr);
2132 write_unlock(&EXT4_I(inode)->i_es_lock);
2136 ext4_es_print_tree(inode);
2137 ext4_print_pending_tree(inode);
2145 * @inode - file containing block range
2154 static unsigned int __es_delayed_clu(struct inode *inode, ext4_lblk_t start,
2157 struct ext4_es_tree *tree = &EXT4_I(inode)->i_es_tree;
2159 struct ext4_sb_info *sbi = EXT4_SB(inode->i_sb);
2201 * @inode - file containing block range
2207 unsigned int ext4_es_delayed_clu(struct inode *inode, ext4_lblk_t lblk,
2210 struct ext4_inode_info *ei = EXT4_I(inode);
2222 n = __es_delayed_clu(inode, lblk, end);
2236 * @inode - file containing the range
2245 static int __revise_pending(struct inode *inode, ext4_lblk_t lblk,
2249 struct ext4_sb_info *sbi = EXT4_SB(inode->i_sb);
2274 f_del = __es_scan_range(inode, &ext4_es_is_delonly,
2277 ret = __insert_pending(inode, first, prealloc);
2284 l_del = __es_scan_range(inode,
2288 ret = __insert_pending(inode, last, prealloc);
2292 __remove_pending(inode, last);
2297 f_del = __es_scan_range(inode, &ext4_es_is_delonly,
2300 ret = __insert_pending(inode, first, prealloc);
2304 __remove_pending(inode, first);
2308 l_del = __es_scan_range(inode, &ext4_es_is_delonly,
2311 ret = __insert_pending(inode, last, prealloc);
2315 __remove_pending(inode, last);