On Tue, Mar 16, 2021 at 11:43 AM Filipe Manana <fdman...@kernel.org> wrote:
>
> On Tue, Mar 16, 2021 at 6:49 AM robbieko <robbi...@synology.com> wrote:
> >
> > Hi All,
> >
> > The patch delayed find orphan roots.
> > Move to after orphan cleanup with tree_root.
> > I think this will cause all orphan items to be deleted
> > when orphan cleanup with tree_root.
> > Afterwards, find orphan roots cannot find
> > the subvolume being deleted.
>
> Not entirely able to parse what you are trying to say.
>
> I suppose your concern is that the call to:
>
> btrfs_orphan_cleanup(fs_info->tree_root)
>
> which now happens before calling btrfs_find_orphan_roots(), results in
> the orphans for roots being accidentally deleted and therefore cause
> no root deletions to happen later?
> If that's your concern, than it does not happen because
> btrfs_orphan_cleanup() skips deletion of orphan items for deleted
> roots.
>
> I've just created a test case to verify it's correct, for RW mounts,
> RO mounts and remounts from RO to RW:
>
> https://pastebin.com/raw/zSZjgn48
>
> I couldn't find any regression.

Ok, I figured out what you meant, and the test was not checking the
btree was deleted, only the orphan items.
I just sent a fix and an updated test case.

Thanks for the report.


>
> Thanks.
>
>
> > >   out:
> > >       return ret;
> > >   }
> > > @@ -3383,10 +3384,6 @@ int __cold open_ctree(struct super_block *sb, 
> > > struct btrfs_fs_devices *fs_device
> > >               }
> > >       }
> > >
> > > -     ret = btrfs_find_orphan_roots(fs_info);
> > > -     if (ret)
> > > -             goto fail_qgroup;
> > > -
> > >       fs_info->fs_root = btrfs_get_fs_root(fs_info, 
> > > BTRFS_FS_TREE_OBJECTID, true);
> > >       if (IS_ERR(fs_info->fs_root)) {
> > >               err = PTR_ERR(fs_info->fs_root);

Reply via email to