Linux Btrfs filesystem development
 help / color / mirror / Atom feed
From: Marc MERLIN <marc_btrfs@merlins.org>
To: Boris Burkov <boris@bur.io>
Cc: linux-btrfs <linux-btrfs@vger.kernel.org>
Subject: Re: Simple quota unsafe? RIP: 0010:__btrfs_free_extent.isra.0+0xc41/0x1020 [btrfs] / do_free_extent_accounting:2999: errno=-2 No such entry
Date: Tue, 21 Apr 2026 23:08:22 -0700	[thread overview]
Message-ID: <aehl1o7AAeU17yoW@merlins.org> (raw)
In-Reply-To: <20260422022627.GA1034721@zen.localdomain>

On Tue, Apr 21, 2026 at 07:26:27PM -0700, Boris Burkov wrote:
> I believe I have reproduced the balance bug, and in my reproducer, the
> fact that the subvolume predated squota was critical.
> 
> reproducer sketch:
> - create subvol
> - write stuff
> - snapshot subvol
> - enable squota (usage = 0)
> - delete subvol (leave snapshot)
> - run a data balance that hits an extent in the snapshot (owned by subvol)
> - balance double counts extents in squotas (valid interpretation) but
>   critically, creates a new tree block with the old dead owner but a
>   fresh generation.
> - run_delayed_refs happens now, say from a commit running (important race),
>   writing that dangerous tree block to disk (in the reloc root)
> - we do the pointer swapping and drop the reloc root. the nodes of the
>   reloc tree are of this bogus form and cause your abort
> - I believe the snapshot also has some bogus leaves and would abort
>   later, too.
 
That does sound like my situation, yes.

> So the thing that is definitely dangerous, as far as I can tell, is
> running balance on a filesystem where squotas was enabled after any
> subvolume owning a shared extent (snapshot or reflink) was deleted.

so that's also good news where if I enable squota on a new FS at
creation time, that's supposed to be safe.
It would also explain why no one saw this bug since squota is only very
marginally useful when enabled way later on a filesytem which has seen a
lot of use.

> Now that I am at least clear on the more sophisticated bugs we have, I
> think that I am ready to put in some fixes and some defense in depth. I
> was feeling sheepish about just wallpapering over it without explaining
> your actual bug. So I think you should wait for that, to be safe with
> your big FS, even if it happens to not *need* the fixes.
 
I appreciate that, while I don't know the btrfs code, as a sysdadmin I
do not want to paper over anything without understanding the root cause
and applying a wrong or incomplete fix, so thank you.

> FYI
> I believe that when btrfs mounts a filesystem with qgroup trees present
> it will enable quotas, so you don't need to manually enable them if it
> was created with squotas.
 
It now looks like it, because I didn't find good documentation at the
time I tried to turn them on, I didn't know it could be done clearly at
mkfs.btrfs creation time.

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-22  6:08 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 [this message]
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
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=aehl1o7AAeU17yoW@merlins.org \
    --to=marc_btrfs@merlins.org \
    --cc=boris@bur.io \
    --cc=linux-btrfs@vger.kernel.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