• Amir Goldstein's avatar
    ovl: check for incompatible features in work dir · 235ce9ed
    Amir Goldstein authored
    An incompatible feature is marked by a non-empty directory nested
    2 levels deep under "work" dir, e.g.:
    workdir/work/incompat/volatile.
    
    This commit checks for marked incompat features, warns about them
    and fails to mount the overlay, for example:
      overlayfs: overlay with incompat feature 'volatile' cannot be mounted
    
    Very old kernels (i.e. v3.18) will fail to remove a non-empty "work"
    dir and fail the mount.  Newer kernels will fail to remove a "work"
    dir with entries nested 3 levels and fall back to read-only mount.
    
    User mounting with old kernel will see a warning like these in dmesg:
      overlayfs: cleanup of 'incompat/...' failed (-39)
      overlayfs: cleanup of 'work/incompat' failed (-39)
      overlayfs: cleanup of 'ovl-work/work' failed (-39)
      overlayfs: failed to create directory /vdf/ovl-work/work (errno: 17);
                 mounting read-only
    
    These warnings should give the hint to the user that:
    1. mount failure is caused by backward incompatible features
    2. mount failure can be resolved by manually removing the "work" directory
    
    There is nothing preventing users on old kernels from manually removing
    workdir entirely or mounting overlay with a new workdir, so this is in
    no way a full proof backward compatibility enforcement, but only a best
    effort.
    Signed-off-by: default avatarAmir Goldstein <amir73il@gmail.com>
    Signed-off-by: default avatarMiklos Szeredi <mszeredi@redhat.com>
    235ce9ed
readdir.c 27.2 KB