All of lore.kernel.org
 help / color / mirror / Atom feed
From: David Sterba <dsterba@suse.cz>
To: Qu Wenruo <wqu@suse.com>
Cc: linux-btrfs@vger.kernel.org
Subject: Re: [PATCH v2] btrfs: allow defrag to convert inline extents to regular extents
Date: Tue, 10 May 2022 13:55:42 +0200	[thread overview]
Message-ID: <20220510115542.GM18596@twin.jikos.cz> (raw)
In-Reply-To: <0606709d439b711a767ce1491f51f0113326d265.1652097509.git.wqu@suse.com>

On Mon, May 09, 2022 at 08:00:53PM +0800, Qu Wenruo wrote:
> Btrfs defaults to max_inline=2K to make small writes inlined into
> metadata.
> 
> The default value is always a win, as even DUP/RAID1/RAID10 doubles the
> metadata usage, it should still cause less physical space used compared
> to a 4K regular extents.
> 
> But since the introduce of RAID1C3 and RAID1C4 it's no longer the case,
> users may find inlined extents causing too much space wasted, and want
> to convert those inlined extents back to regular extents.
> 
> Unfortunately defrag will unconditionally skip all inline extents, no
> matter if the user is trying to converting them back to regular extents.
> 
> So this patch will add a small exception for defrag_collect_targets() to
> allow defragging inline extents, if and only if the inlined extents are
> larger than max_inline, allowing users to convert them to regular ones.
> 
> This also allows us to defrag extents like the following:
> 
> 	item 6 key (257 EXTENT_DATA 0) itemoff 15794 itemsize 69
> 		generation 7 type 0 (inline)
> 		inline extent data size 48 ram_bytes 4096 compression 1 (zlib)
> 	item 7 key (257 EXTENT_DATA 4096) itemoff 15741 itemsize 53
> 		generation 7 type 1 (regular)
> 		extent data disk byte 13631488 nr 4096
> 		extent data offset 0 nr 16384 ram 16384
> 		extent compression 1 (zlib)
> 
> Previously we're unable to do any defrag, since the first extent is
> inlined, and the second one has no extent to merge.
> 
> Now we can defrag it to just one single extent, saving 48 bytes metadata
> space.
> 
> 	item 6 key (257 EXTENT_DATA 0) itemoff 15810 itemsize 53
> 		generation 8 type 1 (regular)
> 		extent data disk byte 13635584 nr 4096
> 		extent data offset 0 nr 20480 ram 20480
> 		extent compression 1 (zlib)
> 
> Signed-off-by: Qu Wenruo <wqu@suse.com>
> ---
> Changelog:
> v2:
> - Re-phase why we add the inline extent without checking @next_mergeable
> 
> - Add some commit message on the new ability to handle mixed inline and
>   regular extents

Added to misc-next, with the updated comment, thanks.

      parent reply	other threads:[~2022-05-10 12:00 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-05-09 12:00 [PATCH v2] btrfs: allow defrag to convert inline extents to regular extents Qu Wenruo
2022-05-09 12:44 ` Filipe Manana
2022-05-10 11:55 ` David Sterba [this message]

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=20220510115542.GM18596@twin.jikos.cz \
    --to=dsterba@suse.cz \
    --cc=linux-btrfs@vger.kernel.org \
    --cc=wqu@suse.com \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.