On Sat, Mar 02, 2013 at 11:32:07PM +0200, Alex Lyakas wrote:
> On Fri, Mar 1, 2013 at 6:17 PM, David Sterba <dste...@suse.cz> wrote:
> > -               btrfs_kill_all_delayed_nodes(root);
> > +       btrfs_kill_all_delayed_nodes(root);
> >
> > -               if (btrfs_header_backref_rev(root->node) <
> > -                   BTRFS_MIXED_BACKREF_REV)
> > -                       ret = btrfs_drop_snapshot(root, NULL, 0, 0);
> > -               else
> > -                       ret =btrfs_drop_snapshot(root, NULL, 1, 0);
> > -               BUG_ON(ret < 0);
> > -       }
> > -       return 0;
> > +       if (btrfs_header_backref_rev(root->node) <
> > +                       BTRFS_MIXED_BACKREF_REV)
> > +               ret = btrfs_drop_snapshot(root, NULL, 0, 0);
> > +       else
> > +               ret = btrfs_drop_snapshot(root, NULL, 1, 0);
> > +       /*
> > +        * If we encounter a transaction abort during snapshot cleaning, we
> > +        * don't want to crash here
> > +        */
> > +       BUG_ON(ret < 0 && (ret != -EAGAIN || ret != -EROFS));
> > +       return run_again || ret == -EAGAIN;
> I think that this expression will always evaluate to "true", because
> "run_again" is set to 1 and never reset.

That's right, I probably had some intentions in the past, but now it's
just superflous.

> So now if btrfs_drop_snapshot() returns -EAGAIN, then
> btrfs_clean_one_deleted_snapshot() will return 1, thus telling the
> caller "call me again", like your comment says. However, in this case
> we are unmounting, so is this ok? Or this is just to avoid the cleaner
> going to sleep?

close_ctree calls kthread_stop(cleaner) which would wake cleaner anyway.

The cases when we want send cleaner to sleep are when there's nothing to
do or the read-only case which is just a safety check.

>From that point, the last statement should be 'return 1' and run_again
removed.

> Also, I want to ask, hope this is not inappropriate. Do you also agree
> with Josef, that it's ok for BTRFS_IOC_SNAP_DESTROY not to commit the
> transaction, but just to detach from it? Had we committed, we would
> have ensured that ORPHAN_ITEM is in the root tree, thus preventing
> from subvol to re-appear after crash.
> It seems a little inconsistent with snap creation, where not only the
> transaction is committed, but delalloc flush is performed to ensure
> that all data is on disk before creating the snap.

That's another question, can you please point me to the thread where
this was discussed?

thanks,
david
--
To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to