Re: FAILED: patch "[PATCH] ovl: take mnt_want_write() for work/index dir setup" failed to apply to 4.14-stable tree

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

 



On Thu, Feb 15, 2018 at 4:30 PM,  <gregkh@xxxxxxxxxxxxxxxxxxx> wrote:
>
> The patch below does not apply to the 4.14-stable tree.
> If someone wants it applied there, or to any other stable or longterm
> tree, then please email the backport, including the original git commit
> id to <stable@xxxxxxxxxxxxxxx>.
>
> thanks,
>
> greg k-h
>
> ------------------ original commit in Linus's tree ------------------
>
> From 2ba9d57e65044859f7ff133bcb0a902769bf3bc6 Mon Sep 17 00:00:00 2001
> From: Amir Goldstein <amir73il@xxxxxxxxx>
> Date: Wed, 3 Jan 2018 18:54:41 +0200
> Subject: [PATCH] ovl: take mnt_want_write() for work/index dir setup
>
> There are several write operations on upper fs not covered by
> mnt_want_write():
>
> - test set/remove OPAQUE xattr
> - test create O_TMPFILE
> - set ORIGIN xattr in ovl_verify_origin()
> - cleanup of index entries in ovl_indexdir_cleanup()
>
> Some of these go way back, but this patch only applies over the
> v4.14 re-factoring of ovl_fill_super().

For the record, v4.14 above is a typo/braino, I meant to write "the
v4.15 re-factoring..."

>
> Cc: <stable@xxxxxxxxxxxxxxx> #v4.14
> Signed-off-by: Amir Goldstein <amir73il@xxxxxxxxx>
> Signed-off-by: Miklos Szeredi <mszeredi@xxxxxxxxxx>
>
> diff --git a/fs/overlayfs/super.c b/fs/overlayfs/super.c
> index 1a436fa92a04..3387e6d639a5 100644
> --- a/fs/overlayfs/super.c
> +++ b/fs/overlayfs/super.c
> @@ -521,10 +521,6 @@ static struct dentry *ovl_workdir_create(struct ovl_fs *ofs,
>         bool retried = false;
>         bool locked = false;
>
> -       err = mnt_want_write(mnt);
> -       if (err)
> -               goto out_err;
> -
>         inode_lock_nested(dir, I_MUTEX_PARENT);
>         locked = true;
>
> @@ -589,7 +585,6 @@ static struct dentry *ovl_workdir_create(struct ovl_fs *ofs,
>                 goto out_err;
>         }
>  out_unlock:
> -       mnt_drop_write(mnt);
>         if (locked)
>                 inode_unlock(dir);
>
> @@ -930,12 +925,17 @@ static int ovl_get_upper(struct ovl_fs *ofs, struct path *upperpath)
>
>  static int ovl_make_workdir(struct ovl_fs *ofs, struct path *workpath)
>  {
> +       struct vfsmount *mnt = ofs->upper_mnt;
>         struct dentry *temp;
>         int err;
>
> +       err = mnt_want_write(mnt);
> +       if (err)
> +               return err;
> +
>         ofs->workdir = ovl_workdir_create(ofs, OVL_WORKDIR_NAME, false);
>         if (!ofs->workdir)
> -               return 0;
> +               goto out;
>
>         /*
>          * Upper should support d_type, else whiteouts are visible.  Given
> @@ -945,7 +945,7 @@ static int ovl_make_workdir(struct ovl_fs *ofs, struct path *workpath)
>          */
>         err = ovl_check_d_type_supported(workpath);
>         if (err < 0)
> -               return err;
> +               goto out;
>
>         /*
>          * We allowed this configuration and don't want to break users over
> @@ -969,6 +969,7 @@ static int ovl_make_workdir(struct ovl_fs *ofs, struct path *workpath)
>         if (err) {
>                 ofs->noxattr = true;
>                 pr_warn("overlayfs: upper fs does not support xattr.\n");
> +               err = 0;
>         } else {
>                 vfs_removexattr(ofs->workdir, OVL_XATTR_OPAQUE);
>         }
> @@ -980,7 +981,9 @@ static int ovl_make_workdir(struct ovl_fs *ofs, struct path *workpath)
>                 pr_warn("overlayfs: upper fs does not support file handles, falling back to index=off.\n");
>         }
>
> -       return 0;
> +out:
> +       mnt_drop_write(mnt);
> +       return err;
>  }
>
>  static int ovl_get_workdir(struct ovl_fs *ofs, struct path *upperpath)
> @@ -1027,8 +1030,13 @@ static int ovl_get_workdir(struct ovl_fs *ofs, struct path *upperpath)
>  static int ovl_get_indexdir(struct ovl_fs *ofs, struct ovl_entry *oe,
>                             struct path *upperpath)
>  {
> +       struct vfsmount *mnt = ofs->upper_mnt;
>         int err;
>
> +       err = mnt_want_write(mnt);
> +       if (err)
> +               return err;
> +
>         /* Verify lower root is upper root origin */
>         err = ovl_verify_origin(upperpath->dentry, oe->lowerstack[0].dentry,
>                                 false, true);
> @@ -1056,6 +1064,7 @@ static int ovl_get_indexdir(struct ovl_fs *ofs, struct ovl_entry *oe,
>                 pr_warn("overlayfs: try deleting index dir or mounting with '-o index=off' to disable inodes index.\n");
>
>  out:
> +       mnt_drop_write(mnt);
>         return err;
>  }
>
>



[Index of Archives]     [Linux Kernel]     [Kernel Development Newbies]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite Hiking]     [Linux Kernel]     [Linux SCSI]