• Gao Xiang's avatar
    erofs: add file-backed mount support · fb176750
    Gao Xiang authored
    It actually has been around for years: For containers and other sandbox
    use cases, there will be thousands (and even more) of authenticated
    (sub)images running on the same host, unlike OS images.
    
    Of course, all scenarios can use the same EROFS on-disk format, but
    bdev-backed mounts just work well for OS images since golden data is
    dumped into real block devices.  However, it's somewhat hard for
    container runtimes to manage and isolate so many unnecessary virtual
    block devices safely and efficiently [1]: they just look like a burden
    to orchestrators and file-backed mounts are preferred indeed.  There
    were already enough attempts such as Incremental FS, the original
    ComposeFS and PuzzleFS acting in the same way for immutable fses.  As
    for current EROFS users, ComposeFS, containerd and Android APEXs will
    be directly benefited from it.
    
    On the other hand, previous experimental feature "erofs over fscache"
    was once also intended to provide a similar solution (inspired by
    Incremental FS discussion [2]), but the following facts show file-backed
    mounts will be a better approach:
     - Fscache infrastructure has recently been moved into new Netfslib
       which is an unexpected dependency to EROFS really, although it
       originally claims "it could be used for caching other things such as
       ISO9660 filesystems too." [3]
    
     - It takes an unexpectedly long time to upstream Fscache/Cachefiles
       enhancements.  For example, the failover feature took more than
       one year, and the deamonless feature is still far behind now;
    
     - Ongoing HSM "fanotify pre-content hooks" [4] together with this will
       perfectly supersede "erofs over fscache" in a simpler way since
       developers (mainly containerd folks) could leverage their existing
       caching mechanism entirely in userspace instead of strictly following
       the predefined in-kernel caching tree hierarchy.
    
    After "fanotify pre-content hooks" lands upstream to provide the same
    functionality, "erofs over fscache" will be removed then (as an EROFS
    internal improvement and EROFS will not have to bother with on-demand
    fetching and/or caching improvements anymore.)
    
    [1] https://github.com/containers/storage/pull/2039
    [2] https://lore.kernel.org/r/CAOQ4uxjbVxnubaPjVaGYiSwoGDTdpWbB=w_AeM6YM=zVixsUfQ@mail.gmail.com
    [3] https://docs.kernel.org/filesystems/caching/fscache.html
    [4] https://lore.kernel.org/r/cover.1723670362.git.josef@toxicpanda.com
    
    Closes: https://github.com/containers/composefs/issues/144Reviewed-by: default avatarSandeep Dhavale <dhavale@google.com>
    Reviewed-by: default avatarChao Yu <chao@kernel.org>
    Signed-off-by: default avatarGao Xiang <hsiangkao@linux.alibaba.com>
    Link: https://lore.kernel.org/r/20240830032840.3783206-1-hsiangkao@linux.alibaba.com
    fb176750
internal.h 15.6 KB