All of lore.kernel.org
 help / color / mirror / Atom feed
From: Josef Bacik <josef@toxicpanda.com>
To: Nikolay Borisov <nborisov@suse.com>,
	linux-btrfs@vger.kernel.org, kernel-team@fb.com
Subject: Re: [PATCH 5/5] btrfs: run btrfs_try_granting_tickets if a priority ticket fails
Date: Fri, 13 Mar 2020 15:54:32 -0400	[thread overview]
Message-ID: <54608474-8d91-029a-6e3d-51af53c949c7@toxicpanda.com> (raw)
In-Reply-To: <43e5846b-17a4-8ff2-e6e1-26a3f201a672@suse.com>

On 3/10/20 6:32 AM, Nikolay Borisov wrote:
> 
> 
> On 9.03.20 г. 22:23 ч., Josef Bacik wrote:
>> With normal tickets we could have a large reservation at the front of
>> the list that is unable to be satisfied, but a smaller ticket later on
>> that can be satisfied.  The way we handle this is to run
>> btrfs_try_granting_tickets() in maybe_fail_all_tickets().
>>
>> However no such protection exists for priority tickets.  Fix this by
>> handling it in handle_reserve_ticket().  If we've returned after
>> attempting to flush space in a priority related way, we'll still be on
>> the priority list and need to be removed.
>>
>> We rely on the flushing to free up space and wake the ticket, but if
>> there is not enough space to reclaim _but_ there's enough space in the
>> space_info to handle subsequent reservations then we would have gotten
>> an ENOSPC erroneously.
>>
>> Address this by catching where we are still on the list, meaning we were
>> a priority ticket, and removing ourselves and then running
>> btrfs_try_granting_tickets().  This will handle this particular corner
>> case.
>>
>> Signed-off-by: Josef Bacik <josef@toxicpanda.com>
>> ---
>>   fs/btrfs/space-info.c | 14 ++++++++++----
>>   1 file changed, 10 insertions(+), 4 deletions(-)
>>
>> diff --git a/fs/btrfs/space-info.c b/fs/btrfs/space-info.c
>> index 77ea204f0b6a..03172ecd9c0b 100644
>> --- a/fs/btrfs/space-info.c
>> +++ b/fs/btrfs/space-info.c
>> @@ -1256,11 +1256,17 @@ static int handle_reserve_ticket(struct btrfs_fs_info *fs_info,
>>   	ret = ticket->error;
>>   	if (ticket->bytes || ticket->error) {
>>   		/*
>> -		 * Need to delete here for priority tickets. For regular tickets
>> -		 * either the async reclaim job deletes the ticket from the list
>> -		 * or we delete it ourselves at wait_reserve_ticket().
>> +		 * We were a priority ticket, so we need to delete ourselves
>> +		 * from the list.  Because we could have other priority tickets
>> +		 * behind us that require less space, run
>> +		 * btrfs_try_granting_tickets() to see if their reservations can
>> +		 * now be made.
>>   		 */
>> -		list_del_init(&ticket->list);
>> +		if (!list_empty(&ticket->list)) {
>> +			list_del_init(&ticket->list);
>> +			btrfs_try_granting_tickets(fs_info, space_info);
>> +		}
> 
> I'd rather have this handled in priority_reclaim_metadata_space.

I'd have to put it both in there and priority_reclaim_data_space, this is 
cleaner.  Thanks,

Josef

  reply	other threads:[~2020-03-13 19:54 UTC|newest]

Thread overview: 20+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-03-09 20:23 [PATCH 0/5] Deal with a few ENOSPC corner cases Josef Bacik
2020-03-09 20:23 ` [PATCH 1/5] btrfs: Improve global reserve stealing logic Josef Bacik
2020-03-09 20:48   ` Nikolay Borisov
2020-03-10 14:27   ` Nikolay Borisov
2020-03-09 20:23 ` [PATCH 2/5] btrfs: Account for trans_block_rsv in may_commit_transaction Josef Bacik
2020-03-09 20:44   ` Nikolay Borisov
2020-03-09 20:23 ` [PATCH 3/5] btrfs: only take normal tickets into account " Josef Bacik
2020-03-09 20:51   ` Nikolay Borisov
2020-03-09 23:13   ` Nikolay Borisov
2020-03-10 10:27   ` Nikolay Borisov
2020-03-09 20:23 ` [PATCH 4/5] btrfs: only check priority tickets for priority flushing Josef Bacik
2020-03-10 10:30   ` Nikolay Borisov
2020-03-09 20:23 ` [PATCH 5/5] btrfs: run btrfs_try_granting_tickets if a priority ticket fails Josef Bacik
2020-03-10 10:32   ` Nikolay Borisov
2020-03-13 19:54     ` Josef Bacik [this message]
2020-03-10 17:28 ` [PATCH 0/5] Deal with a few ENOSPC corner cases Nikolay Borisov
2020-03-11  1:45   ` David Sterba
2020-03-13 12:37     ` Nikolay Borisov
2020-03-13 19:58 [PATCH 0/5][v2] " Josef Bacik
2020-03-13 19:58 ` [PATCH 5/5] btrfs: run btrfs_try_granting_tickets if a priority ticket fails Josef Bacik
2020-03-17 12:59   ` Nikolay Borisov

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=54608474-8d91-029a-6e3d-51af53c949c7@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 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.