From: Josef Bacik <josef@toxicpanda.com>
To: Nikolay Borisov <nborisov@suse.com>,
linux-btrfs@vger.kernel.org, kernel-team@fb.com
Subject: Re: [PATCH 22/23] btrfs: flush delayed refs when trying to reserve data space
Date: Mon, 3 Feb 2020 11:24:37 -0500 [thread overview]
Message-ID: <29028d50-2050-fd87-dc4e-a87a7fd9e56e@toxicpanda.com> (raw)
In-Reply-To: <582cc578-6c48-67ed-bf74-856d1d6c2567@suse.com>
On 2/3/20 11:16 AM, Nikolay Borisov wrote:
>
>
> On 1.02.20 г. 0:36 ч., Josef Bacik wrote:
>> We can end up with free'd extents in the delayed refs, and thus
>> may_commit_transaction() may not think we have enough pinned space to
>> commit the transaction and we'll ENOSPC early. Handle this by running
>> the delayed refs in order to make sure pinned is uptodate before we try
>> to commit the transaction.
>>
>> Signed-off-by: Josef Bacik <josef@toxicpanda.com>
>
> Actually wouldn't it be better if the stages are structured:
>
> FLUSH_DELALLOC which potentially creates a bunch of delayed refs,
> FLUSH_DELAYED_REFS which in turn could free some reservations. Then IPUT
> to process anything from delayed refs running and finally committing
> transaction to reclaim pinned space?
>
It's more about doing the least amount of work for the largest chance of success.
Flushing delalloc will reclaim space in one of two ways, first the compression
case where we allocate less disk space than we had reserved, second the free'ing
of extents we drop when overwriting old space. In order to get that free'd
space we'd have to wait on delayed refs to make sure pinned was uptodate before
committing the transaction.
Running delayed iputs only reclaims space in the form of delayed refs flushing
and then committing the transaction to free that pinned area. So at this point
we have to run delayed refs. Running delayed refs isn't free, so I'd rather
just coalesce these two operations together and then run delayed refs so we're
completely sure we need to commit the transaction if we get to that point. Thanks,
Josef
next prev parent reply other threads:[~2020-02-03 16:24 UTC|newest]
Thread overview: 50+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-01-31 22:35 [PATCH 00/23][v2] Convert data reservations to the ticketing infrastructure Josef Bacik
2020-01-31 22:35 ` [PATCH 01/23] btrfs: change nr to u64 in btrfs_start_delalloc_roots Josef Bacik
2020-02-03 10:45 ` Johannes Thumshirn
2020-02-03 11:15 ` Nikolay Borisov
2020-01-31 22:35 ` [PATCH 02/23] btrfs: remove orig from shrink_delalloc Josef Bacik
2020-02-03 10:46 ` Johannes Thumshirn
2020-01-31 22:35 ` [PATCH 03/23] btrfs: handle U64_MAX for shrink_delalloc Josef Bacik
2020-02-03 11:01 ` Johannes Thumshirn
2020-02-03 11:05 ` Johannes Thumshirn
2020-01-31 22:35 ` [PATCH 04/23] btrfs: make shrink_delalloc take space_info as an arg Josef Bacik
2020-02-03 10:53 ` Johannes Thumshirn
2020-01-31 22:35 ` [PATCH 05/23] btrfs: make ALLOC_CHUNK use the space info flags Josef Bacik
2020-02-03 11:19 ` Johannes Thumshirn
2020-01-31 22:35 ` [PATCH 06/23] btrfs: call btrfs_try_granting_tickets when freeing reserved bytes Josef Bacik
2020-01-31 22:35 ` [PATCH 07/23] btrfs: call btrfs_try_granting_tickets when unpinning anything Josef Bacik
2020-02-03 11:24 ` Johannes Thumshirn
2020-01-31 22:35 ` [PATCH 08/23] btrfs: call btrfs_try_granting_tickets when reserving space Josef Bacik
2020-01-31 22:35 ` [PATCH 09/23] btrfs: use the btrfs_space_info_free_bytes_may_use helper for delalloc Josef Bacik
2020-02-03 14:46 ` Johannes Thumshirn
2020-01-31 22:36 ` [PATCH 10/23] btrfs: use btrfs_start_delalloc_roots in shrink_delalloc Josef Bacik
2020-02-03 12:03 ` Nikolay Borisov
2020-01-31 22:36 ` [PATCH 11/23] btrfs: check tickets after waiting on ordered extents Josef Bacik
2020-02-03 13:10 ` Nikolay Borisov
2020-02-03 15:57 ` Josef Bacik
2020-01-31 22:36 ` [PATCH 12/23] btrfs: add the data transaction commit logic into may_commit_transaction Josef Bacik
2020-02-03 14:00 ` Nikolay Borisov
2020-01-31 22:36 ` [PATCH 13/23] btrfs: add flushing states for handling data reservations Josef Bacik
2020-02-03 14:00 ` Nikolay Borisov
2020-01-31 22:36 ` [PATCH 14/23] btrfs: add btrfs_reserve_data_bytes and use it Josef Bacik
2020-02-03 14:20 ` Nikolay Borisov
2020-01-31 22:36 ` [PATCH 15/23] btrfs: use ticketing for data space reservations Josef Bacik
2020-02-03 14:29 ` Nikolay Borisov
2020-01-31 22:36 ` [PATCH 16/23] btrfs: serialize data reservations if we are flushing Josef Bacik
2020-02-03 15:06 ` Nikolay Borisov
2020-01-31 22:36 ` [PATCH 17/23] btrfs: use the same helper for data and metadata reservations Josef Bacik
2020-02-03 15:47 ` Nikolay Borisov
2020-01-31 22:36 ` [PATCH 18/23] btrfs: drop the commit_cycles stuff for data reservations Josef Bacik
2020-02-03 16:02 ` Nikolay Borisov
2020-01-31 22:36 ` [PATCH 19/23] btrfs: don't pass bytes_needed to may_commit_transaction Josef Bacik
2020-02-03 16:10 ` Nikolay Borisov
2020-01-31 22:36 ` [PATCH 20/23] btrfs: don't force commit if we are data Josef Bacik
2020-02-03 16:12 ` Nikolay Borisov
2020-01-31 22:36 ` [PATCH 21/23] btrfs: run delayed iputs before committing the transaction for data Josef Bacik
2020-02-03 16:13 ` Nikolay Borisov
2020-01-31 22:36 ` [PATCH 22/23] btrfs: flush delayed refs when trying to reserve data space Josef Bacik
2020-02-03 16:16 ` Nikolay Borisov
2020-02-03 16:24 ` Josef Bacik [this message]
2020-01-31 22:36 ` [PATCH 23/23] btrfs: do async reclaim for data reservations Josef Bacik
2020-02-03 17:19 ` Nikolay Borisov
2020-02-03 18:51 ` Josef Bacik
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=29028d50-2050-fd87-dc4e-a87a7fd9e56e@toxicpanda.com \
--to=josef@toxicpanda.com \
--cc=kernel-team@fb.com \
--cc=linux-btrfs@vger.kernel.org \
--cc=nborisov@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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox