From patchwork Fri Aug 5 14:14:52 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josef Bacik X-Patchwork-Id: 12937324 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 14198C25B08 for ; Fri, 5 Aug 2022 14:15:15 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S240918AbiHEOPN (ORCPT ); Fri, 5 Aug 2022 10:15:13 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:45940 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240901AbiHEOPG (ORCPT ); Fri, 5 Aug 2022 10:15:06 -0400 Received: from mail-qt1-x82c.google.com (mail-qt1-x82c.google.com [IPv6:2607:f8b0:4864:20::82c]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id A68B558B75 for ; Fri, 5 Aug 2022 07:15:04 -0700 (PDT) Received: by mail-qt1-x82c.google.com with SMTP id h7so2125254qtu.2 for ; Fri, 05 Aug 2022 07:15:04 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=toxicpanda-com.20210112.gappssmtp.com; s=20210112; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=tpyuaUWUEr/HvjX02hJmxRhH53TwNp0wUJb9DBCHLNY=; b=nBc3EWzRaKyL8zZG7396mDvBQD4CIyjindesEGw/8KU2XQA0TodtIJ3zQZi0E/Hi9x s5AeT5Sg1QVlNk6YipN7qvGmpYAGRzNPnmkHln+vDcKmlWdwhQo7gvW2NDUsj0FeeIM8 XvT++Vaev3awNDikMQl7wdQihL8/qXcWMHUWsMqdN9FL0dbFOk84t0/90PxatOt/jfdH VsPA7GWYyr8XjGTeQ1HsPonv+YnKl1XGxae+saYFEZVVjRJD76PluI9k6HIv3NrnfpiD 6TEHnFRCZttulX5JRNfX9i6y7WBrpZNK0As6DBZEgxVY2HMef+hrgtndTxvlu7Y0eYlY vhSw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=tpyuaUWUEr/HvjX02hJmxRhH53TwNp0wUJb9DBCHLNY=; b=J/Ro2TmJ/M55BKedL78qsb3rlTc2HrNH+ByMmJSb5OfkseBaAktkaCiwcLeA8RF2cP o88avgJusUJFlpmGjpVG5FoQaGENDrxoHm/6jBMM5pp5TQ03MvTMkzkeJF36iIBou9UO BFVm4+YWzA24ZwUej30AGcovqOeJ6p1ZuQ8sIWwtTQSVHxsqLM5FB0wnf5WqPeUL/yNS +369ivdWXtT2OE2rTzy8ykjatSnFstH+4h8PZkyb5/t1kzgbUi63fQrYGxqL2D1UYd4C hDBrPf3ieGPDBtWH56IFNM6rwxPl3yDXSYARWrEhySkKOjH3TL8/TORWWU5Gc3T/Opfm FgIw== X-Gm-Message-State: ACgBeo2WAljyS1ONSCcYP2r/UZskpmWxCOulXoMFNy4vOSPmKu0gLiEp 25LR86YUtObhLg7jxJ3CT3AHhy8S4TF2wg== X-Google-Smtp-Source: AA6agR4jM0xxCcsa7wR0/FVyxraIZFxIwKxhto9Rb93zaZQY5QONeHw1WVgEqQDs7alqbV/XBqGIDQ== X-Received: by 2002:ac8:5708:0:b0:31f:d02:ff83 with SMTP id 8-20020ac85708000000b0031f0d02ff83mr6033321qtw.555.1659708903444; Fri, 05 Aug 2022 07:15:03 -0700 (PDT) Received: from localhost (cpe-174-109-172-136.nc.res.rr.com. [174.109.172.136]) by smtp.gmail.com with ESMTPSA id l22-20020ac848d6000000b003051f450049sm2634839qtr.8.2022.08.05.07.15.02 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 05 Aug 2022 07:15:03 -0700 (PDT) From: Josef Bacik To: linux-btrfs@vger.kernel.org, kernel-team@fb.com Subject: [PATCH v3 1/9] btrfs: use btrfs_fs_closing for background bg work Date: Fri, 5 Aug 2022 10:14:52 -0400 Message-Id: X-Mailer: git-send-email 2.26.3 In-Reply-To: References: MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-btrfs@vger.kernel.org For both unused bg deletion and async balance work we'll happily run if the fs is closing. However I want to move these to their own worker thread, and they can be long running jobs, so add a check to see if we're closing and simply bail. Signed-off-by: Josef Bacik --- fs/btrfs/block-group.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/fs/btrfs/block-group.c b/fs/btrfs/block-group.c index 993aca2f1e18..fd3bf13d5b40 100644 --- a/fs/btrfs/block-group.c +++ b/fs/btrfs/block-group.c @@ -1321,6 +1321,9 @@ void btrfs_delete_unused_bgs(struct btrfs_fs_info *fs_info) if (!test_bit(BTRFS_FS_OPEN, &fs_info->flags)) return; + if (btrfs_fs_closing(fs_info)) + return; + /* * Long running balances can keep us blocked here for eternity, so * simply skip deletion if we're unable to get the mutex. @@ -1560,6 +1563,9 @@ void btrfs_reclaim_bgs_work(struct work_struct *work) if (!test_bit(BTRFS_FS_OPEN, &fs_info->flags)) return; + if (btrfs_fs_closing(fs_info)) + return; + if (!btrfs_should_reclaim(fs_info)) return; From patchwork Fri Aug 5 14:14:53 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josef Bacik X-Patchwork-Id: 12937332 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id E18B4C19F2D for ; Fri, 5 Aug 2022 14:15:24 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S240767AbiHEOPX (ORCPT ); Fri, 5 Aug 2022 10:15:23 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:46120 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240928AbiHEOPT (ORCPT ); Fri, 5 Aug 2022 10:15:19 -0400 Received: from mail-io1-xd2a.google.com (mail-io1-xd2a.google.com [IPv6:2607:f8b0:4864:20::d2a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 73BD0E06 for ; Fri, 5 Aug 2022 07:15:16 -0700 (PDT) Received: by mail-io1-xd2a.google.com with SMTP id d139so1999409iof.4 for ; Fri, 05 Aug 2022 07:15:16 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=toxicpanda-com.20210112.gappssmtp.com; s=20210112; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=M5mKYfj9LKNxcTja+WNSM/UgZiSnO1ml+in4pdevVgs=; b=68mGwpgC5Yyz7xTx1laI2TEF5Jeo3iEjZwCAqc5yMsoL1FucuaJh6wJRgBmviuJpl6 LS4oYSA9RlI9KkWaRQMxHYKMSAxE+HxYtTPbjPQ7DqYpiP8+376jgPoPKod5mpxPilwJ 7pDDkSN2yG72EsY3yhSqlwGDNJ7dt33mvqvuHXXo4QsAe/5KNd89f6dfV+zPv2WvbC+x G3z419PG9viSq9ddokoBN1Jg531Zl+TIO7VMHuTXmvj5cbKe73Tsy4+icDjIJUXCu23m IbfDit3r6TGxPqD0x/3XpKqvs2HiQoIl1YcH77ynByQhtyhm913WfZDTcSStQQiPagGd xpUA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=M5mKYfj9LKNxcTja+WNSM/UgZiSnO1ml+in4pdevVgs=; b=yMNHVvnRipaKN5WAjNYkVbeezrX03eJZy4jb2uiQeZHJFuXjC6u4f2qJJAqQv7WaAh Jh2EaQZ4DJ/Ca4sMTKkXlIKWxLYEWtXNoZiY7NIpvRYcm1yFNzG4kbzRnlMc5l6PgaRi LcX4VB9d50IX12DhbAyliw5EiNsEQju53DdFjHgUjX+jS6XdAJ8HkM2HH/oyr6Ek1d3R IxxqLlYMoJktnpVmcGczZ+RCgI1xnEz3XDwd90box7qeyZVE9SAIJ17KzTdgP9yQTlyw 55yaaGL9CZleTDyTCHg7ugthF6Q+twO5k9zYfTpB+apmAwjuttexp9PV6WH/ksPR/J6s 3oBA== X-Gm-Message-State: ACgBeo3nzKjv8Bow97C6aBF0aQyskh+Mov+1olM/ZhC7v+l3FUSUUXVZ 21quF6ILb9zn4YCXAOjfMpMsSPD0mGhVfQ== X-Google-Smtp-Source: AA6agR6NhWl+dU9Vv1xgfyarKCVcFljeZdSRadmHr4rjgPRp6IWQsSOGey9qjMS1ZRbsDp3URZanaA== X-Received: by 2002:a05:620a:424d:b0:6a7:9714:9443 with SMTP id w13-20020a05620a424d00b006a797149443mr5164884qko.544.1659708904803; Fri, 05 Aug 2022 07:15:04 -0700 (PDT) Received: from localhost (cpe-174-109-172-136.nc.res.rr.com. [174.109.172.136]) by smtp.gmail.com with ESMTPSA id d3-20020a05620a158300b006b5e3ca6400sm2760122qkk.103.2022.08.05.07.15.04 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 05 Aug 2022 07:15:04 -0700 (PDT) From: Josef Bacik To: linux-btrfs@vger.kernel.org, kernel-team@fb.com Subject: [PATCH v3 2/9] btrfs: simplify btrfs_update_space_info Date: Fri, 5 Aug 2022 10:14:53 -0400 Message-Id: X-Mailer: git-send-email 2.26.3 In-Reply-To: References: MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-btrfs@vger.kernel.org This function has grown a bunch of new arguments, and it just boils down to passing in all the block group fields as arguments. Simplify this by passing in the block group itself and updating the space_info fields based on the block group fields directly. Signed-off-by: Josef Bacik --- fs/btrfs/block-group.c | 28 +++++++++++----------------- fs/btrfs/space-info.c | 29 ++++++++++++++--------------- fs/btrfs/space-info.h | 7 +++---- 3 files changed, 28 insertions(+), 36 deletions(-) diff --git a/fs/btrfs/block-group.c b/fs/btrfs/block-group.c index fd3bf13d5b40..9790f01de93e 100644 --- a/fs/btrfs/block-group.c +++ b/fs/btrfs/block-group.c @@ -2118,10 +2118,7 @@ static int read_one_block_group(struct btrfs_fs_info *info, goto error; } trace_btrfs_add_block_group(info, cache, 0); - btrfs_update_space_info(info, cache->flags, cache->length, - cache->used, cache->bytes_super, - cache->zone_unusable, cache->zone_is_active, - &space_info); + btrfs_add_bg_to_space_info(info, cache, &space_info); cache->space_info = space_info; @@ -2190,8 +2187,7 @@ static int fill_dummy_bgs(struct btrfs_fs_info *fs_info) break; } - btrfs_update_space_info(fs_info, bg->flags, em->len, em->len, - 0, 0, false, &space_info); + btrfs_add_bg_to_space_info(fs_info, bg, &space_info); bg->space_info = space_info; link_block_group(bg); @@ -2542,14 +2538,6 @@ struct btrfs_block_group *btrfs_make_block_group(struct btrfs_trans_handle *tran btrfs_free_excluded_extents(cache); -#ifdef CONFIG_BTRFS_DEBUG - if (btrfs_should_fragment_free_space(cache)) { - u64 new_bytes_used = size - bytes_used; - - bytes_used += new_bytes_used >> 1; - fragment_free_space(cache); - } -#endif /* * Ensure the corresponding space_info object is created and * assigned to our block group. We want our bg to be added to the rbtree @@ -2570,11 +2558,17 @@ struct btrfs_block_group *btrfs_make_block_group(struct btrfs_trans_handle *tran * the rbtree, update the space info's counters. */ trace_btrfs_add_block_group(fs_info, cache, 1); - btrfs_update_space_info(fs_info, cache->flags, size, bytes_used, - cache->bytes_super, cache->zone_unusable, - cache->zone_is_active, &cache->space_info); + btrfs_add_bg_to_space_info(fs_info, cache, &cache->space_info); btrfs_update_global_block_rsv(fs_info); +#ifdef CONFIG_BTRFS_DEBUG + if (btrfs_should_fragment_free_space(cache)) { + u64 new_bytes_used = size - bytes_used; + + cache->space_info->bytes_used += new_bytes_used >> 1; + fragment_free_space(cache); + } +#endif link_block_group(cache); list_add_tail(&cache->bg_list, &trans->new_bgs); diff --git a/fs/btrfs/space-info.c b/fs/btrfs/space-info.c index d0cbeb7ae81c..a9433d19d827 100644 --- a/fs/btrfs/space-info.c +++ b/fs/btrfs/space-info.c @@ -293,28 +293,27 @@ int btrfs_init_space_info(struct btrfs_fs_info *fs_info) return ret; } -void btrfs_update_space_info(struct btrfs_fs_info *info, u64 flags, - u64 total_bytes, u64 bytes_used, - u64 bytes_readonly, u64 bytes_zone_unusable, - bool active, struct btrfs_space_info **space_info) +void btrfs_add_bg_to_space_info(struct btrfs_fs_info *info, + struct btrfs_block_group *block_group, + struct btrfs_space_info **space_info) { struct btrfs_space_info *found; int factor; - factor = btrfs_bg_type_to_factor(flags); + factor = btrfs_bg_type_to_factor(block_group->flags); - found = btrfs_find_space_info(info, flags); + found = btrfs_find_space_info(info, block_group->flags); ASSERT(found); spin_lock(&found->lock); - found->total_bytes += total_bytes; - if (active) - found->active_total_bytes += total_bytes; - found->disk_total += total_bytes * factor; - found->bytes_used += bytes_used; - found->disk_used += bytes_used * factor; - found->bytes_readonly += bytes_readonly; - found->bytes_zone_unusable += bytes_zone_unusable; - if (total_bytes > 0) + found->total_bytes += block_group->length; + if (block_group->zone_is_active) + found->active_total_bytes += block_group->length; + found->disk_total += block_group->length * factor; + found->bytes_used += block_group->used; + found->disk_used += block_group->used * factor; + found->bytes_readonly += block_group->bytes_super; + found->bytes_zone_unusable += block_group->zone_unusable; + if (block_group->length > 0) found->full = 0; btrfs_try_granting_tickets(info, found); spin_unlock(&found->lock); diff --git a/fs/btrfs/space-info.h b/fs/btrfs/space-info.h index 12fd6147f92d..101e83828ee5 100644 --- a/fs/btrfs/space-info.h +++ b/fs/btrfs/space-info.h @@ -123,10 +123,9 @@ DECLARE_SPACE_INFO_UPDATE(bytes_may_use, "space_info"); DECLARE_SPACE_INFO_UPDATE(bytes_pinned, "pinned"); int btrfs_init_space_info(struct btrfs_fs_info *fs_info); -void btrfs_update_space_info(struct btrfs_fs_info *info, u64 flags, - u64 total_bytes, u64 bytes_used, - u64 bytes_readonly, u64 bytes_zone_unusable, - bool active, struct btrfs_space_info **space_info); +void btrfs_add_bg_to_space_info(struct btrfs_fs_info *info, + struct btrfs_block_group *block_group, + struct btrfs_space_info **space_info); void btrfs_update_space_info_chunk_size(struct btrfs_space_info *space_info, u64 chunk_size); struct btrfs_space_info *btrfs_find_space_info(struct btrfs_fs_info *info, From patchwork Fri Aug 5 14:14:54 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josef Bacik X-Patchwork-Id: 12937325 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 67BA7C25B0C for ; Fri, 5 Aug 2022 14:15:16 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S240913AbiHEOPO (ORCPT ); Fri, 5 Aug 2022 10:15:14 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:45940 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240912AbiHEOPM (ORCPT ); Fri, 5 Aug 2022 10:15:12 -0400 Received: from mail-qk1-x731.google.com (mail-qk1-x731.google.com [IPv6:2607:f8b0:4864:20::731]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 08ED95724C for ; Fri, 5 Aug 2022 07:15:07 -0700 (PDT) Received: by mail-qk1-x731.google.com with SMTP id a2so1949497qkk.2 for ; Fri, 05 Aug 2022 07:15:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=toxicpanda-com.20210112.gappssmtp.com; s=20210112; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=57qCfcsItQsdOjii2/x/L4L4WxHB5ORjui4nrT085gA=; b=UBTzlXjUS13uj2f7WtrTfOi4KuoPEZaGwRbH65POJgw1NsPi82mYrm7s9tqU4TNujG aRQ8obInj9+KDy72OV7XPxDDIaWvYqgLkPD5gv3PlyYlvhD6cimqMSVt/mMI1a3xRabp NIu3uAxoAXzGegzNAbwU3ElgpHRcLL4864diUOesuz643THfU1JyDd6vV+ZA9HDi58jz 2Y92xZUc/zWOne1w4G3LlsuHPGIb/U9QJ3Gr1mFOCSjycRJLq9fmzMtiAyYp4nysdPVj DlPJpSHCc3g19BhH+7of48xRX8qtABzg8MalpNPosfedMC8gs5Yp3XvzQxUhNqFlz/h1 OShA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=57qCfcsItQsdOjii2/x/L4L4WxHB5ORjui4nrT085gA=; b=BX3cWKmGF6GKA+BsozMRmTLdFIJGCTOAwqpuY/GiJpxcjmrpgJGwSOyhAKwa12vvHL 3P4sAHF1I43uo9A9cRCUSe93ed0FKdIAxk97FCnIjKkX56RA+AmBP1G128RqNP2CIO1/ cvrqGl6dGfORCjWFof31L3jTSGo8gIWgdWB1xVeVjClcEUp6vgMVbDo0rdrZ+Ek8Blk+ i404/5mq4XpqcdRDWhl9oSBg7D5JgQNGtLFrjvDpKWdrJ5EMQon2vfiKA+SqQKAQvQ2o bK+rfT4piO0FKCg6k3QSdF2Epc2lWSsdo4bQJZqqkfCpSFGcBXOf3O4Sl2cHPdTU/tRs XIRw== X-Gm-Message-State: ACgBeo2S3rXecShYo7XyK0FRIk6JjjwHyBuNzmcgF4LlV3nYhNOr2toh FCx4yBoG2Yx4gzMzgjXKZaAFlr2K0uSB+w== X-Google-Smtp-Source: AA6agR4B1Ni1g+KRby4CSXHkKPw8+kQq9936fYt5DEq5wm8Q17pUugdt9lCKHew6NPHvgcwo2nyKXA== X-Received: by 2002:ae9:e102:0:b0:6b8:f8e6:7f8d with SMTP id g2-20020ae9e102000000b006b8f8e67f8dmr4953243qkm.139.1659708906010; Fri, 05 Aug 2022 07:15:06 -0700 (PDT) Received: from localhost (cpe-174-109-172-136.nc.res.rr.com. [174.109.172.136]) by smtp.gmail.com with ESMTPSA id y17-20020a05620a25d100b006b627d42616sm3033784qko.35.2022.08.05.07.15.05 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 05 Aug 2022 07:15:05 -0700 (PDT) From: Josef Bacik To: linux-btrfs@vger.kernel.org, kernel-team@fb.com Subject: [PATCH v3 3/9] btrfs: handle space_info setting of bg in btrfs_add_bg_to_space_info Date: Fri, 5 Aug 2022 10:14:54 -0400 Message-Id: <516660b8cd99f8d0ed090c5554b4390bc32d0b02.1659708822.git.josef@toxicpanda.com> X-Mailer: git-send-email 2.26.3 In-Reply-To: References: MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-btrfs@vger.kernel.org We previously had the pattern of btrfs_update_space_info(all, the, bg, fields, &space_info); link_block_group(bg); bg->space_info = space_info; Now that we're passing the bg into btrfs_add_bg_to_space_info we can do the linking in that function, transforming this to simply btrfs_add_bg_to_space_info(fs_info, bg); and put the link_block_group() and bg->space_info assignment directly in btrfs_add_bg_to_space_info. Signed-off-by: Josef Bacik --- fs/btrfs/block-group.c | 25 +++---------------------- fs/btrfs/space-info.c | 13 +++++++++---- fs/btrfs/space-info.h | 3 +-- 3 files changed, 13 insertions(+), 28 deletions(-) diff --git a/fs/btrfs/block-group.c b/fs/btrfs/block-group.c index 9790f01de93e..5f062c5d3b6f 100644 --- a/fs/btrfs/block-group.c +++ b/fs/btrfs/block-group.c @@ -1913,16 +1913,6 @@ static int exclude_super_stripes(struct btrfs_block_group *cache) return 0; } -static void link_block_group(struct btrfs_block_group *cache) -{ - struct btrfs_space_info *space_info = cache->space_info; - int index = btrfs_bg_flags_to_raid_index(cache->flags); - - down_write(&space_info->groups_sem); - list_add_tail(&cache->list, &space_info->block_groups[index]); - up_write(&space_info->groups_sem); -} - static struct btrfs_block_group *btrfs_create_block_group_cache( struct btrfs_fs_info *fs_info, u64 start) { @@ -2025,7 +2015,6 @@ static int read_one_block_group(struct btrfs_fs_info *info, int need_clear) { struct btrfs_block_group *cache; - struct btrfs_space_info *space_info; const bool mixed = btrfs_fs_incompat(info, MIXED_GROUPS); int ret; @@ -2118,11 +2107,7 @@ static int read_one_block_group(struct btrfs_fs_info *info, goto error; } trace_btrfs_add_block_group(info, cache, 0); - btrfs_add_bg_to_space_info(info, cache, &space_info); - - cache->space_info = space_info; - - link_block_group(cache); + btrfs_add_bg_to_space_info(info, cache); set_avail_alloc_bits(info, cache->flags); if (btrfs_chunk_writeable(info, cache->start)) { @@ -2146,7 +2131,6 @@ static int read_one_block_group(struct btrfs_fs_info *info, static int fill_dummy_bgs(struct btrfs_fs_info *fs_info) { struct extent_map_tree *em_tree = &fs_info->mapping_tree; - struct btrfs_space_info *space_info; struct rb_node *node; int ret = 0; @@ -2187,9 +2171,7 @@ static int fill_dummy_bgs(struct btrfs_fs_info *fs_info) break; } - btrfs_add_bg_to_space_info(fs_info, bg, &space_info); - bg->space_info = space_info; - link_block_group(bg); + btrfs_add_bg_to_space_info(fs_info, bg); set_avail_alloc_bits(fs_info, bg->flags); } @@ -2558,7 +2540,7 @@ struct btrfs_block_group *btrfs_make_block_group(struct btrfs_trans_handle *tran * the rbtree, update the space info's counters. */ trace_btrfs_add_block_group(fs_info, cache, 1); - btrfs_add_bg_to_space_info(fs_info, cache, &cache->space_info); + btrfs_add_bg_to_space_info(fs_info, cache); btrfs_update_global_block_rsv(fs_info); #ifdef CONFIG_BTRFS_DEBUG @@ -2569,7 +2551,6 @@ struct btrfs_block_group *btrfs_make_block_group(struct btrfs_trans_handle *tran fragment_free_space(cache); } #endif - link_block_group(cache); list_add_tail(&cache->bg_list, &trans->new_bgs); trans->delayed_ref_updates++; diff --git a/fs/btrfs/space-info.c b/fs/btrfs/space-info.c index a9433d19d827..f89aa49f53d4 100644 --- a/fs/btrfs/space-info.c +++ b/fs/btrfs/space-info.c @@ -294,11 +294,10 @@ int btrfs_init_space_info(struct btrfs_fs_info *fs_info) } void btrfs_add_bg_to_space_info(struct btrfs_fs_info *info, - struct btrfs_block_group *block_group, - struct btrfs_space_info **space_info) + struct btrfs_block_group *block_group) { struct btrfs_space_info *found; - int factor; + int factor, index; factor = btrfs_bg_type_to_factor(block_group->flags); @@ -317,7 +316,13 @@ void btrfs_add_bg_to_space_info(struct btrfs_fs_info *info, found->full = 0; btrfs_try_granting_tickets(info, found); spin_unlock(&found->lock); - *space_info = found; + + block_group->space_info = found; + + index = btrfs_bg_flags_to_raid_index(block_group->flags); + down_write(&found->groups_sem); + list_add_tail(&block_group->list, &found->block_groups[index]); + up_write(&found->groups_sem); } struct btrfs_space_info *btrfs_find_space_info(struct btrfs_fs_info *info, diff --git a/fs/btrfs/space-info.h b/fs/btrfs/space-info.h index 101e83828ee5..2039096803ed 100644 --- a/fs/btrfs/space-info.h +++ b/fs/btrfs/space-info.h @@ -124,8 +124,7 @@ DECLARE_SPACE_INFO_UPDATE(bytes_pinned, "pinned"); int btrfs_init_space_info(struct btrfs_fs_info *fs_info); void btrfs_add_bg_to_space_info(struct btrfs_fs_info *info, - struct btrfs_block_group *block_group, - struct btrfs_space_info **space_info); + struct btrfs_block_group *block_group); void btrfs_update_space_info_chunk_size(struct btrfs_space_info *space_info, u64 chunk_size); struct btrfs_space_info *btrfs_find_space_info(struct btrfs_fs_info *info, From patchwork Fri Aug 5 14:14:55 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josef Bacik X-Patchwork-Id: 12937326 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id E28D8C00140 for ; Fri, 5 Aug 2022 14:15:17 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S240915AbiHEOPQ (ORCPT ); Fri, 5 Aug 2022 10:15:16 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:45990 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240906AbiHEOPN (ORCPT ); Fri, 5 Aug 2022 10:15:13 -0400 Received: from mail-qv1-xf32.google.com (mail-qv1-xf32.google.com [IPv6:2607:f8b0:4864:20::f32]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 00AB65B7A1 for ; Fri, 5 Aug 2022 07:15:08 -0700 (PDT) Received: by mail-qv1-xf32.google.com with SMTP id q3so1825909qvp.5 for ; Fri, 05 Aug 2022 07:15:08 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=toxicpanda-com.20210112.gappssmtp.com; s=20210112; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=X4wVgbe3qe1ltUu0nTkT2sbl8LKLkqfpzbqBfMqtmtM=; b=whpSBXhzQft/9Dz6NhSSYV+sqCA9yJ6e52WKDm+9DoHnZiolI5IV0ow3ljI4prO+Xi mnHCZjqUKOqSYuOQS+BTeTr20+HeaBfFboMAaz156n0d7LTwefvICrvyldvht4YKU4o8 IHujEJN21mAm/iExiamxxnosHVccf+DM0qTSuH7l5j1lpLKSGozsjhJJFHmZYzhWfLTL RiJmr5r+JChm66adMxrAG7GIn4a/8stkuEMtiPEXLDqAfDMVvwi7TJ2Xs5dvEW9dhjb1 f0/QCyXK99pVgfvXOi5S90Ivi4JXbvQj6AS4SmZO9swoITBrl+zE8ly1KGogrckstMra +RXQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=X4wVgbe3qe1ltUu0nTkT2sbl8LKLkqfpzbqBfMqtmtM=; b=vWmDpGV6NWn0FBf+bJ5v94jt6l0E+O2068V2r70oAHXGSIn7aJqSyNQuS8YrvkyG4/ ynDGNXk/NHthMFMVcblV6NK6cucXt+xy9GHsfrKy77TB8lp3GrhaNU2I4/UmpxSHFHn/ Hqz+SRkcm5Xc101ZyQKyT1v9U0pYtEVq9Ca7iMUBpGRSaYqAiVLoiHKWSvOlNxBv+Nf0 PFzkJo4sTzQo/88kMDQpqlrOsSrnnNHod3KNLsrRWFkbgm/kHXz7JWApCAd2AzNvO2kn ZZhtAHU9xSTXGxegllalzjDD3+O8PhhGMev8SqhNbd2gBy3MajU+6FISm1uUQO7nLgWl jxjw== X-Gm-Message-State: ACgBeo3TcZsFZ38KpL9+z69t8cinnjYm+sdgBHG/DTWZjbJil7NJMMIq AoPFFcosbP1jDcJcJoTODrLadeqdfF2sSg== X-Google-Smtp-Source: AA6agR5knR0/9x+pfKnkcqeVzApz+aR7lmWDYFKe5iQi6QlNu0CUVidlfgL4zzYnZ/gAvGRJcBX6KQ== X-Received: by 2002:ad4:5967:0:b0:476:b16b:3b22 with SMTP id eq7-20020ad45967000000b00476b16b3b22mr5727892qvb.30.1659708907273; Fri, 05 Aug 2022 07:15:07 -0700 (PDT) Received: from localhost (cpe-174-109-172-136.nc.res.rr.com. [174.109.172.136]) by smtp.gmail.com with ESMTPSA id g18-20020a05620a40d200b006b5f9b7ac87sm3486288qko.26.2022.08.05.07.15.06 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 05 Aug 2022 07:15:06 -0700 (PDT) From: Josef Bacik To: linux-btrfs@vger.kernel.org, kernel-team@fb.com Subject: [PATCH v3 4/9] btrfs: convert block group bit field to use bit helpers Date: Fri, 5 Aug 2022 10:14:55 -0400 Message-Id: <6fd91db0572ea748ab9cd965d91dabdd8c1b5f35.1659708822.git.josef@toxicpanda.com> X-Mailer: git-send-email 2.26.3 In-Reply-To: References: MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-btrfs@vger.kernel.org We use a bit field in the btrfs_block_group for different flags, however this is awkward because we have to hold the block_group->lock for any modification of any of these fields, and makes the code clunky for a few of these flags. Convert these to a properly flags setup so we can utilize the bit helpers. Signed-off-by: Josef Bacik --- fs/btrfs/block-group.c | 27 +++++++++++++++++---------- fs/btrfs/block-group.h | 20 ++++++++++++-------- fs/btrfs/dev-replace.c | 6 +++--- fs/btrfs/extent-tree.c | 7 +++++-- fs/btrfs/free-space-cache.c | 18 +++++++++--------- fs/btrfs/scrub.c | 13 +++++++------ fs/btrfs/space-info.c | 2 +- fs/btrfs/volumes.c | 11 ++++++----- fs/btrfs/zoned.c | 34 ++++++++++++++++++++++------------ 9 files changed, 82 insertions(+), 56 deletions(-) diff --git a/fs/btrfs/block-group.c b/fs/btrfs/block-group.c index 5f062c5d3b6f..8fd54f4dd2de 100644 --- a/fs/btrfs/block-group.c +++ b/fs/btrfs/block-group.c @@ -789,7 +789,7 @@ int btrfs_cache_block_group(struct btrfs_block_group *cache, int load_cache_only cache->cached = BTRFS_CACHE_FAST; else cache->cached = BTRFS_CACHE_STARTED; - cache->has_caching_ctl = 1; + set_bit(BLOCK_GROUP_FLAG_HAS_CACHING_CTL, &cache->runtime_flags); spin_unlock(&cache->lock); write_lock(&fs_info->block_group_cache_lock); @@ -1005,11 +1005,14 @@ int btrfs_remove_block_group(struct btrfs_trans_handle *trans, kobject_put(kobj); } - if (block_group->has_caching_ctl) + + if (test_bit(BLOCK_GROUP_FLAG_HAS_CACHING_CTL, + &block_group->runtime_flags)) caching_ctl = btrfs_get_caching_control(block_group); if (block_group->cached == BTRFS_CACHE_STARTED) btrfs_wait_block_group_cache_done(block_group); - if (block_group->has_caching_ctl) { + if (test_bit(BLOCK_GROUP_FLAG_HAS_CACHING_CTL, + &block_group->runtime_flags)) { write_lock(&fs_info->block_group_cache_lock); if (!caching_ctl) { struct btrfs_caching_control *ctl; @@ -1051,12 +1054,13 @@ int btrfs_remove_block_group(struct btrfs_trans_handle *trans, < block_group->zone_unusable); WARN_ON(block_group->space_info->disk_total < block_group->length * factor); - WARN_ON(block_group->zone_is_active && + WARN_ON(test_bit(BLOCK_GROUP_FLAG_ZONE_IS_ACTIVE, + &block_group->runtime_flags) && block_group->space_info->active_total_bytes < block_group->length); } block_group->space_info->total_bytes -= block_group->length; - if (block_group->zone_is_active) + if (test_bit(BLOCK_GROUP_FLAG_ZONE_IS_ACTIVE, &block_group->runtime_flags)) block_group->space_info->active_total_bytes -= block_group->length; block_group->space_info->bytes_readonly -= (block_group->length - block_group->zone_unusable); @@ -1086,7 +1090,8 @@ int btrfs_remove_block_group(struct btrfs_trans_handle *trans, goto out; spin_lock(&block_group->lock); - block_group->removed = 1; + set_bit(BLOCK_GROUP_FLAG_REMOVED, &block_group->runtime_flags); + /* * At this point trimming or scrub can't start on this block group, * because we removed the block group from the rbtree @@ -2426,7 +2431,8 @@ void btrfs_create_pending_block_groups(struct btrfs_trans_handle *trans) ret = insert_block_group_item(trans, block_group); if (ret) btrfs_abort_transaction(trans, ret); - if (!block_group->chunk_item_inserted) { + if (!test_bit(BLOCK_GROUP_FLAG_CHUNK_ITEM_INSERTED, + &block_group->runtime_flags)) { mutex_lock(&fs_info->chunk_mutex); ret = btrfs_chunk_alloc_add_chunk_item(trans, block_group); mutex_unlock(&fs_info->chunk_mutex); @@ -3972,7 +3978,8 @@ void btrfs_put_block_group_cache(struct btrfs_fs_info *info) while (block_group) { btrfs_wait_block_group_cache_done(block_group); spin_lock(&block_group->lock); - if (block_group->iref) + if (test_bit(BLOCK_GROUP_FLAG_IREF, + &block_group->runtime_flags)) break; spin_unlock(&block_group->lock); block_group = btrfs_next_block_group(block_group); @@ -3985,7 +3992,7 @@ void btrfs_put_block_group_cache(struct btrfs_fs_info *info) } inode = block_group->inode; - block_group->iref = 0; + clear_bit(BLOCK_GROUP_FLAG_IREF, &block_group->runtime_flags); block_group->inode = NULL; spin_unlock(&block_group->lock); ASSERT(block_group->io_ctl.inode == NULL); @@ -4127,7 +4134,7 @@ void btrfs_unfreeze_block_group(struct btrfs_block_group *block_group) spin_lock(&block_group->lock); cleanup = (atomic_dec_and_test(&block_group->frozen) && - block_group->removed); + test_bit(BLOCK_GROUP_FLAG_REMOVED, &block_group->runtime_flags)); spin_unlock(&block_group->lock); if (cleanup) { diff --git a/fs/btrfs/block-group.h b/fs/btrfs/block-group.h index 35e0e860cc0b..8008a391ed8c 100644 --- a/fs/btrfs/block-group.h +++ b/fs/btrfs/block-group.h @@ -46,6 +46,17 @@ enum btrfs_chunk_alloc_enum { CHUNK_ALLOC_FORCE_FOR_EXTENT, }; +enum btrfs_block_group_flags { + BLOCK_GROUP_FLAG_IREF, + BLOCK_GROUP_FLAG_HAS_CACHING_CTL, + BLOCK_GROUP_FLAG_REMOVED, + BLOCK_GROUP_FLAG_TO_COPY, + BLOCK_GROUP_FLAG_RELOCATING_REPAIR, + BLOCK_GROUP_FLAG_CHUNK_ITEM_INSERTED, + BLOCK_GROUP_FLAG_ZONE_IS_ACTIVE, + BLOCK_GROUP_FLAG_ZONED_DATA_RELOC, +}; + struct btrfs_caching_control { struct list_head list; struct mutex mutex; @@ -95,16 +106,9 @@ struct btrfs_block_group { /* For raid56, this is a full stripe, without parity */ unsigned long full_stripe_len; + unsigned long runtime_flags; unsigned int ro; - unsigned int iref:1; - unsigned int has_caching_ctl:1; - unsigned int removed:1; - unsigned int to_copy:1; - unsigned int relocating_repair:1; - unsigned int chunk_item_inserted:1; - unsigned int zone_is_active:1; - unsigned int zoned_data_reloc_ongoing:1; int disk_cache_state; diff --git a/fs/btrfs/dev-replace.c b/fs/btrfs/dev-replace.c index f43196a893ca..f85bbd99230b 100644 --- a/fs/btrfs/dev-replace.c +++ b/fs/btrfs/dev-replace.c @@ -546,7 +546,7 @@ static int mark_block_group_to_copy(struct btrfs_fs_info *fs_info, continue; spin_lock(&cache->lock); - cache->to_copy = 1; + set_bit(BLOCK_GROUP_FLAG_TO_COPY, &cache->runtime_flags); spin_unlock(&cache->lock); btrfs_put_block_group(cache); @@ -577,7 +577,7 @@ bool btrfs_finish_block_group_to_copy(struct btrfs_device *srcdev, return true; spin_lock(&cache->lock); - if (cache->removed) { + if (test_bit(BLOCK_GROUP_FLAG_REMOVED, &cache->runtime_flags)) { spin_unlock(&cache->lock); return true; } @@ -611,7 +611,7 @@ bool btrfs_finish_block_group_to_copy(struct btrfs_device *srcdev, /* Last stripe on this device */ spin_lock(&cache->lock); - cache->to_copy = 0; + clear_bit(BLOCK_GROUP_FLAG_TO_COPY, &cache->runtime_flags); spin_unlock(&cache->lock); return true; diff --git a/fs/btrfs/extent-tree.c b/fs/btrfs/extent-tree.c index ea3ec1e761e8..fbf10cd0155e 100644 --- a/fs/btrfs/extent-tree.c +++ b/fs/btrfs/extent-tree.c @@ -3816,7 +3816,9 @@ static int do_allocation_zoned(struct btrfs_block_group *block_group, block_group->start == fs_info->data_reloc_bg || fs_info->data_reloc_bg == 0); - if (block_group->ro || block_group->zoned_data_reloc_ongoing) { + if (block_group->ro || + test_bit(BLOCK_GROUP_FLAG_ZONED_DATA_RELOC, + &block_group->runtime_flags)) { ret = 1; goto out; } @@ -3893,7 +3895,8 @@ static int do_allocation_zoned(struct btrfs_block_group *block_group, * regular extents) at the same time to the same zone, which * easily break the write pointer. */ - block_group->zoned_data_reloc_ongoing = 1; + set_bit(BLOCK_GROUP_FLAG_ZONED_DATA_RELOC, + &block_group->runtime_flags); fs_info->data_reloc_bg = 0; } spin_unlock(&fs_info->relocation_bg_lock); diff --git a/fs/btrfs/free-space-cache.c b/fs/btrfs/free-space-cache.c index 996da650ecdc..fd73327134ac 100644 --- a/fs/btrfs/free-space-cache.c +++ b/fs/btrfs/free-space-cache.c @@ -126,10 +126,9 @@ struct inode *lookup_free_space_inode(struct btrfs_block_group *block_group, block_group->disk_cache_state = BTRFS_DC_CLEAR; } - if (!block_group->iref) { + if (!test_and_set_bit(BLOCK_GROUP_FLAG_IREF, + &block_group->runtime_flags)) block_group->inode = igrab(inode); - block_group->iref = 1; - } spin_unlock(&block_group->lock); return inode; @@ -241,8 +240,8 @@ int btrfs_remove_free_space_inode(struct btrfs_trans_handle *trans, clear_nlink(inode); /* One for the block groups ref */ spin_lock(&block_group->lock); - if (block_group->iref) { - block_group->iref = 0; + if (test_and_clear_bit(BLOCK_GROUP_FLAG_IREF, + &block_group->runtime_flags)) { block_group->inode = NULL; spin_unlock(&block_group->lock); iput(inode); @@ -2860,7 +2859,8 @@ void btrfs_dump_free_space(struct btrfs_block_group *block_group, if (btrfs_is_zoned(fs_info)) { btrfs_info(fs_info, "free space %llu active %d", block_group->zone_capacity - block_group->alloc_offset, - block_group->zone_is_active); + test_bit(BLOCK_GROUP_FLAG_ZONE_IS_ACTIVE, + &block_group->runtime_flags)); return; } @@ -3992,7 +3992,7 @@ int btrfs_trim_block_group(struct btrfs_block_group *block_group, *trimmed = 0; spin_lock(&block_group->lock); - if (block_group->removed) { + if (test_bit(BLOCK_GROUP_FLAG_REMOVED, &block_group->runtime_flags)) { spin_unlock(&block_group->lock); return 0; } @@ -4022,7 +4022,7 @@ int btrfs_trim_block_group_extents(struct btrfs_block_group *block_group, *trimmed = 0; spin_lock(&block_group->lock); - if (block_group->removed) { + if (test_bit(BLOCK_GROUP_FLAG_REMOVED, &block_group->runtime_flags)) { spin_unlock(&block_group->lock); return 0; } @@ -4044,7 +4044,7 @@ int btrfs_trim_block_group_bitmaps(struct btrfs_block_group *block_group, *trimmed = 0; spin_lock(&block_group->lock); - if (block_group->removed) { + if (test_bit(BLOCK_GROUP_FLAG_REMOVED, &block_group->runtime_flags)) { spin_unlock(&block_group->lock); return 0; } diff --git a/fs/btrfs/scrub.c b/fs/btrfs/scrub.c index 3afe5fa50a63..b7be62f1cd8e 100644 --- a/fs/btrfs/scrub.c +++ b/fs/btrfs/scrub.c @@ -3266,7 +3266,7 @@ static int scrub_simple_mirror(struct scrub_ctx *sctx, } /* Block group removed? */ spin_lock(&bg->lock); - if (bg->removed) { + if (test_bit(BLOCK_GROUP_FLAG_REMOVED, &bg->runtime_flags)) { spin_unlock(&bg->lock); ret = 0; break; @@ -3606,7 +3606,7 @@ static noinline_for_stack int scrub_chunk(struct scrub_ctx *sctx, * kthread or relocation. */ spin_lock(&bg->lock); - if (!bg->removed) + if (!test_bit(BLOCK_GROUP_FLAG_REMOVED, &bg->runtime_flags)) ret = -EINVAL; spin_unlock(&bg->lock); @@ -3765,7 +3765,8 @@ int scrub_enumerate_chunks(struct scrub_ctx *sctx, if (sctx->is_dev_replace && btrfs_is_zoned(fs_info)) { spin_lock(&cache->lock); - if (!cache->to_copy) { + if (!test_bit(BLOCK_GROUP_FLAG_TO_COPY, + &cache->runtime_flags)) { spin_unlock(&cache->lock); btrfs_put_block_group(cache); goto skip; @@ -3782,7 +3783,7 @@ int scrub_enumerate_chunks(struct scrub_ctx *sctx, * repair extents. */ spin_lock(&cache->lock); - if (cache->removed) { + if (test_bit(BLOCK_GROUP_FLAG_REMOVED, &cache->runtime_flags)) { spin_unlock(&cache->lock); btrfs_put_block_group(cache); goto skip; @@ -3942,8 +3943,8 @@ int scrub_enumerate_chunks(struct scrub_ctx *sctx, * balance is triggered or it becomes used and unused again. */ spin_lock(&cache->lock); - if (!cache->removed && !cache->ro && cache->reserved == 0 && - cache->used == 0) { + if (!test_bit(BLOCK_GROUP_FLAG_REMOVED, &cache->runtime_flags) && + !cache->ro && cache->reserved == 0 && cache->used == 0) { spin_unlock(&cache->lock); if (btrfs_test_opt(fs_info, DISCARD_ASYNC)) btrfs_discard_queue_work(&fs_info->discard_ctl, diff --git a/fs/btrfs/space-info.c b/fs/btrfs/space-info.c index f89aa49f53d4..477e57ace48d 100644 --- a/fs/btrfs/space-info.c +++ b/fs/btrfs/space-info.c @@ -305,7 +305,7 @@ void btrfs_add_bg_to_space_info(struct btrfs_fs_info *info, ASSERT(found); spin_lock(&found->lock); found->total_bytes += block_group->length; - if (block_group->zone_is_active) + if (test_bit(BLOCK_GROUP_FLAG_ZONE_IS_ACTIVE, &block_group->runtime_flags)) found->active_total_bytes += block_group->length; found->disk_total += block_group->length * factor; found->bytes_used += block_group->used; diff --git a/fs/btrfs/volumes.c b/fs/btrfs/volumes.c index 22bfc7806ccb..4de09c730d3c 100644 --- a/fs/btrfs/volumes.c +++ b/fs/btrfs/volumes.c @@ -5592,7 +5592,7 @@ int btrfs_chunk_alloc_add_chunk_item(struct btrfs_trans_handle *trans, if (ret) goto out; - bg->chunk_item_inserted = 1; + set_bit(BLOCK_GROUP_FLAG_CHUNK_ITEM_INSERTED, &bg->runtime_flags); if (map->type & BTRFS_BLOCK_GROUP_SYSTEM) { ret = btrfs_add_system_chunk(fs_info, &key, chunk, item_size); @@ -6151,7 +6151,7 @@ static bool is_block_group_to_copy(struct btrfs_fs_info *fs_info, u64 logical) cache = btrfs_lookup_block_group(fs_info, logical); spin_lock(&cache->lock); - ret = cache->to_copy; + ret = test_bit(BLOCK_GROUP_FLAG_TO_COPY, &cache->runtime_flags); spin_unlock(&cache->lock); btrfs_put_block_group(cache); @@ -8241,7 +8241,8 @@ static int relocating_repair_kthread(void *data) if (!cache) goto out; - if (!cache->relocating_repair) + if (!test_bit(BLOCK_GROUP_FLAG_RELOCATING_REPAIR, + &cache->runtime_flags)) goto out; ret = btrfs_may_alloc_data_chunk(fs_info, target); @@ -8279,12 +8280,12 @@ bool btrfs_repair_one_zone(struct btrfs_fs_info *fs_info, u64 logical) return true; spin_lock(&cache->lock); - if (cache->relocating_repair) { + if (test_and_set_bit(BLOCK_GROUP_FLAG_RELOCATING_REPAIR, + &cache->runtime_flags)) { spin_unlock(&cache->lock); btrfs_put_block_group(cache); return true; } - cache->relocating_repair = 1; spin_unlock(&cache->lock); kthread_run(relocating_repair_kthread, cache, diff --git a/fs/btrfs/zoned.c b/fs/btrfs/zoned.c index b150b07ba1a7..dd2704bee6b4 100644 --- a/fs/btrfs/zoned.c +++ b/fs/btrfs/zoned.c @@ -1443,7 +1443,9 @@ int btrfs_load_block_group_zone_info(struct btrfs_block_group *cache, bool new) } cache->alloc_offset = alloc_offsets[0]; cache->zone_capacity = caps[0]; - cache->zone_is_active = test_bit(0, active); + if (test_bit(0, active)) + set_bit(BLOCK_GROUP_FLAG_ZONE_IS_ACTIVE, + &cache->runtime_flags); break; case BTRFS_BLOCK_GROUP_DUP: if (map->type & BTRFS_BLOCK_GROUP_DATA) { @@ -1477,7 +1479,9 @@ int btrfs_load_block_group_zone_info(struct btrfs_block_group *cache, bool new) goto out; } } else { - cache->zone_is_active = test_bit(0, active); + if (test_bit(0, active)) + set_bit(BLOCK_GROUP_FLAG_ZONE_IS_ACTIVE, + &cache->runtime_flags); } cache->alloc_offset = alloc_offsets[0]; cache->zone_capacity = min(caps[0], caps[1]); @@ -1495,7 +1499,7 @@ int btrfs_load_block_group_zone_info(struct btrfs_block_group *cache, bool new) goto out; } - if (cache->zone_is_active) { + if (test_bit(BLOCK_GROUP_FLAG_ZONE_IS_ACTIVE, &cache->runtime_flags)) { btrfs_get_block_group(cache); spin_lock(&fs_info->zone_active_bgs_lock); list_add_tail(&cache->active_bg_list, &fs_info->zone_active_bgs); @@ -1863,7 +1867,8 @@ bool btrfs_zone_activate(struct btrfs_block_group *block_group) spin_lock(&space_info->lock); spin_lock(&block_group->lock); - if (block_group->zone_is_active) { + if (test_bit(BLOCK_GROUP_FLAG_ZONE_IS_ACTIVE, + &block_group->runtime_flags)) { ret = true; goto out_unlock; } @@ -1889,8 +1894,7 @@ bool btrfs_zone_activate(struct btrfs_block_group *block_group) } /* Successfully activated all the zones */ - block_group->zone_is_active = 1; - space_info->active_total_bytes += block_group->length; + set_bit(BLOCK_GROUP_FLAG_ZONE_IS_ACTIVE, &block_group->runtime_flags); spin_unlock(&block_group->lock); btrfs_try_granting_tickets(fs_info, space_info); spin_unlock(&space_info->lock); @@ -1918,7 +1922,8 @@ static int do_zone_finish(struct btrfs_block_group *block_group, bool fully_writ int i; spin_lock(&block_group->lock); - if (!block_group->zone_is_active) { + if (!test_bit(BLOCK_GROUP_FLAG_ZONE_IS_ACTIVE, + &block_group->runtime_flags)) { spin_unlock(&block_group->lock); return 0; } @@ -1957,7 +1962,8 @@ static int do_zone_finish(struct btrfs_block_group *block_group, bool fully_writ * Bail out if someone already deactivated the block group, or * allocated space is left in the block group. */ - if (!block_group->zone_is_active) { + if (!test_bit(BLOCK_GROUP_FLAG_ZONE_IS_ACTIVE, + &block_group->runtime_flags)) { spin_unlock(&block_group->lock); btrfs_dec_block_group_ro(block_group); return 0; @@ -1970,7 +1976,7 @@ static int do_zone_finish(struct btrfs_block_group *block_group, bool fully_writ } } - block_group->zone_is_active = 0; + clear_bit(BLOCK_GROUP_FLAG_ZONE_IS_ACTIVE, &block_group->runtime_flags); block_group->alloc_offset = block_group->zone_capacity; block_group->free_space_ctl->free_space = 0; btrfs_clear_treelog_bg(block_group); @@ -2179,13 +2185,15 @@ void btrfs_zoned_release_data_reloc_bg(struct btrfs_fs_info *fs_info, u64 logica ASSERT(block_group && (block_group->flags & BTRFS_BLOCK_GROUP_DATA)); spin_lock(&block_group->lock); - if (!block_group->zoned_data_reloc_ongoing) + if (!test_bit(BLOCK_GROUP_FLAG_ZONED_DATA_RELOC, + &block_group->runtime_flags)) goto out; /* All relocation extents are written. */ if (block_group->start + block_group->alloc_offset == logical + length) { /* Now, release this block group for further allocations. */ - block_group->zoned_data_reloc_ongoing = 0; + clear_bit(BLOCK_GROUP_FLAG_ZONED_DATA_RELOC, + &block_group->runtime_flags); } out: @@ -2257,7 +2265,9 @@ int btrfs_zoned_activate_one_bg(struct btrfs_fs_info *fs_info, list) { if (!spin_trylock(&bg->lock)) continue; - if (btrfs_zoned_bg_is_full(bg) || bg->zone_is_active) { + if (btrfs_zoned_bg_is_full(bg) || + test_bit(BLOCK_GROUP_FLAG_ZONE_IS_ACTIVE, + &bg->runtime_flags)) { spin_unlock(&bg->lock); continue; } From patchwork Fri Aug 5 14:14:56 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josef Bacik X-Patchwork-Id: 12937327 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 6A7A1C19F2D for ; Fri, 5 Aug 2022 14:15:19 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S240911AbiHEOPS (ORCPT ); Fri, 5 Aug 2022 10:15:18 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:45984 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240907AbiHEOPN (ORCPT ); Fri, 5 Aug 2022 10:15:13 -0400 Received: from mail-qv1-xf30.google.com (mail-qv1-xf30.google.com [IPv6:2607:f8b0:4864:20::f30]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id CBB645B7B4 for ; Fri, 5 Aug 2022 07:15:09 -0700 (PDT) Received: by mail-qv1-xf30.google.com with SMTP id mk9so1807149qvb.11 for ; Fri, 05 Aug 2022 07:15:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=toxicpanda-com.20210112.gappssmtp.com; s=20210112; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=zPAERh5PKVzP4IMDM9RG80tYsQKkWjMXr4WF/iPhzSQ=; b=5PpigyZRa9ZRw6+dq+BL+l+2mE8+fB2NmQkSaEGJT/MjdvZdNFbI4qfkT1d3KKCbo0 MgKNKCGVw18dN2OqZ8ou5RmG7k6/J862Z5gBUW9aFExOOcRwFbmp4PaZjaushTOZC+8v kn2jVZcwiIuFkrKSs+7WZHU+GhJkmHj8PLOkaHkt9JUue+wUD5VQjVAGWoUbjM2VeAIx EkW/9BAmtujTjdgeygbGCK/Ob6K4RYyZrNOHl4J3x/xmy+TzQwWqSjeVy9nlsgZUd5m1 tzSOAYbUtcT3XK3SbzGlgG7DQMNBR/vwGLE8lab4doJiX6QzucOS6SkneMukdeW6KtzN 3ucA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=zPAERh5PKVzP4IMDM9RG80tYsQKkWjMXr4WF/iPhzSQ=; b=gxDql6659dra7cnz9Z9EFjDQ2VUJc72ulRawrbFrloouk23gtK4LBHXZtKohMxiMle vZLpqesyNe9TOrfjB5BLANEgRhVJv2Xl32t8+V8l4iDQk/NUCJ8yV3BsWTVqasxVDETB T/sj2IkALXQfSptdoNS5tn+80xyNVA15VE2JwCrSXdnkZb+oao362mUkQJ0O7jzdRuFc 0eDu4qFjpOkqlcse09SM2nE1eVf32L3Zde1ZPQSSVkRKY8SMcAlGxfeE5nhbiQZiL2N6 b2y/pRLy+4YfU+V7wEk2uw/GT9BEtt27kEAP2BKnCtsu5FumuFdxCJR09NsnBNiY81Iz F79A== X-Gm-Message-State: ACgBeo0GqoAA8jeYpoRU9AHSfwNaUoSSlKmeiKCZctpe9ItBlOn4oGqP hbUpkXye2PUqNdCqMeyDvPUUJu8u2sKWTg== X-Google-Smtp-Source: AA6agR7BDN3OBPBavyuHMu8Mwe9bYq4K9BT5dxURykhCEWLlEzqiy86SYKZ+/aiklp5OqRmmOKcmfw== X-Received: by 2002:ad4:5c4b:0:b0:474:7aa4:b0ba with SMTP id a11-20020ad45c4b000000b004747aa4b0bamr5813483qva.49.1659708908551; Fri, 05 Aug 2022 07:15:08 -0700 (PDT) Received: from localhost (cpe-174-109-172-136.nc.res.rr.com. [174.109.172.136]) by smtp.gmail.com with ESMTPSA id q8-20020a05620a0d8800b006b8cf08d37bsm2995501qkl.130.2022.08.05.07.15.07 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 05 Aug 2022 07:15:08 -0700 (PDT) From: Josef Bacik To: linux-btrfs@vger.kernel.org, kernel-team@fb.com Subject: [PATCH v3 5/9] btrfs: remove block_group->lock protection for TO_COPY Date: Fri, 5 Aug 2022 10:14:56 -0400 Message-Id: <43147dace77ecc3e88dc2d5d034bfa6f1f5ba4c4.1659708822.git.josef@toxicpanda.com> X-Mailer: git-send-email 2.26.3 In-Reply-To: References: MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-btrfs@vger.kernel.org We use this during device replace for zoned devices, we were simply taking the lock because it was in a bit field and we needed the lock to be safe with other modifications in the bitfield. With the bit helpers we no longer require that locking. Signed-off-by: Josef Bacik --- fs/btrfs/dev-replace.c | 5 ----- fs/btrfs/scrub.c | 3 --- fs/btrfs/volumes.c | 2 -- 3 files changed, 10 deletions(-) diff --git a/fs/btrfs/dev-replace.c b/fs/btrfs/dev-replace.c index f85bbd99230b..488f2105c5d0 100644 --- a/fs/btrfs/dev-replace.c +++ b/fs/btrfs/dev-replace.c @@ -545,10 +545,7 @@ static int mark_block_group_to_copy(struct btrfs_fs_info *fs_info, if (!cache) continue; - spin_lock(&cache->lock); set_bit(BLOCK_GROUP_FLAG_TO_COPY, &cache->runtime_flags); - spin_unlock(&cache->lock); - btrfs_put_block_group(cache); } if (iter_ret < 0) @@ -610,9 +607,7 @@ bool btrfs_finish_block_group_to_copy(struct btrfs_device *srcdev, } /* Last stripe on this device */ - spin_lock(&cache->lock); clear_bit(BLOCK_GROUP_FLAG_TO_COPY, &cache->runtime_flags); - spin_unlock(&cache->lock); return true; } diff --git a/fs/btrfs/scrub.c b/fs/btrfs/scrub.c index b7be62f1cd8e..14af085fe868 100644 --- a/fs/btrfs/scrub.c +++ b/fs/btrfs/scrub.c @@ -3764,14 +3764,11 @@ int scrub_enumerate_chunks(struct scrub_ctx *sctx, } if (sctx->is_dev_replace && btrfs_is_zoned(fs_info)) { - spin_lock(&cache->lock); if (!test_bit(BLOCK_GROUP_FLAG_TO_COPY, &cache->runtime_flags)) { - spin_unlock(&cache->lock); btrfs_put_block_group(cache); goto skip; } - spin_unlock(&cache->lock); } /* diff --git a/fs/btrfs/volumes.c b/fs/btrfs/volumes.c index 4de09c730d3c..8a6b5f6a8f8c 100644 --- a/fs/btrfs/volumes.c +++ b/fs/btrfs/volumes.c @@ -6150,9 +6150,7 @@ static bool is_block_group_to_copy(struct btrfs_fs_info *fs_info, u64 logical) cache = btrfs_lookup_block_group(fs_info, logical); - spin_lock(&cache->lock); ret = test_bit(BLOCK_GROUP_FLAG_TO_COPY, &cache->runtime_flags); - spin_unlock(&cache->lock); btrfs_put_block_group(cache); return ret; From patchwork Fri Aug 5 14:14:57 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josef Bacik X-Patchwork-Id: 12937328 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 717E4C25B0C for ; Fri, 5 Aug 2022 14:15:20 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S240929AbiHEOPT (ORCPT ); Fri, 5 Aug 2022 10:15:19 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:45918 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240904AbiHEOPN (ORCPT ); Fri, 5 Aug 2022 10:15:13 -0400 Received: from mail-qv1-xf35.google.com (mail-qv1-xf35.google.com [IPv6:2607:f8b0:4864:20::f35]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 89C4B5C366 for ; Fri, 5 Aug 2022 07:15:11 -0700 (PDT) Received: by mail-qv1-xf35.google.com with SMTP id y11so1838774qvn.3 for ; Fri, 05 Aug 2022 07:15:11 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=toxicpanda-com.20210112.gappssmtp.com; s=20210112; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=0sjoeNK17wGi/2+ba6yI/ierfDGnAup5lWL1rQ4HndA=; b=JFJxmjgTiYAGGAT/6XrlWEFWIdnat2ukpga3oNePt8KRn08whnCcRRB3cgRQMf5ybA 1hE8FYQwfdSkuBh+EYG/FRFyJ/Cyassjm1g6ZHOapfi2L+Tgu3i9Vh6aiga13anYQ41W raoOm5o6rp7Rqh5rIQ6qARH81SclmDqumjBkpJ6twwJp5k6hA/vWw1OHkLJHIfFe1HhU p1gxnObuWDoqIZmcX3CD0WUsClCnPdMy61KJiY5aQE7ptvhDb6n09wFAl9+bFBkWxVA9 v5FFNdAC9MsuSZRWCuzaPp4ItmwY5YISlh84ge3poeL4pwkwt3yxAB/mL92Sp2mnGd7o WNgQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=0sjoeNK17wGi/2+ba6yI/ierfDGnAup5lWL1rQ4HndA=; b=QSD56WqHWsssPwCVGqEWimPtM2uYg1iOa7BYdlNASfSOaIkoPA/9pGW0E0PwHlICip WHgFofYbUw5hGli2RvnZyHLy3FyKqqXJ1NnyxG23RTihV8rcZe3zklqYHDXNxjQaOsKa bzI6flSGkEEuC9n015nA79Lc+NKFN/SGjjUHq8bIYfOH3cwBc2v8grseNDHQj0yo+h4n 7CxTRyY4TeTctUp5z/dXfCRdjsURhLB/IAjEHBS0sVtg2W9DVlfBi21mWVlqxwp793Et x3zYv7gjgG4TxD6NHoRGEiwPJX5yRqSdXA2exFAC115vrvucMiAZcL8+Rl2NmArCNmv9 ZOaA== X-Gm-Message-State: ACgBeo3X8sQmfaYhyTET0JWqva4XFDN4yienlplI1mzXbdX/12lvy+EP tUPsbJdKhnpb+km/hDGNXN559f3i1D+6uQ== X-Google-Smtp-Source: AA6agR6tbe6GOXTJan7xrkiwr05I2xG3y0KGlLzDc3g3LQZO7+zjIKXRae+HMqw1NZ5K+g4x6k0fyA== X-Received: by 2002:a0c:f1c7:0:b0:474:725e:753e with SMTP id u7-20020a0cf1c7000000b00474725e753emr5781101qvl.49.1659708909821; Fri, 05 Aug 2022 07:15:09 -0700 (PDT) Received: from localhost (cpe-174-109-172-136.nc.res.rr.com. [174.109.172.136]) by smtp.gmail.com with ESMTPSA id fy11-20020a05622a5a0b00b0033d1ac2517esm2686256qtb.64.2022.08.05.07.15.09 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 05 Aug 2022 07:15:09 -0700 (PDT) From: Josef Bacik To: linux-btrfs@vger.kernel.org, kernel-team@fb.com Subject: [PATCH v3 6/9] btrfs: simplify btrfs_put_block_group_cache Date: Fri, 5 Aug 2022 10:14:57 -0400 Message-Id: <6416d8cd6a0a767f312093ebe586caa74656f2ca.1659708822.git.josef@toxicpanda.com> X-Mailer: git-send-email 2.26.3 In-Reply-To: References: MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-btrfs@vger.kernel.org We're breaking out and re-searching for the next block group while evicting any of the block group cache inodes. This is not needed, the block groups aren't disappearing here, we can simply loop through the block groups like normal and iput any inode that we find. Signed-off-by: Josef Bacik --- fs/btrfs/block-group.c | 42 +++++++++++++++--------------------------- 1 file changed, 15 insertions(+), 27 deletions(-) diff --git a/fs/btrfs/block-group.c b/fs/btrfs/block-group.c index 8fd54f4dd2de..b94aa8087d98 100644 --- a/fs/btrfs/block-group.c +++ b/fs/btrfs/block-group.c @@ -3969,36 +3969,24 @@ void btrfs_reserve_chunk_metadata(struct btrfs_trans_handle *trans, void btrfs_put_block_group_cache(struct btrfs_fs_info *info) { struct btrfs_block_group *block_group; - u64 last = 0; - while (1) { - struct inode *inode; - - block_group = btrfs_lookup_first_block_group(info, last); - while (block_group) { - btrfs_wait_block_group_cache_done(block_group); - spin_lock(&block_group->lock); - if (test_bit(BLOCK_GROUP_FLAG_IREF, - &block_group->runtime_flags)) - break; + block_group = btrfs_lookup_first_block_group(info, 0); + while (block_group) { + btrfs_wait_block_group_cache_done(block_group); + spin_lock(&block_group->lock); + if (test_and_clear_bit(BLOCK_GROUP_FLAG_IREF, + &block_group->runtime_flags)) { + struct inode *inode = block_group->inode; + + block_group->inode = NULL; spin_unlock(&block_group->lock); - block_group = btrfs_next_block_group(block_group); - } - if (!block_group) { - if (last == 0) - break; - last = 0; - continue; - } - inode = block_group->inode; - clear_bit(BLOCK_GROUP_FLAG_IREF, &block_group->runtime_flags); - block_group->inode = NULL; - spin_unlock(&block_group->lock); - ASSERT(block_group->io_ctl.inode == NULL); - iput(inode); - last = block_group->start + block_group->length; - btrfs_put_block_group(block_group); + ASSERT(block_group->io_ctl.inode == NULL); + iput(inode); + } else { + spin_unlock(&block_group->lock); + } + block_group = btrfs_next_block_group(block_group); } } From patchwork Fri Aug 5 14:14:58 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josef Bacik X-Patchwork-Id: 12937329 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 7FA41C00140 for ; Fri, 5 Aug 2022 14:15:21 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S240879AbiHEOPT (ORCPT ); Fri, 5 Aug 2022 10:15:19 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:46118 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240789AbiHEOPQ (ORCPT ); Fri, 5 Aug 2022 10:15:16 -0400 Received: from mail-qv1-xf2c.google.com (mail-qv1-xf2c.google.com [IPv6:2607:f8b0:4864:20::f2c]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 92513DC9 for ; Fri, 5 Aug 2022 07:15:13 -0700 (PDT) Received: by mail-qv1-xf2c.google.com with SMTP id u8so1845773qvv.1 for ; Fri, 05 Aug 2022 07:15:12 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=toxicpanda-com.20210112.gappssmtp.com; s=20210112; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=vnfXtN2axr4Dx0TS58ttwkgTZ0Vt+1OZA3kMkOEhS74=; b=uL+TEzS7sxFuUgZH3s5Z/jpNDaPVsHYqNOhpNvoxOQGk2RZYxVqIy3YQHtNMKr9AgE DxyLgGatYkVpzJE4LH4h8SIe5k6zvn1vIxVrg+N3p6JKW0FZzF35xNwd9lYcHkGfMQfU 654wENi7C8I8yuRzagOeJPFrtrDQ7p0DSrelX7c3kv43VSIWkb08cd7LFGfEtiZdh397 kBvBfQyP+cN2fCus+c+hozV7tfmU04aPVDRnBU9gp09BVdiwCncL0kpw25vlCZGuarWz DUj/W3nAZT5lseteqK7HbtSA6gALARxkaCJELWZf6kKanQlGl65i1xkjaljWz0dytM8Y wd9g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=vnfXtN2axr4Dx0TS58ttwkgTZ0Vt+1OZA3kMkOEhS74=; b=7saez5o2Mpkw8AgHIp0nNbBpjlXXIm4Ls7QI7zvIrNH8uOXmxnCxb4JM/HLeNAr6/a 3AZH87iMNOilst8tk/vodgo7QqU+QlTjInrfK6NJvPDJnxZ4qj5JXgRHgyFIbq3ytULs rsCQNGDAl6McvqZK0jXo4PJvHX2nSTNSwPfkw2R2uaMol6qb1V3JWrorlilsaAj+77RJ zLanguFEz06c/zC86MatJtn8SHmQTJsdb88gBoBYOrsShrUlZhKPA4xLhWks7XvftSPZ Ur0b7xtbmYalP5gqiBi8eYslddO61wM0qM/u7PrTegvzHJBQks3nIwm5rQqkTV6lMEhM ko/w== X-Gm-Message-State: ACgBeo3xJF5uL3aCxG5nJHzxutfVY9pitLwRPhzkSvLzCRnrAqNVsOCZ I7Q9bMbnBHLuihAcqhQq9P4tSrqXZmU9eQ== X-Google-Smtp-Source: AA6agR7W489ZMuxgoRHinkxZFyhhm05QjK7AsxsOsQ0u9cIUYXjvlt6lDSNiQpAsrQ/BwUoid4Z25Q== X-Received: by 2002:a05:6214:20ed:b0:476:dde3:ed29 with SMTP id 13-20020a05621420ed00b00476dde3ed29mr5920075qvk.102.1659708911038; Fri, 05 Aug 2022 07:15:11 -0700 (PDT) Received: from localhost (cpe-174-109-172-136.nc.res.rr.com. [174.109.172.136]) by smtp.gmail.com with ESMTPSA id h17-20020a05620a245100b006b568bdd7d5sm3080532qkn.71.2022.08.05.07.15.10 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 05 Aug 2022 07:15:10 -0700 (PDT) From: Josef Bacik To: linux-btrfs@vger.kernel.org, kernel-team@fb.com Subject: [PATCH v3 7/9] btrfs: remove BLOCK_GROUP_FLAG_HAS_CACHING_CTL Date: Fri, 5 Aug 2022 10:14:58 -0400 Message-Id: X-Mailer: git-send-email 2.26.3 In-Reply-To: References: MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-btrfs@vger.kernel.org This is used mostly to determine if we need to look at the caching ctl list and clean up any references to this block group. However we never clear this flag, specifically because we need to know if we have to remove a caching ctl we have for this block group still. This is in the remove block group path which isn't a fast path, so the optimization doesn't really matter, simplify this logic and remove the flag. Signed-off-by: Josef Bacik --- fs/btrfs/block-group.c | 46 +++++++++++++++++++----------------------- fs/btrfs/block-group.h | 1 - 2 files changed, 21 insertions(+), 26 deletions(-) diff --git a/fs/btrfs/block-group.c b/fs/btrfs/block-group.c index b94aa8087d98..6215f50b62d2 100644 --- a/fs/btrfs/block-group.c +++ b/fs/btrfs/block-group.c @@ -789,7 +789,6 @@ int btrfs_cache_block_group(struct btrfs_block_group *cache, int load_cache_only cache->cached = BTRFS_CACHE_FAST; else cache->cached = BTRFS_CACHE_STARTED; - set_bit(BLOCK_GROUP_FLAG_HAS_CACHING_CTL, &cache->runtime_flags); spin_unlock(&cache->lock); write_lock(&fs_info->block_group_cache_lock); @@ -1006,34 +1005,31 @@ int btrfs_remove_block_group(struct btrfs_trans_handle *trans, } - if (test_bit(BLOCK_GROUP_FLAG_HAS_CACHING_CTL, - &block_group->runtime_flags)) - caching_ctl = btrfs_get_caching_control(block_group); if (block_group->cached == BTRFS_CACHE_STARTED) btrfs_wait_block_group_cache_done(block_group); - if (test_bit(BLOCK_GROUP_FLAG_HAS_CACHING_CTL, - &block_group->runtime_flags)) { - write_lock(&fs_info->block_group_cache_lock); - if (!caching_ctl) { - struct btrfs_caching_control *ctl; - - list_for_each_entry(ctl, - &fs_info->caching_block_groups, list) - if (ctl->block_group == block_group) { - caching_ctl = ctl; - refcount_inc(&caching_ctl->count); - break; - } - } - if (caching_ctl) - list_del_init(&caching_ctl->list); - write_unlock(&fs_info->block_group_cache_lock); - if (caching_ctl) { - /* Once for the caching bgs list and once for us. */ - btrfs_put_caching_control(caching_ctl); - btrfs_put_caching_control(caching_ctl); + + write_lock(&fs_info->block_group_cache_lock); + caching_ctl = btrfs_get_caching_control(block_group); + if (!caching_ctl) { + struct btrfs_caching_control *ctl; + + list_for_each_entry(ctl, &fs_info->caching_block_groups, list) { + if (ctl->block_group == block_group) { + caching_ctl = ctl; + refcount_inc(&caching_ctl->count); + break; + } } } + if (caching_ctl) + list_del_init(&caching_ctl->list); + write_unlock(&fs_info->block_group_cache_lock); + + if (caching_ctl) { + /* Once for the caching bgs list and once for us. */ + btrfs_put_caching_control(caching_ctl); + btrfs_put_caching_control(caching_ctl); + } spin_lock(&trans->transaction->dirty_bgs_lock); WARN_ON(!list_empty(&block_group->dirty_list)); diff --git a/fs/btrfs/block-group.h b/fs/btrfs/block-group.h index 8008a391ed8c..fffcc7789fa7 100644 --- a/fs/btrfs/block-group.h +++ b/fs/btrfs/block-group.h @@ -48,7 +48,6 @@ enum btrfs_chunk_alloc_enum { enum btrfs_block_group_flags { BLOCK_GROUP_FLAG_IREF, - BLOCK_GROUP_FLAG_HAS_CACHING_CTL, BLOCK_GROUP_FLAG_REMOVED, BLOCK_GROUP_FLAG_TO_COPY, BLOCK_GROUP_FLAG_RELOCATING_REPAIR, From patchwork Fri Aug 5 14:14:59 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josef Bacik X-Patchwork-Id: 12937330 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id ABB6AC19F2D for ; Fri, 5 Aug 2022 14:15:22 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S240908AbiHEOPU (ORCPT ); Fri, 5 Aug 2022 10:15:20 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:46100 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240920AbiHEOPR (ORCPT ); Fri, 5 Aug 2022 10:15:17 -0400 Received: from mail-qk1-x72c.google.com (mail-qk1-x72c.google.com [IPv6:2607:f8b0:4864:20::72c]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 73C69CB for ; Fri, 5 Aug 2022 07:15:14 -0700 (PDT) Received: by mail-qk1-x72c.google.com with SMTP id r11so1924342qkm.7 for ; Fri, 05 Aug 2022 07:15:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=toxicpanda-com.20210112.gappssmtp.com; s=20210112; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=jUGPBZ5oxW4yT11QIYfmobfVY4Y1QanvhsLfItcTPR4=; b=xbizgm+CT/chgRFwwcrxOqZ0BGJlSe398GBeJvKTI3EBErMb2r5DeWfhtU58Manqgy JfAMEJXeBPJcfCRIGyrcU3vqfBfwa5RcmE9do7+QSiapBA15WK5LE0BpzjsyHoOwtPst G2BKa0u9UOrGlWtQ9O0XyVvAQaTrwVqx2y5hKhspfireEWNj0VT5ORolf9iqN7RwZPLX DxdbdqcUA325u3FqYzUYTQEjDaTLaU330V459myMIfpgwALtZUrD2UM0cST4mqP6WOyd JZUJhLxzIE2Al2kTOhqOz9Ibyus2ypH88+jkuPfiZqSO9+jfJMS/nHJXP2JjQoLkG9n5 2scw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=jUGPBZ5oxW4yT11QIYfmobfVY4Y1QanvhsLfItcTPR4=; b=tiijzple2QV0icQ0VVSGYrU0oWedLzC/B7bdYUBIKgXGqgNY1mhW7I2LRLx30bh23f o+f1tAi4OJ1WjkDoQiCzRGyyh55oekI+ylQWY/WDiwqFy3hmQy2giPm3MQZ/W62LX2cW IlI/PYLfFcVPNrGsbMHv2kEvhFxCCUpFCScwgk8vcgivKWvt2LX3qjW6lickAkwtripi HnScnkQp8ne/3E58eRgnjrzqTqSmHCXQuWnVpmqGHtKPD8+ZP0DcfIlOT39ctCG/stCh In/i5q0xV05bGnxGndHGT/UlbaxLSmbiFrB38CqVxaI5LLkG9kevn2coggHB0p+WsQwA Xr2g== X-Gm-Message-State: ACgBeo2p1kQNLZkMymxWwrYnZwAEvQh0dEkCzMrMfcUwRMnRRH1RqOpv AgvWXudole72pj/8WO4YXQX1AdpQaQheQg== X-Google-Smtp-Source: AA6agR6Pnahb1b5zlAcMGQp9JeTUmx5zTWzhLmnw8wbleq77VOmZTkotpBcjTSWazoJfNStjK9qu1w== X-Received: by 2002:a37:b041:0:b0:6b5:ce22:62c8 with SMTP id z62-20020a37b041000000b006b5ce2262c8mr5090351qke.640.1659708912698; Fri, 05 Aug 2022 07:15:12 -0700 (PDT) Received: from localhost (cpe-174-109-172-136.nc.res.rr.com. [174.109.172.136]) by smtp.gmail.com with ESMTPSA id m22-20020ac866d6000000b0031f229d4427sm2594407qtp.96.2022.08.05.07.15.12 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 05 Aug 2022 07:15:12 -0700 (PDT) From: Josef Bacik To: linux-btrfs@vger.kernel.org, kernel-team@fb.com Subject: [PATCH v3 8/9] btrfs: remove bg->lock protection for relocation repair flag Date: Fri, 5 Aug 2022 10:14:59 -0400 Message-Id: <0559d7a06b24a557bd9d308fd708a284e18a8cb8.1659708822.git.josef@toxicpanda.com> X-Mailer: git-send-email 2.26.3 In-Reply-To: References: MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-btrfs@vger.kernel.org Before when this was modifying the bit field we had to protect it with the bg->lock, however now we're using bit helpers so we can stop using the bg->lock. Signed-off-by: Josef Bacik --- fs/btrfs/volumes.c | 3 --- 1 file changed, 3 deletions(-) diff --git a/fs/btrfs/volumes.c b/fs/btrfs/volumes.c index 8a6b5f6a8f8c..7eebd2c5e5b3 100644 --- a/fs/btrfs/volumes.c +++ b/fs/btrfs/volumes.c @@ -8277,14 +8277,11 @@ bool btrfs_repair_one_zone(struct btrfs_fs_info *fs_info, u64 logical) if (!cache) return true; - spin_lock(&cache->lock); if (test_and_set_bit(BLOCK_GROUP_FLAG_RELOCATING_REPAIR, &cache->runtime_flags)) { - spin_unlock(&cache->lock); btrfs_put_block_group(cache); return true; } - spin_unlock(&cache->lock); kthread_run(relocating_repair_kthread, cache, "btrfs-relocating-repair"); From patchwork Fri Aug 5 14:15:00 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josef Bacik X-Patchwork-Id: 12937331 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id CFFC0C00140 for ; Fri, 5 Aug 2022 14:15:23 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S240914AbiHEOPW (ORCPT ); Fri, 5 Aug 2022 10:15:22 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:46110 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240907AbiHEOPS (ORCPT ); Fri, 5 Aug 2022 10:15:18 -0400 Received: from mail-qt1-x836.google.com (mail-qt1-x836.google.com [IPv6:2607:f8b0:4864:20::836]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 93AD8BC0 for ; Fri, 5 Aug 2022 07:15:15 -0700 (PDT) Received: by mail-qt1-x836.google.com with SMTP id d16so2099953qtw.8 for ; Fri, 05 Aug 2022 07:15:15 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=toxicpanda-com.20210112.gappssmtp.com; s=20210112; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=myCiLxZUhctKOC0V6TYsgEep63NSo41G2R6Ef0Puz7w=; b=ZLs48eio9u+aRfDcthq60yqb8SazoZTtaNEOm+nCNQNDJdB/ae5eZAF9blteJIEHtN ODJOrhuCf2qyYOtjOySJtJj7wIALfub6/vrkUOFPi321UM7UBSl0FumJoVy+UiRy9l6f jcgMT4kdXovfums3/FMXoF+o1AH+5MdQuVkEWLRFU/ZTh+TSqD6Elegmy3XQniXqyGLc 275sdr8+TrsDiuipB50hgLdMv5XVCo8NlBNSpL0sjnTV7VgXLgpC4y4Tq5tG7PahmKPp JmTJPu1DBhDwlWZzlkT+x3gv00g+uXDYDI/oBovWrrNg3QxelBraEbQeVWqf14AMvNgO grgQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=myCiLxZUhctKOC0V6TYsgEep63NSo41G2R6Ef0Puz7w=; b=t6eEydBAk1OJ1SaFLIPTLjHNB1SfA6l3GBmXfKw+n7gZH5m+imI+ERPxQfw5KrhCBK QnvhMeA/ew/cTMlboNfCkDyxI3Bs7F2FhsJ/NsnMAc3H2OYeXs0QzWF0myKfvxbsiW+O oOhVZ0FK7yHJ2lpOcLhBsI9EhkGaQ7KX6aXHAQmTM/NpusjSiWQvHNFT5kW40Ml/0GRg 6Kjfp9G/002fkg0KAKInslCFkXZUj+Vcs6Q95axRvbIIjErK51PmeDS6gmVJe7md+c4Q 1w6nFmqmJk5Fk1GyhD2Sfh3oMY2g94MevEj18pOiwXWkEZaWE/fqnfUXDL/DjP3hjM2k Mxpw== X-Gm-Message-State: ACgBeo1DEpcEUbsLqYkT61szgFTcV4bPsmVCgc2R5hgtAZV/rNBozqNH EasPbNe/5fXRPB4LABm3XgNfWjK9cK965A== X-Google-Smtp-Source: AA6agR4bwiqK9zPoVE7DezASYraCB5uQwsNEJ5lC2M47JG890godyshmcX6lnGY1n3tpLMFw58ua2w== X-Received: by 2002:ac8:7f09:0:b0:31f:1e5e:4c05 with SMTP id f9-20020ac87f09000000b0031f1e5e4c05mr5881353qtk.437.1659708914100; Fri, 05 Aug 2022 07:15:14 -0700 (PDT) Received: from localhost (cpe-174-109-172-136.nc.res.rr.com. [174.109.172.136]) by smtp.gmail.com with ESMTPSA id h13-20020a05620a284d00b006a6d7c3a82esm1600859qkp.15.2022.08.05.07.15.13 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 05 Aug 2022 07:15:13 -0700 (PDT) From: Josef Bacik To: linux-btrfs@vger.kernel.org, kernel-team@fb.com Subject: [PATCH v3 9/9] btrfs: delete btrfs_wait_space_cache_v1_finished Date: Fri, 5 Aug 2022 10:15:00 -0400 Message-Id: X-Mailer: git-send-email 2.26.3 In-Reply-To: References: MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-btrfs@vger.kernel.org We used to use this in a few spots, but now we only use it directly inside of block-group.c, so remove the helper and just open code where we were using it. Signed-off-by: Josef Bacik --- fs/btrfs/block-group.c | 8 +------- fs/btrfs/block-group.h | 2 -- 2 files changed, 1 insertion(+), 9 deletions(-) diff --git a/fs/btrfs/block-group.c b/fs/btrfs/block-group.c index 6215f50b62d2..8028a4c26b89 100644 --- a/fs/btrfs/block-group.c +++ b/fs/btrfs/block-group.c @@ -467,12 +467,6 @@ static bool space_cache_v1_done(struct btrfs_block_group *cache) return ret; } -void btrfs_wait_space_cache_v1_finished(struct btrfs_block_group *cache, - struct btrfs_caching_control *caching_ctl) -{ - wait_event(caching_ctl->wait, space_cache_v1_done(cache)); -} - #ifdef CONFIG_BTRFS_DEBUG static void fragment_free_space(struct btrfs_block_group *block_group) { @@ -801,7 +795,7 @@ int btrfs_cache_block_group(struct btrfs_block_group *cache, int load_cache_only btrfs_queue_work(fs_info->caching_workers, &caching_ctl->work); out: if (load_cache_only && caching_ctl) - btrfs_wait_space_cache_v1_finished(cache, caching_ctl); + wait_event(caching_ctl->wait, space_cache_v1_done(cache)); if (caching_ctl) btrfs_put_caching_control(caching_ctl); diff --git a/fs/btrfs/block-group.h b/fs/btrfs/block-group.h index fffcc7789fa7..96382ca5cbfb 100644 --- a/fs/btrfs/block-group.h +++ b/fs/btrfs/block-group.h @@ -310,8 +310,6 @@ void btrfs_reserve_chunk_metadata(struct btrfs_trans_handle *trans, u64 btrfs_get_alloc_profile(struct btrfs_fs_info *fs_info, u64 orig_flags); void btrfs_put_block_group_cache(struct btrfs_fs_info *info); int btrfs_free_block_groups(struct btrfs_fs_info *info); -void btrfs_wait_space_cache_v1_finished(struct btrfs_block_group *cache, - struct btrfs_caching_control *caching_ctl); int btrfs_rmap_block(struct btrfs_fs_info *fs_info, u64 chunk_start, struct block_device *bdev, u64 physical, u64 **logical, int *naddrs, int *stripe_len);