On Wed, Jul 15, 2020 at 04:38:08PM +0300, Amir Goldstein wrote: > We recently moved setting inode flag OVL_UPPERDATA to ovl_lookup(). > > When looking up an overlay dentry, upperdentry may be found by index > and not by name. In that case, we fail to read the metacopy xattr > and falsly set the OVL_UPPERDATA on the overlay inode. > > This caused a regression in xfstest overlay/033 when run with > OVERLAY_MOUNT_OPTIONS="-o metacopy=on". > > Fixes: 28166ab3c875 ("ovl: initialize OVL_UPPERDATA in ovl_lookup()") > Signed-off-by: Amir Goldstein <amir73il@xxxxxxxxx> Reviewed-by: Vivek Goyal <vgoyal@xxxxxxxxxx> Good catch Amir. Thanks. > --- > > Miklos, > > I just ran xfstests -g overlay/quick tests with metacopy enabled > and one test failed. > > Vivek, > > Do you by any chance run this sort of test regularly? No I don't. I will start testing this configuration. Actually I don't have any automated setup and all the testing I do manually. I think its time that atleast I have a script which runs bunch of tests always. > > You have asked about running unionmount tests with metacopy before. > I just pushed a commit to my xfstests 'unionmount' branch: > 7859f22b ovl: test unionmount tests with metacopy > > It allows you to run xfstests -g overlay/union with > OVERLAY_MOUNT_OPTIONS="-o metacopy=on", to excercise all the unionmount > test configurations I created with metacopy enabled. Nice, I will check it out. Will be nice if this gets pushed to xfstest tree. Thanks Vivek > > Maybe not so surprising that the sub-group overlay/union.nested tests > fail with metacopy enabled. This is just a test setup bug and I pushed > a fix commit to unionmount overlayfs-devel branch to fix it. > > Thanks, > Amir. > > fs/overlayfs/namei.c | 4 ++++ > 1 file changed, 4 insertions(+) > > diff --git a/fs/overlayfs/namei.c b/fs/overlayfs/namei.c > index 3566282a9199..0c5a624600c1 100644 > --- a/fs/overlayfs/namei.c > +++ b/fs/overlayfs/namei.c > @@ -1073,6 +1073,10 @@ struct dentry *ovl_lookup(struct inode *dir, struct dentry *dentry, > upperredirect = NULL; > goto out_free_oe; > } > + err = ovl_check_metacopy_xattr(upperdentry); > + if (err < 0) > + goto out_free_oe; > + uppermetacopy = err; > } > > if (upperdentry || ctr) { > -- > 2.17.1 >