diff options
Diffstat (limited to 'fs/f2fs/extent_cache.c')
| -rw-r--r-- | fs/f2fs/extent_cache.c | 18 | 
1 files changed, 9 insertions, 9 deletions
diff --git a/fs/f2fs/extent_cache.c b/fs/f2fs/extent_cache.c index e60078460ad1..686c68b98610 100644 --- a/fs/f2fs/extent_cache.c +++ b/fs/f2fs/extent_cache.c @@ -325,9 +325,10 @@ static void __drop_largest_extent(struct extent_tree *et,  }  /* return true, if inode page is changed */ -static bool __f2fs_init_extent_tree(struct inode *inode, struct f2fs_extent *i_ext) +static void __f2fs_init_extent_tree(struct inode *inode, struct page *ipage)  {  	struct f2fs_sb_info *sbi = F2FS_I_SB(inode); +	struct f2fs_extent *i_ext = ipage ? &F2FS_INODE(ipage)->i_ext : NULL;  	struct extent_tree *et;  	struct extent_node *en;  	struct extent_info ei; @@ -335,16 +336,18 @@ static bool __f2fs_init_extent_tree(struct inode *inode, struct f2fs_extent *i_e  	if (!f2fs_may_extent_tree(inode)) {  		/* drop largest extent */  		if (i_ext && i_ext->len) { +			f2fs_wait_on_page_writeback(ipage, NODE, true, true);  			i_ext->len = 0; -			return true; +			set_page_dirty(ipage); +			return;  		} -		return false; +		return;  	}  	et = __grab_extent_tree(inode);  	if (!i_ext || !i_ext->len) -		return false; +		return;  	get_extent_info(&ei, i_ext); @@ -360,17 +363,14 @@ static bool __f2fs_init_extent_tree(struct inode *inode, struct f2fs_extent *i_e  	}  out:  	write_unlock(&et->lock); -	return false;  } -bool f2fs_init_extent_tree(struct inode *inode, struct f2fs_extent *i_ext) +void f2fs_init_extent_tree(struct inode *inode, struct page *ipage)  { -	bool ret =  __f2fs_init_extent_tree(inode, i_ext); +	__f2fs_init_extent_tree(inode, ipage);  	if (!F2FS_I(inode)->extent_tree)  		set_inode_flag(inode, FI_NO_EXTENT); - -	return ret;  }  static bool f2fs_lookup_extent_tree(struct inode *inode, pgoff_t pgofs,  |