• Chao Yu's avatar
    f2fs: fix to check inline_xattr_size boundary correctly · 4ab78f4d
    Chao Yu authored
    [ Upstream commit 500e0b28 ]
    
    We use below condition to check inline_xattr_size boundary:
    
    	if (!F2FS_OPTION(sbi).inline_xattr_size ||
    		F2FS_OPTION(sbi).inline_xattr_size >=
    				DEF_ADDRS_PER_INODE -
    				F2FS_TOTAL_EXTRA_ATTR_SIZE -
    				DEF_INLINE_RESERVED_SIZE -
    				DEF_MIN_INLINE_SIZE)
    
    There is there problems in that check:
    - we should allow inline_xattr_size equaling to min size of inline
    {data,dentry} area.
    - F2FS_TOTAL_EXTRA_ATTR_SIZE and inline_xattr_size are based on
    different size unit, previous one is 4 bytes, latter one is 1 bytes.
    - DEF_MIN_INLINE_SIZE only indicate min size of inline data area,
    however, we need to consider min size of inline dentry area as well,
    minimal inline dentry should at least contain two entries: '.' and
    '..', so that min inline_dentry size is 40 bytes.
    
    .bitmap		1 * 1 = 1
    .reserved	1 * 1 = 1
    .dentry		11 * 2 = 22
    .filename	8 * 2 = 16
    total		40
    Signed-off-by: default avatarChao Yu <yuchao0@huawei.com>
    Signed-off-by: default avatarJaegeuk Kim <jaegeuk@kernel.org>
    Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
    4ab78f4d
super.c 84 KB