Blocks are tracked by u32, so the max permitted filesize is U32_MAX * BLOCK_SIZE. Additionally, in order to support crypto block sizes of 4K with a 16K block size, we must further restrict max filesize to U32_MAX * 4096. This does not affect 4K blocksize f2fs as the natural limits for those are well below that limit.
Signed-off-by: Daniel Rosenberg <dro...@google.com> --- fs/f2fs/super.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/fs/f2fs/super.c b/fs/f2fs/super.c index 033af907c3b1..7258a8bd6433 100644 --- a/fs/f2fs/super.c +++ b/fs/f2fs/super.c @@ -3364,6 +3364,15 @@ loff_t max_file_blocks(struct inode *inode) leaf_count *= NIDS_PER_BLOCK; result += leaf_count; + /* For compatibility with 4K crypto unit size, we must restrict + * the max filesize to what can fit within U32_MAX 4K units. + * Since the blocksize must currently be equal to the page size, + * we can grab that from there. inode is NULL when setting up + * the superblock. + */ + + result = min(result, ((loff_t) U32_MAX * 4096) >> PAGE_SHIFT); + return result; } base-commit: d346fa09abff46988de9267b67b6900d9913d5a2 -- 2.43.0.rc2.451.g8631bc7472-goog _______________________________________________ Linux-f2fs-devel mailing list Linux-f2fs-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel