Re: [PATCH] ovl: relax lookup error on mismatch origin ftype

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Tue, 27 Apr 2021 at 12:28, Amir Goldstein <amir73il@xxxxxxxxx> wrote:
>
> We get occasional reports of lookup errors due to mismatched
> origin ftype from users that re-format a lower squashfs image.
>
> Commit 13c6ad0f45fd ("ovl: document lower modification caveats")
> tries to discourage the practice of re-formating lower layers and
> describes the expected behavior as undefined.
>
> Commit b0e0f69731cd ("ovl: restrict lower null uuid for "xino=auto"")
> limits the configurations in which origin file handles are followed.
>
> In addition to these measures, change the behavior in case of detecting
> a mismatch origin ftype in lookup to issue a warning, not follow origin,
> but not fail the lookup operation either.
>
> That should make overall more users happy without any big consequences.
>
> Link: https://lore.kernel.org/linux-unionfs/CAOQ4uxgPq9E9xxwU2CDyHy-_yCZZeymg+3n+-6AqkGGE1YtwvQ@xxxxxxxxxxxxxx/
> Signed-off-by: Amir Goldstein <amir73il@xxxxxxxxx>
> ---
>
> Miklos,
>
> I am getting tired of dealing with lower squashfs related reports.
> How about this?
>
> It passes the xfstests quick tests and no, I do not have a reproducer
> for origin mismatch, so will wait for Byron to test the patch.

Pushed a simplified variant that just changes the
ovl_check_origin_fh() return value from -EIO to -ESTALE.   Do you see
a problem with this?

Thanks,
Miklos



>
> Thanks,
> Amir.
>
>  fs/overlayfs/namei.c | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/fs/overlayfs/namei.c b/fs/overlayfs/namei.c
> index 71e264e2f16b..850c0a37f1f0 100644
> --- a/fs/overlayfs/namei.c
> +++ b/fs/overlayfs/namei.c
> @@ -392,7 +392,7 @@ int ovl_check_origin_fh(struct ovl_fs *ofs, struct ovl_fh *fh, bool connected,
>                             upperdentry, d_inode(upperdentry)->i_mode & S_IFMT,
>                             d_inode(origin)->i_mode & S_IFMT);
>         dput(origin);
> -       return -EIO;
> +       return -EINVAL;
>  }
>
>  static int ovl_check_origin(struct ovl_fs *ofs, struct dentry *upperdentry,
> @@ -408,7 +408,7 @@ static int ovl_check_origin(struct ovl_fs *ofs, struct dentry *upperdentry,
>         kfree(fh);
>
>         if (err) {
> -               if (err == -ESTALE)
> +               if (err == -ESTALE || err == -EINVAL)
>                         return 0;
>                 return err;
>         }
> --
> 2.25.1
>



[Index of Archives]     [Linux Filesystems Devel]     [Linux NFS]     [Linux NILFS]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux