Linux Btrfs filesystem development
 help / color / mirror / Atom feed
From: Boris Burkov <boris@bur.io>
To: Marc MERLIN <marc_btrfs@merlins.org>
Cc: linux-btrfs <linux-btrfs@vger.kernel.org>
Subject: Re: Deleted snapshots stay in squota, mayube because of bees?
Date: Thu, 23 Apr 2026 12:28:31 -0700	[thread overview]
Message-ID: <20260423192831.GA2096001@zen.localdomain> (raw)
In-Reply-To: <aekrVJnCaGkYWeBp@merlins.org>

On Wed, Apr 22, 2026 at 01:11:00PM -0700, Marc MERLIN wrote:
> On Wed, Apr 22, 2026 at 12:38:53PM -0700, Boris Burkov wrote:
> > No, I'm saying that there are two explanations for your observations:
> > 1. You have legitimate shared extents owned by the deleted snapshot.
> >    Presumably caused by bees as you guess.
> > 2. A squotas bug where we have usage recorded for your qgroup but no
> >    matching extent in the extent tree.
>  
> Gotcha.
> 
> > btrfs check will walk the extent tree and add up the extent usage based
> > on the squota owner refs and compare that to the value stored on the
> > qgroup. The squotas invariant is that those are equal. If it complains,
> > that means there is an extent attributed to a subvolume that isn't in
> 
> Gotcha too. When my copy is finally finished, I will run a check and
> report back.
> 
> > As currently designed, squotas is quite dogmatic about never re-owning
> > an extent from the original creator. That is the core design conceit and
> > simplification that allows it to be fast. There are likely narrow cases
> 
> I got that part.
> What I was saying is some out of band way that would be slow and long,
> but only run rarely, to fix things that drifted.
> 
> You mentioned btrfs check, maybe a check --repair option to regenerate
> squotas on an existing filesystem (also awesome if you add squotas later
> and want them to be correct). For extra points, it would be awesome if
> it were while the filesystem remains online, even if that run takes
> days (since it would be a one time run after converting to squota, or a
> very occasional "fix things up to be all clean and accounted for")

My proposal for repair was to clean up clearly broken states like
scrubbing off the owner_refs for missing subvols (basically
conditionally do what the btrfstune did when you notice leaked
extents)

> 
> Is that possible at all? (separately from being worth your time, which
> I'd understand). The biggest plus I see is allowing many people to
> switch to squotas on existing FS without having to wipe and start over
> just to benefit from squota.

I think the tricky part is deciding who should own data blocks. It is,
in my opinion, impossible to arrive at a given FS and properly account
each data block to its originating subvol, with the same result as "as
if you turned on squotas at the start". I think necessary information
would be gone by now in even relatively simple cases involving reflinks.

You could pick arbitrarily, or you could try to make educated guesses
based on the owner of the enclosing metadata tree blocks and their
generations or something, but I think fundamentally it would be a lossy
process.

Perhaps we could add an ioctl that was something like "assign extent E
(or maybe file F's extents) to subvol S" and then userspace could assign
how they want. Or maybe even something subvol oriented like "squota
account subvol S" which would mean "S takes ownership of all unowned
extents reachable by S". And you could iterate your subvols in the order
you wanted. I like those ideas more than the kernel making fundamentally
arbitrary picks.

Ultimately, I would still be sort of worried about the resultant weird
state where you could have a shared metadata block owned by S1 and
shared with S2 (so S2 is a snapshot of S1 and the data must be from S1)
but then the data is accounted to S2. Nothing would freak out about this
now, I don't think, but it's sort of sloppy.

> 
> Thanks,
> Marc
> -- 
> "A mouse is a device used to point at the xterm you want to type in" - A.S.R.
>  
> Home page: http://marc.merlins.org/                       | PGP 7F55D5F27AAF9D08

  reply	other threads:[~2026-04-23 19:29 UTC|newest]

Thread overview: 52+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-04-11  3:35 BTRFS discard crash: failed to run delayed ref for logical 15506102321152 num_bytes 16384 type 182 action 2 ref_mod 1: -2 6.11.2) Marc MERLIN
2026-04-11  4:47 ` Qu Wenruo
2026-04-11 12:04 ` Roman Mamedov
2026-04-11 16:22   ` Marc MERLIN
2026-04-12  1:57 ` Marc MERLIN
2026-04-12  1:57   ` Marc MERLIN
2026-04-12  2:28   ` Marc MERLIN
2026-04-12  2:28     ` Marc MERLIN
2026-04-12 17:38     ` Marc MERLIN
2026-04-12 17:38       ` Marc MERLIN
2026-04-12 20:21       ` Marc MERLIN
2026-04-12 20:21         ` Marc MERLIN
2026-04-13  2:14         ` Roman Mamedov
2026-04-13  2:34           ` Marc MERLIN
2026-04-13  2:34             ` Marc MERLIN
2026-04-13 17:52 ` Simple quota unsafe? RIP: 0010:__btrfs_free_extent.isra.0+0xc41/0x1020 [btrfs] / do_free_extent_accounting:2999: errno=-2 No such entry Marc MERLIN
2026-04-13 17:52   ` Marc MERLIN
2026-04-13 18:47   ` Boris Burkov
2026-04-13 19:40     ` Marc MERLIN
2026-04-13 19:40       ` Marc MERLIN
2026-04-15  5:21       ` Marc MERLIN
2026-04-15 17:05         ` Boris Burkov
2026-04-15 17:59           ` Marc MERLIN
2026-04-15 18:44             ` Boris Burkov
2026-04-15 20:22               ` Marc MERLIN
2026-04-15 22:36                 ` Boris Burkov
2026-04-15 22:55                   ` Marc MERLIN
2026-04-15 23:25                     ` Boris Burkov
2026-04-16  0:55                       ` Marc MERLIN
2026-04-16  1:22                         ` Boris Burkov
2026-04-16  0:45                     ` Boris Burkov
2026-04-16  1:08                       ` Marc MERLIN
2026-04-16  1:25                         ` Boris Burkov
2026-04-16 16:51                           ` Simple quota unsafe (FIXED: btrfstune --remove-simple-quota worked) Marc MERLIN
2026-04-16 17:21                           ` Simple quota unsafe? RIP: 0010:__btrfs_free_extent.isra.0+0xc41/0x1020 [btrfs] / do_free_extent_accounting:2999: errno=-2 No such entry Marc MERLIN
2026-04-16 21:36                             ` Boris Burkov
2026-04-16 21:47                               ` Marc MERLIN
2026-04-17 21:51                                 ` Boris Burkov
2026-04-17 22:37                                   ` Marc MERLIN
2026-04-17 23:16                                     ` Boris Burkov
2026-04-18  0:18                                       ` Marc MERLIN
2026-04-22  2:26                                         ` Boris Burkov
2026-04-22  6:08                                           ` Marc MERLIN
2026-04-22 17:10                                           ` Deleted snapshots stay in squota, mayube because of bees? Marc MERLIN
2026-04-22 19:23                                             ` Boris Burkov
2026-04-22 19:30                                               ` Marc MERLIN
2026-04-22 19:38                                                 ` Boris Burkov
2026-04-22 20:11                                                   ` Marc MERLIN
2026-04-23 19:28                                                     ` Boris Burkov [this message]
2026-04-24  2:55                                                       ` Marc MERLIN
2026-04-17  3:43 ` BTRFS discard crash: failed to run delayed ref for logical 15506102321152 num_bytes 16384 type 182 action 2 ref_mod 1: -2 6.11.2) David Disseldorp
2026-04-17  5:19   ` Marc MERLIN

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20260423192831.GA2096001@zen.localdomain \
    --to=boris@bur.io \
    --cc=linux-btrfs@vger.kernel.org \
    --cc=marc_btrfs@merlins.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox