f2fs: move internal functions into extent_cache.c
[ Upstream commit 3bac20a8f011b8ed4012b43f4f33010432b3c647 ] No functional change. Reviewed-by: Chao Yu <chao@kernel.org> Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org> Stable-dep-of: 043d2d00b443 ("f2fs: factor out victim_entry usage from general rb_tree use") Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
parent
155ff41cf2
commit
91b1554e66
@ -15,6 +15,77 @@
|
|||||||
#include "node.h"
|
#include "node.h"
|
||||||
#include <trace/events/f2fs.h>
|
#include <trace/events/f2fs.h>
|
||||||
|
|
||||||
|
static void __set_extent_info(struct extent_info *ei,
|
||||||
|
unsigned int fofs, unsigned int len,
|
||||||
|
block_t blk, bool keep_clen)
|
||||||
|
{
|
||||||
|
ei->fofs = fofs;
|
||||||
|
ei->blk = blk;
|
||||||
|
ei->len = len;
|
||||||
|
|
||||||
|
if (keep_clen)
|
||||||
|
return;
|
||||||
|
|
||||||
|
#ifdef CONFIG_F2FS_FS_COMPRESSION
|
||||||
|
ei->c_len = 0;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
static bool f2fs_may_extent_tree(struct inode *inode)
|
||||||
|
{
|
||||||
|
struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* for recovered files during mount do not create extents
|
||||||
|
* if shrinker is not registered.
|
||||||
|
*/
|
||||||
|
if (list_empty(&sbi->s_list))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
if (!test_opt(sbi, READ_EXTENT_CACHE) ||
|
||||||
|
is_inode_flag_set(inode, FI_NO_EXTENT) ||
|
||||||
|
(is_inode_flag_set(inode, FI_COMPRESSED_FILE) &&
|
||||||
|
!f2fs_sb_has_readonly(sbi)))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
return S_ISREG(inode->i_mode);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void __try_update_largest_extent(struct extent_tree *et,
|
||||||
|
struct extent_node *en)
|
||||||
|
{
|
||||||
|
if (en->ei.len <= et->largest.len)
|
||||||
|
return;
|
||||||
|
|
||||||
|
et->largest = en->ei;
|
||||||
|
et->largest_updated = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
static bool __is_extent_mergeable(struct extent_info *back,
|
||||||
|
struct extent_info *front)
|
||||||
|
{
|
||||||
|
#ifdef CONFIG_F2FS_FS_COMPRESSION
|
||||||
|
if (back->c_len && back->len != back->c_len)
|
||||||
|
return false;
|
||||||
|
if (front->c_len && front->len != front->c_len)
|
||||||
|
return false;
|
||||||
|
#endif
|
||||||
|
return (back->fofs + back->len == front->fofs &&
|
||||||
|
back->blk + back->len == front->blk);
|
||||||
|
}
|
||||||
|
|
||||||
|
static bool __is_back_mergeable(struct extent_info *cur,
|
||||||
|
struct extent_info *back)
|
||||||
|
{
|
||||||
|
return __is_extent_mergeable(back, cur);
|
||||||
|
}
|
||||||
|
|
||||||
|
static bool __is_front_mergeable(struct extent_info *cur,
|
||||||
|
struct extent_info *front)
|
||||||
|
{
|
||||||
|
return __is_extent_mergeable(cur, front);
|
||||||
|
}
|
||||||
|
|
||||||
static struct rb_entry *__lookup_rb_tree_fast(struct rb_entry *cached_re,
|
static struct rb_entry *__lookup_rb_tree_fast(struct rb_entry *cached_re,
|
||||||
unsigned int ofs)
|
unsigned int ofs)
|
||||||
{
|
{
|
||||||
@ -592,16 +663,16 @@ static void f2fs_update_extent_tree_range(struct inode *inode,
|
|||||||
|
|
||||||
if (end < org_end && org_end - end >= F2FS_MIN_EXTENT_LEN) {
|
if (end < org_end && org_end - end >= F2FS_MIN_EXTENT_LEN) {
|
||||||
if (parts) {
|
if (parts) {
|
||||||
set_extent_info(&ei, end,
|
__set_extent_info(&ei,
|
||||||
end - dei.fofs + dei.blk,
|
end, org_end - end,
|
||||||
org_end - end);
|
end - dei.fofs + dei.blk, false);
|
||||||
en1 = __insert_extent_tree(sbi, et, &ei,
|
en1 = __insert_extent_tree(sbi, et, &ei,
|
||||||
NULL, NULL, true);
|
NULL, NULL, true);
|
||||||
next_en = en1;
|
next_en = en1;
|
||||||
} else {
|
} else {
|
||||||
en->ei.fofs = end;
|
__set_extent_info(&en->ei,
|
||||||
en->ei.blk += end - dei.fofs;
|
end, en->ei.len - (end - dei.fofs),
|
||||||
en->ei.len -= end - dei.fofs;
|
en->ei.blk + (end - dei.fofs), true);
|
||||||
next_en = en;
|
next_en = en;
|
||||||
}
|
}
|
||||||
parts++;
|
parts++;
|
||||||
@ -633,8 +704,7 @@ static void f2fs_update_extent_tree_range(struct inode *inode,
|
|||||||
|
|
||||||
/* 3. update extent in extent cache */
|
/* 3. update extent in extent cache */
|
||||||
if (blkaddr) {
|
if (blkaddr) {
|
||||||
|
__set_extent_info(&ei, fofs, len, blkaddr, false);
|
||||||
set_extent_info(&ei, fofs, blkaddr, len);
|
|
||||||
if (!__try_merge_extent_node(sbi, et, &ei, prev_en, next_en))
|
if (!__try_merge_extent_node(sbi, et, &ei, prev_en, next_en))
|
||||||
__insert_extent_tree(sbi, et, &ei,
|
__insert_extent_tree(sbi, et, &ei,
|
||||||
insert_p, insert_parent, leftmost);
|
insert_p, insert_parent, leftmost);
|
||||||
@ -693,7 +763,7 @@ void f2fs_update_extent_tree_range_compressed(struct inode *inode,
|
|||||||
if (en)
|
if (en)
|
||||||
goto unlock_out;
|
goto unlock_out;
|
||||||
|
|
||||||
set_extent_info(&ei, fofs, blkaddr, llen);
|
__set_extent_info(&ei, fofs, llen, blkaddr, true);
|
||||||
ei.c_len = c_len;
|
ei.c_len = c_len;
|
||||||
|
|
||||||
if (!__try_merge_extent_node(sbi, et, &ei, prev_en, next_en))
|
if (!__try_merge_extent_node(sbi, et, &ei, prev_en, next_en))
|
||||||
|
@ -618,7 +618,7 @@ struct rb_entry {
|
|||||||
struct extent_info {
|
struct extent_info {
|
||||||
unsigned int fofs; /* start offset in a file */
|
unsigned int fofs; /* start offset in a file */
|
||||||
unsigned int len; /* length of the extent */
|
unsigned int len; /* length of the extent */
|
||||||
u32 blk; /* start block address of the extent */
|
block_t blk; /* start block address of the extent */
|
||||||
#ifdef CONFIG_F2FS_FS_COMPRESSION
|
#ifdef CONFIG_F2FS_FS_COMPRESSION
|
||||||
unsigned int c_len; /* physical extent length of compressed blocks */
|
unsigned int c_len; /* physical extent length of compressed blocks */
|
||||||
#endif
|
#endif
|
||||||
@ -842,17 +842,6 @@ static inline void set_raw_read_extent(struct extent_info *ext,
|
|||||||
i_ext->len = cpu_to_le32(ext->len);
|
i_ext->len = cpu_to_le32(ext->len);
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void set_extent_info(struct extent_info *ei, unsigned int fofs,
|
|
||||||
u32 blk, unsigned int len)
|
|
||||||
{
|
|
||||||
ei->fofs = fofs;
|
|
||||||
ei->blk = blk;
|
|
||||||
ei->len = len;
|
|
||||||
#ifdef CONFIG_F2FS_FS_COMPRESSION
|
|
||||||
ei->c_len = 0;
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline bool __is_discard_mergeable(struct discard_info *back,
|
static inline bool __is_discard_mergeable(struct discard_info *back,
|
||||||
struct discard_info *front, unsigned int max_len)
|
struct discard_info *front, unsigned int max_len)
|
||||||
{
|
{
|
||||||
@ -872,41 +861,6 @@ static inline bool __is_discard_front_mergeable(struct discard_info *cur,
|
|||||||
return __is_discard_mergeable(cur, front, max_len);
|
return __is_discard_mergeable(cur, front, max_len);
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline bool __is_extent_mergeable(struct extent_info *back,
|
|
||||||
struct extent_info *front)
|
|
||||||
{
|
|
||||||
#ifdef CONFIG_F2FS_FS_COMPRESSION
|
|
||||||
if (back->c_len && back->len != back->c_len)
|
|
||||||
return false;
|
|
||||||
if (front->c_len && front->len != front->c_len)
|
|
||||||
return false;
|
|
||||||
#endif
|
|
||||||
return (back->fofs + back->len == front->fofs &&
|
|
||||||
back->blk + back->len == front->blk);
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline bool __is_back_mergeable(struct extent_info *cur,
|
|
||||||
struct extent_info *back)
|
|
||||||
{
|
|
||||||
return __is_extent_mergeable(back, cur);
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline bool __is_front_mergeable(struct extent_info *cur,
|
|
||||||
struct extent_info *front)
|
|
||||||
{
|
|
||||||
return __is_extent_mergeable(cur, front);
|
|
||||||
}
|
|
||||||
|
|
||||||
extern void f2fs_mark_inode_dirty_sync(struct inode *inode, bool sync);
|
|
||||||
static inline void __try_update_largest_extent(struct extent_tree *et,
|
|
||||||
struct extent_node *en)
|
|
||||||
{
|
|
||||||
if (en->ei.len > et->largest.len) {
|
|
||||||
et->largest = en->ei;
|
|
||||||
et->largest_updated = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* For free nid management
|
* For free nid management
|
||||||
*/
|
*/
|
||||||
@ -2578,6 +2532,7 @@ static inline block_t __start_sum_addr(struct f2fs_sb_info *sbi)
|
|||||||
return le32_to_cpu(F2FS_CKPT(sbi)->cp_pack_start_sum);
|
return le32_to_cpu(F2FS_CKPT(sbi)->cp_pack_start_sum);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
extern void f2fs_mark_inode_dirty_sync(struct inode *inode, bool sync);
|
||||||
static inline int inc_valid_node_count(struct f2fs_sb_info *sbi,
|
static inline int inc_valid_node_count(struct f2fs_sb_info *sbi,
|
||||||
struct inode *inode, bool is_inode)
|
struct inode *inode, bool is_inode)
|
||||||
{
|
{
|
||||||
@ -4400,26 +4355,6 @@ F2FS_FEATURE_FUNCS(casefold, CASEFOLD);
|
|||||||
F2FS_FEATURE_FUNCS(compression, COMPRESSION);
|
F2FS_FEATURE_FUNCS(compression, COMPRESSION);
|
||||||
F2FS_FEATURE_FUNCS(readonly, RO);
|
F2FS_FEATURE_FUNCS(readonly, RO);
|
||||||
|
|
||||||
static inline bool f2fs_may_extent_tree(struct inode *inode)
|
|
||||||
{
|
|
||||||
struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
|
|
||||||
|
|
||||||
if (!test_opt(sbi, READ_EXTENT_CACHE) ||
|
|
||||||
is_inode_flag_set(inode, FI_NO_EXTENT) ||
|
|
||||||
(is_inode_flag_set(inode, FI_COMPRESSED_FILE) &&
|
|
||||||
!f2fs_sb_has_readonly(sbi)))
|
|
||||||
return false;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* for recovered files during mount do not create extents
|
|
||||||
* if shrinker is not registered.
|
|
||||||
*/
|
|
||||||
if (list_empty(&sbi->s_list))
|
|
||||||
return false;
|
|
||||||
|
|
||||||
return S_ISREG(inode->i_mode);
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef CONFIG_BLK_DEV_ZONED
|
#ifdef CONFIG_BLK_DEV_ZONED
|
||||||
static inline bool f2fs_blkz_is_seq(struct f2fs_sb_info *sbi, int devi,
|
static inline bool f2fs_blkz_is_seq(struct f2fs_sb_info *sbi, int devi,
|
||||||
block_t blkaddr)
|
block_t blkaddr)
|
||||||
|
Loading…
Reference in New Issue
Block a user