On Wed, Nov 25, 2020 at 10:17 AM Vivek Goyal <vgoyal@xxxxxxxxxx> wrote: > > On Wed, Nov 25, 2020 at 02:46:20AM -0800, Sargun Dhillon wrote: > > [..] > > @@ -1125,16 +1183,19 @@ static int ovl_workdir_cleanup_recurse(struct path *path, int level) > > if (p->len == 2 && p->name[1] == '.') > > continue; > > } else if (incompat) { > > - pr_err("overlay with incompat feature '%s' cannot be mounted\n", > > - p->name); > > - err = -EINVAL; > > - break; > > + err = ovl_check_incompat(ofs, p, path); > > + if (err < 0) > > + break; > > + /* Skip cleaning this */ > > + if (err == 1) > > + continue; > > } > > Shouldn't we clean volatile/dirty on non-volatile mount. I did a > volatile mount followed by a non-volatile remount and I still > see work/incompat/volatile/dirty and "trusted.overlay.volatile" xattr > on "volatile" dir. I would expect that this will be all cleaned up > as soon as that upper/work is used for non-volatile mount. > > Amir pointed out this is incorrect behaviour earlier. You should be able to go: non-volatile -> volatile volatile -> volatile But never volatile -> non-volatile, since our mechanism is not bulletproof. I will fix this in the next respin.