f2fs: avoid wrong f2fs_bug_on when truncating inline_data

This patch removes wrong f2fs_bug_on in truncate_inline_inode.

When there is no space, it can happen a corner case where i_isze is over
MAX_INLINE_SIZE while its inode is still inline_data.

The scenario is
 1. write small data into file #A.
 2. fill the whole partition to 100%.
 3. truncate 4096 on file #A.
 4. write data at 8192 offset.
  --> f2fs_write_begin
    -> -ENOSPC = f2fs_convert_inline_page
    -> f2fs_write_failed
      -> truncate_blocks
        -> truncate_inline_inode
	  BUG_ON, since i_size is 4096.

Reviewed-by: Chao Yu <chao2.yu@samsung.com>
Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
This commit is contained in:
Jaegeuk Kim 2015-03-16 16:54:52 -07:00
parent 78373b7319
commit 83e21db693

View File

@ -54,13 +54,6 @@ bool truncate_inline_inode(struct page *ipage, u64 from)
{ {
void *addr; void *addr;
/*
* we should never truncate inline data past max inline data size,
* because we always convert inline inode to normal one before
* truncating real data if new size is past max inline data size.
*/
f2fs_bug_on(F2FS_P_SB(ipage), from > MAX_INLINE_DATA);
if (from >= MAX_INLINE_DATA) if (from >= MAX_INLINE_DATA)
return false; return false;