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,
179 static void ext4_es_print_tree(struct inode *inode)
184 printk(KERN_DEBUG "status extents for inode %lu:", inode->i_ino);
185 tree = &EXT4_I(inode)->i_es_tree;
198 #define ext4_es_print_tree(inode)
244 * @inode - file containing the range
257 static void __es_find_extent_range(struct inode *inode,
269 tree = &EXT4_I(inode)->i_es_tree;
308 void ext4_es_find_extent_range(struct inode *inode,
313 if (EXT4_SB(inode->i_sb)->s_mount_state & EXT4_FC_REPLAY)
316 trace_ext4_es_find_extent_range_enter(inode, lblk);
318 read_lock(&EXT4_I(inode)->i_es_lock);
319 __es_find_extent_range(inode, matching_fn, lblk, end, es);
320 read_unlock(&EXT4_I(inode)->i_es_lock);
322 trace_ext4_es_find_extent_range_exit(inode, es);
329 * @inode - file containing the range
340 static bool __es_scan_range(struct inode *inode,
346 __es_find_extent_range(inode, matching_fn, start, end, &es);
360 bool ext4_es_scan_range(struct inode *inode,
366 if (EXT4_SB(inode->i_sb)->s_mount_state & EXT4_FC_REPLAY)
369 read_lock(&EXT4_I(inode)->i_es_lock);
370 ret = __es_scan_range(inode, matching_fn, lblk, end);
371 read_unlock(&EXT4_I(inode)->i_es_lock);
380 * @inode - file containing the cluster
390 static bool __es_scan_clu(struct inode *inode,
394 struct ext4_sb_info *sbi = EXT4_SB(inode->i_sb);
400 return __es_scan_range(inode, matching_fn, lblk_start, lblk_end);
406 bool ext4_es_scan_clu(struct inode *inode,
412 if (EXT4_SB(inode->i_sb)->s_mount_state & EXT4_FC_REPLAY)
415 read_lock(&EXT4_I(inode)->i_es_lock);
416 ret = __es_scan_clu(inode, matching_fn, lblk);
417 read_unlock(&EXT4_I(inode)->i_es_lock);
422 static void ext4_es_list_add(struct inode *inode)
424 struct ext4_inode_info *ei = EXT4_I(inode);
425 struct ext4_sb_info *sbi = EXT4_SB(inode->i_sb);
438 static void ext4_es_list_del(struct inode *inode)
440 struct ext4_inode_info *ei = EXT4_I(inode);
441 struct ext4_sb_info *sbi = EXT4_SB(inode->i_sb);
486 static void ext4_es_init_extent(struct inode *inode, struct extent_status *es,
495 if (!EXT4_I(inode)->i_es_shk_nr++)
496 ext4_es_list_add(inode);
497 percpu_counter_inc(&EXT4_SB(inode->i_sb)->
501 EXT4_I(inode)->i_es_all_nr++;
502 percpu_counter_inc(&EXT4_SB(inode->i_sb)->s_es_stats.es_stats_all_cnt);
510 static void ext4_es_free_extent(struct inode *inode, struct extent_status *es)
512 EXT4_I(inode)->i_es_all_nr--;
513 percpu_counter_dec(&EXT4_SB(inode->i_sb)->s_es_stats.es_stats_all_cnt);
517 BUG_ON(EXT4_I(inode)->i_es_shk_nr == 0);
518 if (!--EXT4_I(inode)->i_es_shk_nr)
519 ext4_es_list_del(inode);
520 percpu_counter_dec(&EXT4_SB(inode->i_sb)->
567 ext4_es_try_to_merge_left(struct inode *inode, struct extent_status *es)
569 struct ext4_es_tree *tree = &EXT4_I(inode)->i_es_tree;
583 ext4_es_free_extent(inode, es);
591 ext4_es_try_to_merge_right(struct inode *inode, struct extent_status *es)
593 struct ext4_es_tree *tree = &EXT4_I(inode)->i_es_tree;
607 ext4_es_free_extent(inode, es1);
616 static void ext4_es_insert_extent_ext_check(struct inode *inode,
626 path = ext4_find_extent(inode, es->es_lblk, NULL, EXT4_EX_NOCACHE);
630 depth = ext_depth(inode);
649 "inode: %lu we can find an extent "
653 inode->i_ino, ee_block, ee_len,
667 pr_warn("ES insert assertion failed for inode: %lu "
669 "es_status [%d/%d/%llu/%c]\n", inode->i_ino,
677 pr_warn("ES insert assertion failed for inode: %lu "
679 "es_status [%d/%d/%llu/%c]\n", inode->i_ino,
690 pr_warn("ES insert assertion failed for inode: %lu "
693 "[%d/%d/%llu/%x]\n", inode->i_ino,
702 static void ext4_es_insert_extent_ind_check(struct inode *inode,
718 retval = ext4_ind_map_blocks(NULL, inode, &map, 0);
725 pr_warn("ES insert assertion failed for inode: %lu "
728 inode->i_ino, es->es_lblk, es->es_len,
734 "inode: %lu retval %d != es_len %d\n",
735 inode->i_ino, retval, es->es_len);
740 "inode: %lu m_pblk %llu != "
742 inode->i_ino, map.m_pblk,
755 pr_warn("ES insert assertion failed for inode: %lu "
758 inode->i_ino, es->es_lblk, es->es_len,
765 static inline void ext4_es_insert_extent_check(struct inode *inode,
772 BUG_ON(!rwsem_is_locked(&EXT4_I(inode)->i_data_sem));
773 if (ext4_test_inode_flag(inode, EXT4_INODE_EXTENTS))
774 ext4_es_insert_extent_ext_check(inode, es);
776 ext4_es_insert_extent_ind_check(inode, es);
779 static inline void ext4_es_insert_extent_check(struct inode *inode,
785 static int __es_insert_extent(struct inode *inode, struct extent_status *newes,
788 struct ext4_es_tree *tree = &EXT4_I(inode)->i_es_tree;
809 es = ext4_es_try_to_merge_left(inode, es);
816 es = ext4_es_try_to_merge_right(inode, es);
832 ext4_es_init_extent(inode, es, newes->es_lblk, newes->es_len,
844 * ext4_es_insert_extent() adds information to an inode's extent
847 void ext4_es_insert_extent(struct inode *inode, ext4_lblk_t lblk,
854 struct ext4_sb_info *sbi = EXT4_SB(inode->i_sb);
860 if (EXT4_SB(inode->i_sb)->s_mount_state & EXT4_FC_REPLAY)
863 es_debug("add [%u/%u) %llu %x to extent status tree of inode %lu\n",
864 lblk, len, pblk, status, inode->i_ino);
873 ext4_warning(inode->i_sb, "Inserting extent [%u/%u] as "
882 trace_ext4_es_insert_extent(inode, &newes);
884 ext4_es_insert_extent_check(inode, &newes);
887 test_opt(inode->i_sb, DELALLOC) &&
897 write_lock(&EXT4_I(inode)->i_es_lock);
899 err1 = __es_remove_extent(inode, lblk, end, NULL, es1);
909 err2 = __es_insert_extent(inode, &newes, es2);
922 err3 = __revise_pending(inode, lblk, len, &pr);
931 write_unlock(&EXT4_I(inode)->i_es_lock);
935 ext4_es_print_tree(inode);
944 void ext4_es_cache_extent(struct inode *inode, ext4_lblk_t lblk,
952 if (EXT4_SB(inode->i_sb)->s_mount_state & EXT4_FC_REPLAY)
958 trace_ext4_es_cache_extent(inode, &newes);
965 write_lock(&EXT4_I(inode)->i_es_lock);
967 es = __es_tree_search(&EXT4_I(inode)->i_es_tree.root, lblk);
969 __es_insert_extent(inode, &newes, NULL);
970 write_unlock(&EXT4_I(inode)->i_es_lock);
980 int ext4_es_lookup_extent(struct inode *inode, ext4_lblk_t lblk,
990 if (EXT4_SB(inode->i_sb)->s_mount_state & EXT4_FC_REPLAY)
993 trace_ext4_es_lookup_extent_enter(inode, lblk);
996 tree = &EXT4_I(inode)->i_es_tree;
997 read_lock(&EXT4_I(inode)->i_es_lock);
1023 stats = &EXT4_SB(inode->i_sb)->s_es_stats;
1045 read_unlock(&EXT4_I(inode)->i_es_lock);
1047 trace_ext4_es_lookup_extent_exit(inode, es, found);
1065 * @inode - file containing range
1072 static void init_rsvd(struct inode *inode, ext4_lblk_t lblk,
1075 struct ext4_sb_info *sbi = EXT4_SB(inode->i_sb);
1105 * @inode - file containing extent
1114 static void count_rsvd(struct inode *inode, ext4_lblk_t lblk, long len,
1117 struct ext4_sb_info *sbi = EXT4_SB(inode->i_sb);
1226 * @inode - file containing block range
1237 static unsigned int get_rsvd(struct inode *inode, ext4_lblk_t end,
1241 struct ext4_sb_info *sbi = EXT4_SB(inode->i_sb);
1243 struct ext4_pending_tree *tree = &EXT4_I(inode)->i_pending_tree;
1355 * @inode - file containing range
1366 static int __es_remove_extent(struct inode *inode, ext4_lblk_t lblk,
1370 struct ext4_es_tree *tree = &EXT4_I(inode)->i_es_tree;
1380 if (reserved == NULL || !test_opt(inode->i_sb, DELALLOC))
1392 init_rsvd(inode, lblk, es, &rc);
1415 err = __es_insert_extent(inode, &newes, prealloc);
1434 count_rsvd(inode, orig_es.es_lblk + len1,
1441 count_rsvd(inode, lblk, orig_es.es_len - len1,
1452 count_rsvd(inode, es->es_lblk, es->es_len, es, &rc);
1455 ext4_es_free_extent(inode, es);
1468 count_rsvd(inode, es->es_lblk, orig_len - len1,
1480 *reserved = get_rsvd(inode, end, es, &rc);
1488 * @inode - file containing range
1495 void ext4_es_remove_extent(struct inode *inode, ext4_lblk_t lblk,
1503 if (EXT4_SB(inode->i_sb)->s_mount_state & EXT4_FC_REPLAY)
1506 trace_ext4_es_remove_extent(inode, lblk, len);
1507 es_debug("remove [%u/%u) from extent status tree of inode %lu\n",
1508 lblk, len, inode->i_ino);
1521 * so that we are sure __es_shrink() is done with the inode before it
1524 write_lock(&EXT4_I(inode)->i_es_lock);
1525 err = __es_remove_extent(inode, lblk, end, &reserved, es);
1532 write_unlock(&EXT4_I(inode)->i_es_lock);
1536 ext4_es_print_tree(inode);
1537 ext4_da_release_space(inode, reserved);
1565 /* Move the inode to the tail */
1583 * Now we hold i_es_lock which protects us from inode reclaim
1584 * freeing inode under us
1669 /* here we just find an inode that has the max nr. of objects */
1694 "maximum:\n %lu inode (%u objects, %u reclaimable)\n"
1759 * Shrink extents in given inode from ei->i_es_shrink_lblk till end. Scan at
1769 struct inode *inode = &ei->vfs_inode;
1795 ext4_es_free_extent(inode, es);
1811 struct inode *inode = &ei->vfs_inode;
1820 if (ext4_test_inode_state(inode, EXT4_STATE_EXT_PRECACHED) &&
1822 ext4_warning(inode->i_sb, "forced shrink of precached extents");
1837 void ext4_clear_inode_es(struct inode *inode)
1839 struct ext4_inode_info *ei = EXT4_I(inode);
1845 tree = &EXT4_I(inode)->i_es_tree;
1853 ext4_es_free_extent(inode, es);
1856 ext4_clear_inode_state(inode, EXT4_STATE_EXT_PRECACHED);
1861 static void ext4_print_pending_tree(struct inode *inode)
1867 printk(KERN_DEBUG "pending reservations for inode %lu:", inode->i_ino);
1868 tree = &EXT4_I(inode)->i_pending_tree;
1878 #define ext4_print_pending_tree(inode)
1902 * @inode - file containing the pending cluster reservation
1908 static struct pending_reservation *__get_pending(struct inode *inode,
1915 tree = &EXT4_I(inode)->i_pending_tree;
1934 * @inode - file containing the cluster
1941 static int __insert_pending(struct inode *inode, ext4_lblk_t lblk,
1944 struct ext4_sb_info *sbi = EXT4_SB(inode->i_sb);
1945 struct ext4_pending_tree *tree = &EXT4_I(inode)->i_pending_tree;
1991 * @inode - file containing the cluster
1996 static void __remove_pending(struct inode *inode, ext4_lblk_t lblk)
1998 struct ext4_sb_info *sbi = EXT4_SB(inode->i_sb);
2002 pr = __get_pending(inode, EXT4_B2C(sbi, lblk));
2004 tree = &EXT4_I(inode)->i_pending_tree;
2014 * @inode - file containing the cluster
2019 void ext4_remove_pending(struct inode *inode, ext4_lblk_t lblk)
2021 struct ext4_inode_info *ei = EXT4_I(inode);
2024 __remove_pending(inode, lblk);
2032 * @inode - file containing the cluster
2038 bool ext4_is_pending(struct inode *inode, ext4_lblk_t lblk)
2040 struct ext4_sb_info *sbi = EXT4_SB(inode->i_sb);
2041 struct ext4_inode_info *ei = EXT4_I(inode);
2045 ret = (bool)(__get_pending(inode, EXT4_B2C(sbi, lblk)) != NULL);
2056 * @inode - file containing the newly added block
2061 void ext4_es_insert_delayed_block(struct inode *inode, ext4_lblk_t lblk,
2070 if (EXT4_SB(inode->i_sb)->s_mount_state & EXT4_FC_REPLAY)
2073 es_debug("add [%u/1) delayed to extent status tree of inode %lu\n",
2074 lblk, inode->i_ino);
2079 trace_ext4_es_insert_delayed_block(inode, &newes, allocated);
2081 ext4_es_insert_extent_check(inode, &newes);
2090 write_lock(&EXT4_I(inode)->i_es_lock);
2092 err1 = __es_remove_extent(inode, lblk, lblk, NULL, es1);
2102 err2 = __es_insert_extent(inode, &newes, es2);
2113 err3 = __insert_pending(inode, lblk, &pr);
2122 write_unlock(&EXT4_I(inode)->i_es_lock);
2126 ext4_es_print_tree(inode);
2127 ext4_print_pending_tree(inode);
2135 * @inode - file containing block range
2144 static unsigned int __es_delayed_clu(struct inode *inode, ext4_lblk_t start,
2147 struct ext4_es_tree *tree = &EXT4_I(inode)->i_es_tree;
2149 struct ext4_sb_info *sbi = EXT4_SB(inode->i_sb);
2191 * @inode - file containing block range
2197 unsigned int ext4_es_delayed_clu(struct inode *inode, ext4_lblk_t lblk,
2200 struct ext4_inode_info *ei = EXT4_I(inode);
2212 n = __es_delayed_clu(inode, lblk, end);
2226 * @inode - file containing the range
2235 static int __revise_pending(struct inode *inode, ext4_lblk_t lblk,
2239 struct ext4_sb_info *sbi = EXT4_SB(inode->i_sb);
2264 f_del = __es_scan_range(inode, &ext4_es_is_delonly,
2267 ret = __insert_pending(inode, first, prealloc);
2274 l_del = __es_scan_range(inode,
2278 ret = __insert_pending(inode, last, prealloc);
2282 __remove_pending(inode, last);
2287 f_del = __es_scan_range(inode, &ext4_es_is_delonly,
2290 ret = __insert_pending(inode, first, prealloc);
2294 __remove_pending(inode, first);
2298 l_del = __es_scan_range(inode, &ext4_es_is_delonly,
2301 ret = __insert_pending(inode, last, prealloc);
2305 __remove_pending(inode, last);