erofs: add 48-bit block addressing on-disk support
authorGao Xiang <hsiangkao@linux.alibaba.com>
Mon, 10 Mar 2025 09:54:53 +0000 (17:54 +0800)
committerGao Xiang <hsiangkao@linux.alibaba.com>
Sun, 16 Mar 2025 17:23:25 +0000 (01:23 +0800)
commit61ba89b57905579b6877f921423596f722983c35
treeb68b248fe6c1720112b989a21dbcab013db6bc27
parent3422dfa9030294c3ded4445e105cd71d8d220993
erofs: add 48-bit block addressing on-disk support

The current 32-bit block addressing limits EROFS to a 16TiB maximum
volume size with 4KiB blocks.  However, several new use cases now
require larger capacity support:
 - Massive datasets for model training in order to boost random
   sampling performance for each epoch;

 - Object storage clients using EROFS direct passthrough.

This extends core on-disk structures to support 48-bit block addressing,
such as inodes, device slots, and inode chunks.

Additionally:
 - Expand superblock root NID to 8-byte `rootnid_8b` to enable full
   out-of-place update incremental builds;

 - Introduce `epoch` field in the superblock as well as add `mtime`
   field to 32-byte compact inodes for basic timestamp support.

Signed-off-by: Gao Xiang <hsiangkao@linux.alibaba.com>
Acked-by: Chao Yu <chao@kernel.org>
Link: https://lore.kernel.org/r/20250310095459.2620647-4-hsiangkao@linux.alibaba.com
fs/erofs/data.c
fs/erofs/erofs_fs.h
fs/erofs/inode.c
fs/erofs/internal.h
fs/erofs/super.c