From patchwork Mon Dec 9 19:46:03 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dennis Zhou X-Patchwork-Id: 11280175 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 4A93D138D for ; Mon, 9 Dec 2019 19:46:33 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 29C222073D for ; Mon, 9 Dec 2019 19:46:33 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1575920793; bh=Bba+cN5CMLoWQ5OFpycdpFVvXvAt9bf3jdJa1xVvsWI=; h=From:To:Cc:Subject:Date:In-Reply-To:References:In-Reply-To: References:List-ID:From; b=mPS/xcrAbEnu2dVgDbhn5Iy6Cz0rWEwIwrhDiRpCuLAjMDlYIMgxsoBj+aPscxiJ0 3VPEsHOs8UWF9XpAwcyNpeS4Pz4Rn4R/dtAk6N9stEcr9Py+E4RrWH7xpkFojUrQKD HJuZ4WHsjzy9BNB3GlAjM5fehdddPxSMVQfrQGuQ= Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726916AbfLITqb (ORCPT ); Mon, 9 Dec 2019 14:46:31 -0500 Received: from mail-pl1-f195.google.com ([209.85.214.195]:45304 "EHLO mail-pl1-f195.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726890AbfLITqa (ORCPT ); Mon, 9 Dec 2019 14:46:30 -0500 Received: by mail-pl1-f195.google.com with SMTP id w7so6212190plz.12 for ; Mon, 09 Dec 2019 11:46:30 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:in-reply-to:references; bh=z+63g65+RKcVcR5uWAB1cmMaOkxiHCfRgiQVI4OyzLs=; b=O1QBP8pCesDFyO24TxgNgjomVH8Qfyi3DW+1+Ah44ileS6XG9+XWDCG8T3Q/p/N3pR SDlwnM7WURUFaDGgAKBHJGFG0IObLOxJlIUUH2E/YLvAR0qkJH1zshQ/ae+yo3xtaw+h ocNLQzsQ18IWJ0xxMHb18GZN23P5jeFQf/9jGmygd0f/vfsva7Q0WAF9PIArbag2fkfg 9gKZHTBSMTnzu24DQe2JfvcHFCzikVk6zvRCmh0wcPzErAgjFUOVkenIwo5X/IqPZT15 /HqU+6MZ6uWHTQdhPfi+/nRuNAdByq/rmP9kPgm5Ujqd/J4+vkzgLj7v3lR9MqEeyCn5 xiMg== X-Gm-Message-State: APjAAAURnVVDKAQkE9RIMqSIJGorEQzlIF8mbZFPeU4UVcQ2x9jvYi4n fRGymvOG8w/uWPsL4kGLh68= X-Google-Smtp-Source: APXvYqy3QvGXOeKv60xOFHzDCfI8B9f7GPIhJv0SSEmqL6OxXGF8FUAQzFF6Ke6F3EL+cbTyHaFVKQ== X-Received: by 2002:a17:90a:26ab:: with SMTP id m40mr883327pje.42.1575920790029; Mon, 09 Dec 2019 11:46:30 -0800 (PST) Received: from dennisz-mbp.thefacebook.com ([199.201.64.138]) by smtp.gmail.com with ESMTPSA id b190sm282956pfg.66.2019.12.09.11.46.29 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Mon, 09 Dec 2019 11:46:29 -0800 (PST) From: Dennis Zhou To: David Sterba , Chris Mason , Josef Bacik , Omar Sandoval Cc: kernel-team@fb.com, linux-btrfs@vger.kernel.org, Dennis Zhou Subject: [PATCH 18/22] btrfs: only keep track of data extents for async discard Date: Mon, 9 Dec 2019 11:46:03 -0800 Message-Id: X-Mailer: git-send-email 2.13.5 In-Reply-To: References: In-Reply-To: References: Sender: linux-btrfs-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-btrfs@vger.kernel.org As mentioned earlier, discarding data can be done either by issuing an explicit discard or implicitly by reusing the LBA. Metadata chunks see much more frequent reuse due to well it being metadata. So instead of explicitly discarding metadata blocks, just leave them be and let the latter implicit discarding be done for them. Signed-off-by: Dennis Zhou Reviewed-by: Josef Bacik --- fs/btrfs/block-group.h | 6 ++++++ fs/btrfs/discard.c | 11 +++++++++-- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/fs/btrfs/block-group.h b/fs/btrfs/block-group.h index 601e1d217e22..ee8441439a56 100644 --- a/fs/btrfs/block-group.h +++ b/fs/btrfs/block-group.h @@ -182,6 +182,12 @@ static inline u64 btrfs_block_group_end(struct btrfs_block_group *block_group) return (block_group->start + block_group->length); } +static inline bool btrfs_is_block_group_data( + struct btrfs_block_group *block_group) +{ + return (block_group->flags & BTRFS_BLOCK_GROUP_DATA); +} + #ifdef CONFIG_BTRFS_DEBUG static inline int btrfs_should_fragment_free_space( struct btrfs_block_group *block_group) diff --git a/fs/btrfs/discard.c b/fs/btrfs/discard.c index 884dffd28596..55ad357e65f3 100644 --- a/fs/btrfs/discard.c +++ b/fs/btrfs/discard.c @@ -53,6 +53,9 @@ static void __add_to_discard_list(struct btrfs_discard_ctl *discard_ctl, static void add_to_discard_list(struct btrfs_discard_ctl *discard_ctl, struct btrfs_block_group *block_group) { + if (!btrfs_is_block_group_data(block_group)) + return; + spin_lock(&discard_ctl->lock); __add_to_discard_list(discard_ctl, block_group); @@ -168,7 +171,10 @@ static struct btrfs_block_group *peek_discard_list( if (block_group && now > block_group->discard_eligible_time) { if (block_group->discard_index == BTRFS_DISCARD_INDEX_UNUSED && block_group->used != 0) { - __add_to_discard_list(discard_ctl, block_group); + if (btrfs_is_block_group_data(block_group)) + __add_to_discard_list(discard_ctl, block_group); + else + list_del_init(&block_group->discard_list); goto again; } if (block_group->discard_state == BTRFS_DISCARD_RESET_CURSOR) { @@ -508,7 +514,8 @@ void btrfs_discard_update_discardable(struct btrfs_block_group *block_group, s64 bytes_delta; if (!block_group || - !btrfs_test_opt(block_group->fs_info, DISCARD_ASYNC)) + !btrfs_test_opt(block_group->fs_info, DISCARD_ASYNC) || + !btrfs_is_block_group_data(block_group)) return; discard_ctl = &block_group->fs_info->discard_ctl;