FROMGIT: f2fs: compress: fix to check unreleased compressed cluster
Compressed cluster may not be released due to we can fail in
release_compress_blocks(), fix to handle reserved compressed
cluster correctly in reserve_compress_blocks().
Fixes: 4c8ff7095b ("f2fs: support data compression")
Signed-off-by: Sheng Yong <shengyong@oppo.com>
Signed-off-by: Chao Yu <chao@kernel.org>
Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
Bug: 313549450
(cherry picked from commit eb8fbaa53374e0a2d4381190abfe708481517bbb
https://git.kernel.org/pub/scm/linux/kernel/git/jaegeuk/f2fs.git dev)
Change-Id: I2a4223efb548a921a8f28f45798709743e38e899
Signed-off-by: Daeho Jeong <daehojeong@google.com>
This commit is contained in:
parent
0c3d1c94c4
commit
ba28d24cea
1 changed files with 12 additions and 1 deletions
|
|
@ -3608,7 +3608,13 @@ static int reserve_compress_blocks(struct dnode_of_data *dn, pgoff_t count)
|
|||
goto next;
|
||||
}
|
||||
|
||||
if (__is_valid_data_blkaddr(blkaddr)) {
|
||||
/*
|
||||
* compressed cluster was not released due to it
|
||||
* fails in release_compress_blocks(), so NEW_ADDR
|
||||
* is a possible case.
|
||||
*/
|
||||
if (blkaddr == NEW_ADDR ||
|
||||
__is_valid_data_blkaddr(blkaddr)) {
|
||||
compr_blocks++;
|
||||
continue;
|
||||
}
|
||||
|
|
@ -3618,6 +3624,11 @@ static int reserve_compress_blocks(struct dnode_of_data *dn, pgoff_t count)
|
|||
}
|
||||
|
||||
reserved = cluster_size - compr_blocks;
|
||||
|
||||
/* for the case all blocks in cluster were reserved */
|
||||
if (reserved == 1)
|
||||
goto next;
|
||||
|
||||
ret = inc_valid_block_count(sbi, dn->inode, &reserved);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue