From patchwork Wed Mar 19 06:14:32 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Naohiro Aota X-Patchwork-Id: 14022105 Received: from esa6.hgst.iphmx.com (esa6.hgst.iphmx.com [216.71.154.45]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 286793208 for ; Wed, 19 Mar 2025 06:14:59 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=216.71.154.45 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1742364901; cv=none; b=aEtuL6OtCy8p390SGZR44HfjTr0LDyDEtiF2XpKhcf/rNTWEuQMAGpshK85xo3seay/ef5nWjlpjLlN3FCYI0n2vyIb4VfUbwexXTuURRck6EyWfDMv/3/8N3Urvb5epYnXnG6stlMFtZJQ4iFQuXMKYPb9vC3IyVwZn93LBGVc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1742364901; c=relaxed/simple; bh=d7tUZT9iUwp3BKUetm5BCLgw5hMdXI7emogdO88KCc8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=tiFXYI9bo3RDiQfB/liOkYvTDuwOh0aA6snrBU7WRnw+lpmEY1Z+62mYZy/tsIjdfWpqYwdrfEaWTzPeKcuH0/PZZL7EbC+04fj2M7RhYKPqEGnaFDunub+mJI+yZFVamDuOvzIY9N+lTIGIPAO05s0jOCjFnpgJiBokW9IVvWI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=wdc.com; spf=pass smtp.mailfrom=wdc.com; dkim=pass (2048-bit key) header.d=wdc.com header.i=@wdc.com header.b=CjSmwJIG; arc=none smtp.client-ip=216.71.154.45 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=wdc.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=wdc.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=wdc.com header.i=@wdc.com header.b="CjSmwJIG" DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=wdc.com; i=@wdc.com; q=dns/txt; s=dkim.wdc.com; t=1742364900; x=1773900900; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=d7tUZT9iUwp3BKUetm5BCLgw5hMdXI7emogdO88KCc8=; b=CjSmwJIG2E7+AcPIR7j22XjuwsWJAKvV1/TDVtCSLqvkTsEo0MVnUsgs /ZfunJB5WJmD06lBoE8KBw3YRfdMtoMUsOmda+ZUcT/B73T2Axe1qRPCv 8l+vuFZG4EhUt9okuxBUcp2dMCxNHyXlgxuF5LR3oD7e1Owb4/+u2gXuY qj3Xp+mses85dS8s+SP3C0EDi2aRIoxyhIcR5OYVY/vucr5V7vaFQb+nH JbOjDPi+dRz8PVg0yRyt+m3ZGwZpAyZIgPCUYGGtmQqPgI7MwqYFJ7B5g FEuN95elutgfNKG9YOtBPK7CaUP60NOubN/vDylKSysZ8SVui3CNPRjZ7 g==; X-CSE-ConnectionGUID: 4t+w0Io1RiaLFahEJpR1hA== X-CSE-MsgGUID: ydJQRVtmT0e1AwuUhGaTng== X-IronPort-AV: E=Sophos;i="6.14,258,1736784000"; d="scan'208";a="55227131" Received: from uls-op-cesaip01.wdc.com (HELO uls-op-cesaep01.wdc.com) ([199.255.45.14]) by ob1.hgst.iphmx.com with ESMTP; 19 Mar 2025 14:14:58 +0800 IronPort-SDR: 67da5302_rVS5/QjxNeiD8WqueKNzKhyA7SRkQzLW+lGX10oq5hF+/js EHQ2XL4Jimw3DhdbILk3bfKTVPk16T0pUQVKy1g== Received: from uls-op-cesaip02.wdc.com ([10.248.3.37]) by uls-op-cesaep01.wdc.com with ESMTP/TLS/ECDHE-RSA-AES128-GCM-SHA256; 18 Mar 2025 22:15:46 -0700 WDCIronportException: Internal Received: from gbdn3z2.ad.shared (HELO naota-xeon..) ([10.224.109.136]) by uls-op-cesaip02.wdc.com with ESMTP; 18 Mar 2025 23:14:57 -0700 From: Naohiro Aota To: linux-btrfs@vger.kernel.org Cc: Naohiro Aota Subject: [PATCH v2 01/13] btrfs: take btrfs_space_info in btrfs_reserve_data_bytes Date: Wed, 19 Mar 2025 15:14:32 +0900 Message-ID: <246f558df2b10e2c1efb34f0dd9e274e8d51af7f.1742364593.git.naohiro.aota@wdc.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: References: Precedence: bulk X-Mailing-List: linux-btrfs@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Take struct btrfs_space_info in btrfs_reserve_data_bytes() to allow reserving the data from multiple data space_info candidates. This is a preparation for the following commits and there is no functional change. Signed-off-by: Naohiro Aota Reviewed-by: Johannes Thumshirn --- fs/btrfs/delalloc-space.c | 4 ++-- fs/btrfs/space-info.c | 10 +++++----- fs/btrfs/space-info.h | 2 +- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/fs/btrfs/delalloc-space.c b/fs/btrfs/delalloc-space.c index 88e900e5a43d..e9750f96f86c 100644 --- a/fs/btrfs/delalloc-space.c +++ b/fs/btrfs/delalloc-space.c @@ -123,7 +123,7 @@ int btrfs_alloc_data_chunk_ondemand(const struct btrfs_inode *inode, u64 bytes) if (btrfs_is_free_space_inode(inode)) flush = BTRFS_RESERVE_FLUSH_FREE_SPACE_INODE; - return btrfs_reserve_data_bytes(fs_info, bytes, flush); + return btrfs_reserve_data_bytes(fs_info->data_sinfo, bytes, flush); } int btrfs_check_data_free_space(struct btrfs_inode *inode, @@ -144,7 +144,7 @@ int btrfs_check_data_free_space(struct btrfs_inode *inode, else if (btrfs_is_free_space_inode(inode)) flush = BTRFS_RESERVE_FLUSH_FREE_SPACE_INODE; - ret = btrfs_reserve_data_bytes(fs_info, len, flush); + ret = btrfs_reserve_data_bytes(fs_info->data_sinfo, len, flush); if (ret < 0) return ret; diff --git a/fs/btrfs/space-info.c b/fs/btrfs/space-info.c index ff089e3e4103..71c562e78b16 100644 --- a/fs/btrfs/space-info.c +++ b/fs/btrfs/space-info.c @@ -1836,10 +1836,10 @@ int btrfs_reserve_metadata_bytes(struct btrfs_fs_info *fs_info, * This will reserve bytes from the data space info. If there is not enough * space then we will attempt to flush space as specified by flush. */ -int btrfs_reserve_data_bytes(struct btrfs_fs_info *fs_info, u64 bytes, +int btrfs_reserve_data_bytes(struct btrfs_space_info *space_info, u64 bytes, enum btrfs_reserve_flush_enum flush) { - struct btrfs_space_info *data_sinfo = fs_info->data_sinfo; + struct btrfs_fs_info *fs_info = space_info->fs_info; int ret; ASSERT(flush == BTRFS_RESERVE_FLUSH_DATA || @@ -1847,12 +1847,12 @@ int btrfs_reserve_data_bytes(struct btrfs_fs_info *fs_info, u64 bytes, flush == BTRFS_RESERVE_NO_FLUSH); ASSERT(!current->journal_info || flush != BTRFS_RESERVE_FLUSH_DATA); - ret = __reserve_bytes(fs_info, data_sinfo, bytes, flush); + ret = __reserve_bytes(fs_info, space_info, bytes, flush); if (ret == -ENOSPC) { trace_btrfs_space_reservation(fs_info, "space_info:enospc", - data_sinfo->flags, bytes, 1); + space_info->flags, bytes, 1); if (btrfs_test_opt(fs_info, ENOSPC_DEBUG)) - btrfs_dump_space_info(fs_info, data_sinfo, bytes, 0); + btrfs_dump_space_info(fs_info, space_info, bytes, 0); } return ret; } diff --git a/fs/btrfs/space-info.h b/fs/btrfs/space-info.h index a96efdb5e681..7459b4eb99cd 100644 --- a/fs/btrfs/space-info.h +++ b/fs/btrfs/space-info.h @@ -288,7 +288,7 @@ static inline void btrfs_space_info_free_bytes_may_use( btrfs_try_granting_tickets(space_info->fs_info, space_info); spin_unlock(&space_info->lock); } -int btrfs_reserve_data_bytes(struct btrfs_fs_info *fs_info, u64 bytes, +int btrfs_reserve_data_bytes(struct btrfs_space_info *space_info, u64 bytes, enum btrfs_reserve_flush_enum flush); void btrfs_dump_space_info_for_trans_abort(struct btrfs_fs_info *fs_info); void btrfs_init_async_reclaim_work(struct btrfs_fs_info *fs_info); From patchwork Wed Mar 19 06:14:33 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Naohiro Aota X-Patchwork-Id: 14022107 Received: from esa6.hgst.iphmx.com (esa6.hgst.iphmx.com [216.71.154.45]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 38550212B0E for ; Wed, 19 Mar 2025 06:15:00 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=216.71.154.45 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1742364903; cv=none; b=J1rQZRV1hAoyw9j8CbAAJb5OmZTuFYGUrus0QBijg/CJByHMl7uEv/YG1frCTqLiedf0aU0PG+7MAB4eHnZZfJtOpAjqQI82w4LkDywfffcIeJ2x6V/XPX2CyHVI+MP/TSneAog4fdfwIbhsn9PEcbci4/UreT+Y/zuJgVym2eU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1742364903; c=relaxed/simple; bh=zKCHCNZawBJM6dDEkaVLMZo4bmkQXBDFYpIAh4QGK1I=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=U8IDxXsh8E6o+iD/i2mSzEHIoDdjOD4ywwKdjQerGzjIPcpq9ntc0sIwV2Ju3DG0M1485CWbfWPSxujEnvJ6tvhoh3k3RpopB+HmICuOWmc5rDxb3D9+xv0iz2quLINvL6M3v8OyUmspvmPMIG1MaTcCzbcS4E5bteE45b8kHj8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=wdc.com; spf=pass smtp.mailfrom=wdc.com; dkim=pass (2048-bit key) header.d=wdc.com header.i=@wdc.com header.b=FAgyKdc+; arc=none smtp.client-ip=216.71.154.45 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=wdc.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=wdc.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=wdc.com header.i=@wdc.com header.b="FAgyKdc+" DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=wdc.com; i=@wdc.com; q=dns/txt; s=dkim.wdc.com; t=1742364900; x=1773900900; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=zKCHCNZawBJM6dDEkaVLMZo4bmkQXBDFYpIAh4QGK1I=; b=FAgyKdc+Yk8xgCdlxSGBYfh6ybxb5cZAk6gufMIPMcdDHaCq+wP3szj6 b4CDYMwRgtZxixbjeNSrqcQiM9Lr6mqvL0P+aLtbfLcPJRrDJCWIShCAf rIr3OlP6MUyadHYJSRVCPnfITQwgQQNbE5FsNGBSf04icBzoJFY580wnx FnEiL+RUHxLhaL9QTezXHxnEehFjOPKb65SJio2ZxgVilCrKZmrl28hfT 9/5dwcSt7lRacohMrQMRpFMoyQ83XHkOd7vl7gLxXKkn7kna61QVGsmMJ sBu91eLGqAW+qsLLG2EiprCUIRqUeLwyIdUx7M3ko0sZMtKlVXcuA9lar w==; X-CSE-ConnectionGUID: Knk/5K7GSXWYwcZB+g/lhg== X-CSE-MsgGUID: RYT+6oU7S52Qj5kQHTevpw== X-IronPort-AV: E=Sophos;i="6.14,258,1736784000"; d="scan'208";a="55227168" Received: from uls-op-cesaip01.wdc.com (HELO uls-op-cesaep01.wdc.com) ([199.255.45.14]) by ob1.hgst.iphmx.com with ESMTP; 19 Mar 2025 14:14:59 +0800 IronPort-SDR: 67da5303_4XW1B6b6SUeUGuwyyBZmHYwRaGJVFnH9T+9IZp3mMNNvaxO aXJPJqerPIb4WUtjoilMihqHjYvgFedc7Ucqtqg== Received: from uls-op-cesaip02.wdc.com ([10.248.3.37]) by uls-op-cesaep01.wdc.com with ESMTP/TLS/ECDHE-RSA-AES128-GCM-SHA256; 18 Mar 2025 22:15:47 -0700 WDCIronportException: Internal Received: from gbdn3z2.ad.shared (HELO naota-xeon..) ([10.224.109.136]) by uls-op-cesaip02.wdc.com with ESMTP; 18 Mar 2025 23:14:58 -0700 From: Naohiro Aota To: linux-btrfs@vger.kernel.org Cc: Naohiro Aota Subject: [PATCH v2 02/13] btrfs: take struct btrfs_inode in btrfs_free_reserved_data_space_noquota Date: Wed, 19 Mar 2025 15:14:33 +0900 Message-ID: <8a68a284a3bf14a38a38fafd746d24705a0bee4d.1742364593.git.naohiro.aota@wdc.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: References: Precedence: bulk X-Mailing-List: linux-btrfs@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 As well as the last patch, take struct btrfs_inode in the function and let it distinguish which data space it is working on in a later patch. There is no functional change with this commit. Signed-off-by: Naohiro Aota Reviewed-by: Johannes Thumshirn --- fs/btrfs/delalloc-space.c | 7 ++++--- fs/btrfs/delalloc-space.h | 3 +-- fs/btrfs/inode.c | 4 ++-- fs/btrfs/relocation.c | 3 +-- 4 files changed, 8 insertions(+), 9 deletions(-) diff --git a/fs/btrfs/delalloc-space.c b/fs/btrfs/delalloc-space.c index e9750f96f86c..918ba2ab1d5f 100644 --- a/fs/btrfs/delalloc-space.c +++ b/fs/btrfs/delalloc-space.c @@ -151,7 +151,7 @@ int btrfs_check_data_free_space(struct btrfs_inode *inode, /* Use new btrfs_qgroup_reserve_data to reserve precious data space. */ ret = btrfs_qgroup_reserve_data(inode, reserved, start, len); if (ret < 0) { - btrfs_free_reserved_data_space_noquota(fs_info, len); + btrfs_free_reserved_data_space_noquota(inode, len); extent_changeset_free(*reserved); *reserved = NULL; } else { @@ -168,9 +168,10 @@ int btrfs_check_data_free_space(struct btrfs_inode *inode, * which we can't sleep and is sure it won't affect qgroup reserved space. * Like clear_bit_hook(). */ -void btrfs_free_reserved_data_space_noquota(struct btrfs_fs_info *fs_info, +void btrfs_free_reserved_data_space_noquota(struct btrfs_inode *inode, u64 len) { + struct btrfs_fs_info *fs_info = inode->root->fs_info; struct btrfs_space_info *data_sinfo; ASSERT(IS_ALIGNED(len, fs_info->sectorsize)); @@ -196,7 +197,7 @@ void btrfs_free_reserved_data_space(struct btrfs_inode *inode, round_down(start, fs_info->sectorsize); start = round_down(start, fs_info->sectorsize); - btrfs_free_reserved_data_space_noquota(fs_info, len); + btrfs_free_reserved_data_space_noquota(inode, len); btrfs_qgroup_free_data(inode, reserved, start, len, NULL); } diff --git a/fs/btrfs/delalloc-space.h b/fs/btrfs/delalloc-space.h index 3f32953c0a80..d582779dac5a 100644 --- a/fs/btrfs/delalloc-space.h +++ b/fs/btrfs/delalloc-space.h @@ -18,8 +18,7 @@ void btrfs_free_reserved_data_space(struct btrfs_inode *inode, void btrfs_delalloc_release_space(struct btrfs_inode *inode, struct extent_changeset *reserved, u64 start, u64 len, bool qgroup_free); -void btrfs_free_reserved_data_space_noquota(struct btrfs_fs_info *fs_info, - u64 len); +void btrfs_free_reserved_data_space_noquota(struct btrfs_inode *inode, u64 len); void btrfs_delalloc_release_metadata(struct btrfs_inode *inode, u64 num_bytes, bool qgroup_free); int btrfs_delalloc_reserve_space(struct btrfs_inode *inode, diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c index 2a5f74133e69..de3aa4eff2eb 100644 --- a/fs/btrfs/inode.c +++ b/fs/btrfs/inode.c @@ -2617,7 +2617,7 @@ void btrfs_clear_delalloc_extent(struct btrfs_inode *inode, !btrfs_is_free_space_inode(inode) && !(state->state & EXTENT_NORESERVE) && (bits & EXTENT_CLEAR_DATA_RESV)) - btrfs_free_reserved_data_space_noquota(fs_info, len); + btrfs_free_reserved_data_space_noquota(inode, len); percpu_counter_add_batch(&fs_info->delalloc_bytes, -len, fs_info->delalloc_batch); @@ -9766,7 +9766,7 @@ ssize_t btrfs_do_encoded_write(struct kiocb *iocb, struct iov_iter *from, * bytes_may_use. */ if (!extent_reserved) - btrfs_free_reserved_data_space_noquota(fs_info, disk_num_bytes); + btrfs_free_reserved_data_space_noquota(inode, disk_num_bytes); out_unlock: unlock_extent(io_tree, start, end, &cached_state); out_folios: diff --git a/fs/btrfs/relocation.c b/fs/btrfs/relocation.c index f948f4f6431c..f9bc2e107a22 100644 --- a/fs/btrfs/relocation.c +++ b/fs/btrfs/relocation.c @@ -2751,8 +2751,7 @@ static noinline_for_stack int prealloc_file_extent_cluster(struct reloc_control btrfs_inode_unlock(inode, 0); if (cur_offset < prealloc_end) - btrfs_free_reserved_data_space_noquota(inode->root->fs_info, - prealloc_end + 1 - cur_offset); + btrfs_free_reserved_data_space_noquota(inode, prealloc_end + 1 - cur_offset); return ret; } From patchwork Wed Mar 19 06:14:34 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Naohiro Aota X-Patchwork-Id: 14022106 Received: from esa6.hgst.iphmx.com (esa6.hgst.iphmx.com [216.71.154.45]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 294EF24EF62 for ; Wed, 19 Mar 2025 06:15:00 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=216.71.154.45 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1742364902; cv=none; b=N+SUSHxQ4HgC3hU8ke97UOYJMSK0Vl8bxQlA7kAz3uJ5/ReU8vdzkKaBL1x+TqUaZ53q4+U2vGvfTLlCarJ0QrPafT9QkAAXj7EzoXUenY+00j5gzspcelJIvMzClCo4DlyG2ajjnuJHbLhcK37YyVPdT6+6AO7pUgAsc522fiE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1742364902; c=relaxed/simple; bh=LNXbIHKPa1vr5dlvOZR8bX5sxFAn8cKOBw1GIbqb8Hg=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=UJxv9CuqZq0fXzJwtNIIRYY9pB2qip3FNAv5reRNJwpPfVCMRCRGclvPVtBHqSGtWKkeYorBZRKwN3bUpBwZ1cs86NqFM3Dl6nZVTquvMPva1s2M7fTIFuGRaDSfKiiX/tIeofZMJLbN/BVVTixf8mn5kBvuyXOl/l+q1DoPqnI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=wdc.com; spf=pass smtp.mailfrom=wdc.com; dkim=pass (2048-bit key) header.d=wdc.com header.i=@wdc.com header.b=ja3N4V4f; arc=none smtp.client-ip=216.71.154.45 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=wdc.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=wdc.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=wdc.com header.i=@wdc.com header.b="ja3N4V4f" DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=wdc.com; i=@wdc.com; q=dns/txt; s=dkim.wdc.com; t=1742364901; x=1773900901; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=LNXbIHKPa1vr5dlvOZR8bX5sxFAn8cKOBw1GIbqb8Hg=; b=ja3N4V4foe6+tht5W9Evey2PqJqFqhwLyksUAxHLPEbUccMxL5saJLB9 EIUQjWyyMq4uwayNJGXM1AxNI0vrt2LsOOpNpiFKxyeKHQ4CHpX9EVJn5 +nSrhAmTXBoS6KFkAfaiH4DTMw+nxdoznExGuVBrt4YJLVF3rGdN+tjYu OpcTlCISFiOKZd/4oDWXDhhCYVtnci7ns2/X6qPgraFKAzCVYNKFR1awD tnttrYMSZPi4I9pdNknfIPmEoxddTNpRx96h9dOeBmI9nGWYswkRlsrey XKFkOV3aLs7MTXbIHz5/MDPaZNgWv6d6s40CizkxsZVsQNk+ICrtYQHC1 g==; X-CSE-ConnectionGUID: du06e8ehR2qGAOcyIQyWuQ== X-CSE-MsgGUID: d5BoJm7jS6qPDHig6a2p2A== X-IronPort-AV: E=Sophos;i="6.14,258,1736784000"; d="scan'208";a="55227211" Received: from uls-op-cesaip01.wdc.com (HELO uls-op-cesaep01.wdc.com) ([199.255.45.14]) by ob1.hgst.iphmx.com with ESMTP; 19 Mar 2025 14:15:00 +0800 IronPort-SDR: 67da5304_itfspwg0D9DeVxs3NXlGqaBmhTzU2RDKq6L1+0FhO1CBa00 pvY9b7nvF+tIUX3GnR6J/gF2B1nvdsfAcHzViCg== Received: from uls-op-cesaip02.wdc.com ([10.248.3.37]) by uls-op-cesaep01.wdc.com with ESMTP/TLS/ECDHE-RSA-AES128-GCM-SHA256; 18 Mar 2025 22:15:49 -0700 WDCIronportException: Internal Received: from gbdn3z2.ad.shared (HELO naota-xeon..) ([10.224.109.136]) by uls-op-cesaip02.wdc.com with ESMTP; 18 Mar 2025 23:14:59 -0700 From: Naohiro Aota To: linux-btrfs@vger.kernel.org Cc: Naohiro Aota Subject: [PATCH v2 03/13] btrfs: factor out init_space_info() Date: Wed, 19 Mar 2025 15:14:34 +0900 Message-ID: <268c9cc120a683f57c919466cad6a923c9ee30ed.1742364593.git.naohiro.aota@wdc.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: References: Precedence: bulk X-Mailing-List: linux-btrfs@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Factor out initialization of the space_info struct, which is used in a later patch. There is no functional change. Signed-off-by: Naohiro Aota Reviewed-by: Johannes Thumshirn --- fs/btrfs/space-info.c | 27 ++++++++++++++++----------- 1 file changed, 16 insertions(+), 11 deletions(-) diff --git a/fs/btrfs/space-info.c b/fs/btrfs/space-info.c index 71c562e78b16..60f76afc5fe9 100644 --- a/fs/btrfs/space-info.c +++ b/fs/btrfs/space-info.c @@ -234,19 +234,11 @@ void btrfs_update_space_info_chunk_size(struct btrfs_space_info *space_info, WRITE_ONCE(space_info->chunk_size, chunk_size); } -static int create_space_info(struct btrfs_fs_info *info, u64 flags) +static void init_space_info(struct btrfs_fs_info *info, + struct btrfs_space_info *space_info, u64 flags) { - - struct btrfs_space_info *space_info; - int i; - int ret; - - space_info = kzalloc(sizeof(*space_info), GFP_NOFS); - if (!space_info) - return -ENOMEM; - space_info->fs_info = info; - for (i = 0; i < BTRFS_NR_RAID_TYPES; i++) + for (int i = 0; i < BTRFS_NR_RAID_TYPES; i++) INIT_LIST_HEAD(&space_info->block_groups[i]); init_rwsem(&space_info->groups_sem); spin_lock_init(&space_info->lock); @@ -260,6 +252,19 @@ static int create_space_info(struct btrfs_fs_info *info, u64 flags) if (btrfs_is_zoned(info)) space_info->bg_reclaim_threshold = BTRFS_DEFAULT_ZONED_RECLAIM_THRESH; +} + +static int create_space_info(struct btrfs_fs_info *info, u64 flags) +{ + + struct btrfs_space_info *space_info; + int ret; + + space_info = kzalloc(sizeof(*space_info), GFP_NOFS); + if (!space_info) + return -ENOMEM; + + init_space_info(info, space_info, flags); ret = btrfs_sysfs_add_space_info_type(info, space_info); if (ret) From patchwork Wed Mar 19 06:14:35 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Naohiro Aota X-Patchwork-Id: 14022108 Received: from esa6.hgst.iphmx.com (esa6.hgst.iphmx.com [216.71.154.45]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 3F39524EF74 for ; Wed, 19 Mar 2025 06:15:02 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=216.71.154.45 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1742364903; cv=none; b=qBxf4faAwfpU5cWfkHlo1gNVNSBMhOSHX1sQY9JTm3y9BKMmKw1ia3EWvMSdVEl7k0sIgdO+cJcNudO6DIKvJWdkskTHSqfHu0ejrwf4z5bLbCULmFeV72qthrbfrq4Mt4CkyKaCWh89qzx2zBKxLyBNFjp+WM0U/ea3YSF+He4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1742364903; c=relaxed/simple; bh=3Og5b8Jz9omO7bsj8HKjX4RYvUW9aHrQNzJXh18Y430=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=ZuZBa2M6miscrkJIAh1jNj+GfSRmy2wAvKnNyY6X7zK1RK6ZEuWnwFke1l9umzBxF7RrFMQ+tGMqyXdAxVSKWFILyen+zmtBg74Bf3A6iKSUBiNE2/umIqip0ubFVmgUHW0PPd7U8JqLdSRpm/XQO6p8fPcsdhtzoFYRHmfEt4M= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=wdc.com; spf=pass smtp.mailfrom=wdc.com; dkim=pass (2048-bit key) header.d=wdc.com header.i=@wdc.com header.b=Lvw0GM9F; arc=none smtp.client-ip=216.71.154.45 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=wdc.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=wdc.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=wdc.com header.i=@wdc.com header.b="Lvw0GM9F" DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=wdc.com; i=@wdc.com; q=dns/txt; s=dkim.wdc.com; t=1742364902; x=1773900902; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=3Og5b8Jz9omO7bsj8HKjX4RYvUW9aHrQNzJXh18Y430=; b=Lvw0GM9FUg5dA83Unpd0VtguybSFYgU2zG92P5WZRt4qW3QURJuiFPjd wQuvXuf2qJxd5n5b19zF1rYBUvjyik7Gy0ZAaEofzEgyz5gI3/xF7xGY9 GDc9PnoA6zXqSljpq8mcfWhfpuqhtcLC/ZfQLAVzjSEzLoUROCbEYZN6M cASqYo/Yz5B6AI7G1i5iwapK0zBbkbCCMxWdOEtNo293imObZetm74ReA p2cCQEOYCwV98F24cypsj/jWxu8jdsShGsSUajp/hBAcG7/jnr+enEts5 ytSxHQoXFqN/kGr+NCs1eGI/hivAjfvIxchPviW6qRFCcKQdkdOyP9zKv g==; X-CSE-ConnectionGUID: jmMm8ZCRSvSSwE+I79rKrg== X-CSE-MsgGUID: soFYq4xwQ2uXviwjTvSvZg== X-IronPort-AV: E=Sophos;i="6.14,258,1736784000"; d="scan'208";a="55227243" Received: from uls-op-cesaip01.wdc.com (HELO uls-op-cesaep01.wdc.com) ([199.255.45.14]) by ob1.hgst.iphmx.com with ESMTP; 19 Mar 2025 14:15:01 +0800 IronPort-SDR: 67da5305_LqyTzZgSe0YW2GBCLM5XWIiHVzoDYSoJWty5oe5+TIQGEjH OLhFQnbBm2GUiBw5FspCMVd5scb6Bcpti6w4rmA== Received: from uls-op-cesaip02.wdc.com ([10.248.3.37]) by uls-op-cesaep01.wdc.com with ESMTP/TLS/ECDHE-RSA-AES128-GCM-SHA256; 18 Mar 2025 22:15:50 -0700 WDCIronportException: Internal Received: from gbdn3z2.ad.shared (HELO naota-xeon..) ([10.224.109.136]) by uls-op-cesaip02.wdc.com with ESMTP; 18 Mar 2025 23:15:00 -0700 From: Naohiro Aota To: linux-btrfs@vger.kernel.org Cc: Naohiro Aota Subject: [PATCH v2 04/13] btrfs: spin out do_async_reclaim_{data,metadata}_space() Date: Wed, 19 Mar 2025 15:14:35 +0900 Message-ID: X-Mailer: git-send-email 2.49.0 In-Reply-To: References: Precedence: bulk X-Mailing-List: linux-btrfs@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Factor out the main part of btrfs_async_reclaim_data_space() to do_async_reclaim_data_space(), so it can take data space_info parameter it is working on. Do the same for metadata. There is no functional change. Signed-off-by: Naohiro Aota Reviewed-by: Johannes Thumshirn --- fs/btrfs/space-info.c | 45 ++++++++++++++++++++++++++++--------------- 1 file changed, 29 insertions(+), 16 deletions(-) diff --git a/fs/btrfs/space-info.c b/fs/btrfs/space-info.c index 60f76afc5fe9..3982c0300640 100644 --- a/fs/btrfs/space-info.c +++ b/fs/btrfs/space-info.c @@ -1088,23 +1088,15 @@ static bool maybe_fail_all_tickets(struct btrfs_fs_info *fs_info, return (tickets_id != space_info->tickets_id); } -/* - * This is for normal flushers, we can wait all goddamned day if we want to. We - * will loop and continuously try to flush as long as we are making progress. - * We count progress as clearing off tickets each time we have to loop. - */ -static void btrfs_async_reclaim_metadata_space(struct work_struct *work) +static void do_async_reclaim_metadata_space(struct btrfs_space_info *space_info) { - struct btrfs_fs_info *fs_info; - struct btrfs_space_info *space_info; + struct btrfs_fs_info *fs_info = space_info->fs_info; u64 to_reclaim; enum btrfs_flush_state flush_state; int commit_cycles = 0; u64 last_tickets_id; enum btrfs_flush_state final_state; - fs_info = container_of(work, struct btrfs_fs_info, async_reclaim_work); - space_info = btrfs_find_space_info(fs_info, BTRFS_BLOCK_GROUP_METADATA); if (btrfs_is_zoned(fs_info)) final_state = RESET_ZONES; else @@ -1178,6 +1170,21 @@ static void btrfs_async_reclaim_metadata_space(struct work_struct *work) } while (flush_state <= final_state); } +/* + * This is for normal flushers, we can wait all goddamned day if we want to. We + * will loop and continuously try to flush as long as we are making progress. + * We count progress as clearing off tickets each time we have to loop. + */ +static void btrfs_async_reclaim_metadata_space(struct work_struct *work) +{ + struct btrfs_fs_info *fs_info; + struct btrfs_space_info *space_info; + + fs_info = container_of(work, struct btrfs_fs_info, async_reclaim_work); + space_info = btrfs_find_space_info(fs_info, BTRFS_BLOCK_GROUP_METADATA); + do_async_reclaim_metadata_space(space_info); +} + /* * This handles pre-flushing of metadata space before we get to the point that * we need to start blocking threads on tickets. The logic here is different @@ -1323,16 +1330,12 @@ static const enum btrfs_flush_state data_flush_states[] = { ALLOC_CHUNK_FORCE, }; -static void btrfs_async_reclaim_data_space(struct work_struct *work) +static void do_async_reclaim_data_space(struct btrfs_space_info *space_info) { - struct btrfs_fs_info *fs_info; - struct btrfs_space_info *space_info; + struct btrfs_fs_info *fs_info = space_info->fs_info; u64 last_tickets_id; enum btrfs_flush_state flush_state = 0; - fs_info = container_of(work, struct btrfs_fs_info, async_data_reclaim_work); - space_info = fs_info->data_sinfo; - spin_lock(&space_info->lock); if (list_empty(&space_info->tickets)) { space_info->flush = 0; @@ -1400,6 +1403,16 @@ static void btrfs_async_reclaim_data_space(struct work_struct *work) spin_unlock(&space_info->lock); } +static void btrfs_async_reclaim_data_space(struct work_struct *work) +{ + struct btrfs_fs_info *fs_info; + struct btrfs_space_info *space_info; + + fs_info = container_of(work, struct btrfs_fs_info, async_data_reclaim_work); + space_info = fs_info->data_sinfo; + do_async_reclaim_data_space(space_info); +} + void btrfs_init_async_reclaim_work(struct btrfs_fs_info *fs_info) { INIT_WORK(&fs_info->async_reclaim_work, btrfs_async_reclaim_metadata_space); From patchwork Wed Mar 19 06:14:36 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Naohiro Aota X-Patchwork-Id: 14022109 Received: from esa6.hgst.iphmx.com (esa6.hgst.iphmx.com [216.71.154.45]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id DA25D24EF8B for ; Wed, 19 Mar 2025 06:15:02 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=216.71.154.45 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1742364904; cv=none; b=Ku/IfW2ai7H6fUohXr3yP6CYFSxf8PGDbSkRtl6/gOSddmiAUMhUA94PVlykw/CHYjgr7hDac+yfcZlSlXF3bBc3yTtz1vLk8NepqyrHT44oGvnYcZ9+1ub1/zPu5EEM2AIFuJ2TgXXqg3fZi/htB7psabM8wDShY2vpePyu6U0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1742364904; c=relaxed/simple; bh=g6qN3PnnfgqnJHHBbQTiE7I0+WwKh8I3g7daRrtm5nI=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=oJNfu3fm3tjhCfvXZmHMmE3x+VqNhn/+86LU3m7gHBlKL8CQgFyMcmIiTnX5Zb3SGOafphnQ2wVZ/FCdEPYvIFiFTpJMZadOyTzmI1vm5GixQCTZ1O+rlKPkjOF0CZK0+5IzzyG1E8umnLxvgF2l2HlwigdM/hxQ8TVfYyoJn2E= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=wdc.com; spf=pass smtp.mailfrom=wdc.com; dkim=pass (2048-bit key) header.d=wdc.com header.i=@wdc.com header.b=CoHKCcVl; arc=none smtp.client-ip=216.71.154.45 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=wdc.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=wdc.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=wdc.com header.i=@wdc.com header.b="CoHKCcVl" DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=wdc.com; i=@wdc.com; q=dns/txt; s=dkim.wdc.com; t=1742364902; x=1773900902; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=g6qN3PnnfgqnJHHBbQTiE7I0+WwKh8I3g7daRrtm5nI=; b=CoHKCcVlKFkyzybsZZ4jNC6ZV4Gn3xGUf5lwGLLFDTlHvEa5C1ctCucg Yktt8ztFNRAFLJ7Ez4xIWXKrgNp7nY05/fsnsPZtW/4c2DVmyYgN6k6OU eli6UPk0/T/09I9xErGt0bg9NBp9BeahVUPUsTegE6mihz50tqn5948Cu 4eia8K+F7aglWygWYMbVdwnjcavMzW/iO2FqDPAQLWF7/nN+aN/4Qa8v2 IpbSW4Sdq4wTHDriVTthbGjTgKyiFenY+n5hdGOXIUACyVrQfrkWkJv6p UOSxZxUoKbPaR+E0q7uI0Zs4j+i9f/7a/ih91I0EAgmVqO8Pjj6kIv9vR g==; X-CSE-ConnectionGUID: C07FNxRpT6+peu4R4q8xCA== X-CSE-MsgGUID: PR0oM7ImRye0DGEPUH7UyA== X-IronPort-AV: E=Sophos;i="6.14,258,1736784000"; d="scan'208";a="55227249" Received: from uls-op-cesaip01.wdc.com (HELO uls-op-cesaep01.wdc.com) ([199.255.45.14]) by ob1.hgst.iphmx.com with ESMTP; 19 Mar 2025 14:15:02 +0800 IronPort-SDR: 67da5306_85x3UXGZngUioLXHHnTnXznGibsUyPDDE9NcTaQbOxpTfza URAHYiKYhXSQadhtvMnTdRsr/JrZRzFv3TTezyQ== Received: from uls-op-cesaip02.wdc.com ([10.248.3.37]) by uls-op-cesaep01.wdc.com with ESMTP/TLS/ECDHE-RSA-AES128-GCM-SHA256; 18 Mar 2025 22:15:51 -0700 WDCIronportException: Internal Received: from gbdn3z2.ad.shared (HELO naota-xeon..) ([10.224.109.136]) by uls-op-cesaip02.wdc.com with ESMTP; 18 Mar 2025 23:15:01 -0700 From: Naohiro Aota To: linux-btrfs@vger.kernel.org Cc: Naohiro Aota Subject: [PATCH v2 05/13] btrfs: factor out check_removing_space_info() Date: Wed, 19 Mar 2025 15:14:36 +0900 Message-ID: <580c3b12069246506736dd829725feb500397f15.1742364593.git.naohiro.aota@wdc.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: References: Precedence: bulk X-Mailing-List: linux-btrfs@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Factor out check_removing_space_info() from btrfs_free_block_groups(). It sanity checks a to-be-removed space_info. There is no functional change. --- fs/btrfs/block-group.c | 51 ++++++++++++++++++++++++------------------ 1 file changed, 29 insertions(+), 22 deletions(-) diff --git a/fs/btrfs/block-group.c b/fs/btrfs/block-group.c index a8129f1ce78c..b0e0b4251f36 100644 --- a/fs/btrfs/block-group.c +++ b/fs/btrfs/block-group.c @@ -4402,6 +4402,34 @@ void btrfs_put_block_group_cache(struct btrfs_fs_info *info) } } +static void check_removing_space_info(struct btrfs_space_info *space_info) +{ + struct btrfs_fs_info *info = space_info->fs_info; + + /* + * Do not hide this behind enospc_debug, this is actually + * important and indicates a real bug if this happens. + */ + if (WARN_ON(space_info->bytes_pinned > 0 || + space_info->bytes_may_use > 0)) + btrfs_dump_space_info(info, space_info, 0, 0); + + /* + * If there was a failure to cleanup a log tree, very likely due + * to an IO failure on a writeback attempt of one or more of its + * extent buffers, we could not do proper (and cheap) unaccounting + * of their reserved space, so don't warn on bytes_reserved > 0 in + * that case. + */ + if (!(space_info->flags & BTRFS_BLOCK_GROUP_METADATA) || + !BTRFS_FS_LOG_CLEANUP_ERROR(info)) { + if (WARN_ON(space_info->bytes_reserved > 0)) + btrfs_dump_space_info(info, space_info, 0, 0); + } + + WARN_ON(space_info->reclaim_size > 0); +} + /* * Must be called only after stopping all workers, since we could have block * group caching kthreads running, and therefore they could race with us if we @@ -4503,28 +4531,7 @@ int btrfs_free_block_groups(struct btrfs_fs_info *info) struct btrfs_space_info, list); - /* - * Do not hide this behind enospc_debug, this is actually - * important and indicates a real bug if this happens. - */ - if (WARN_ON(space_info->bytes_pinned > 0 || - space_info->bytes_may_use > 0)) - btrfs_dump_space_info(info, space_info, 0, 0); - - /* - * If there was a failure to cleanup a log tree, very likely due - * to an IO failure on a writeback attempt of one or more of its - * extent buffers, we could not do proper (and cheap) unaccounting - * of their reserved space, so don't warn on bytes_reserved > 0 in - * that case. - */ - if (!(space_info->flags & BTRFS_BLOCK_GROUP_METADATA) || - !BTRFS_FS_LOG_CLEANUP_ERROR(info)) { - if (WARN_ON(space_info->bytes_reserved > 0)) - btrfs_dump_space_info(info, space_info, 0, 0); - } - - WARN_ON(space_info->reclaim_size > 0); + check_removing_space_info(space_info); list_del(&space_info->list); btrfs_sysfs_remove_space_info(space_info); } From patchwork Wed Mar 19 06:14:37 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Naohiro Aota X-Patchwork-Id: 14022110 Received: from esa6.hgst.iphmx.com (esa6.hgst.iphmx.com [216.71.154.45]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id A3A5224EF70 for ; Wed, 19 Mar 2025 06:15:03 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=216.71.154.45 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1742364905; cv=none; b=kOoE7oC5dvTjlMRzVrl6rOS2J2fuJi/INdodKYe9vDNKMpvQ1pafiJMRnSMycp+sh+oylTW7yEEm3jwVh1qTqTq3CzzHAkx2LanEB68XNSc7pqewQIMvFr+vM6//MQ0Zmp7ATCBTk1taso+PvsdVJ52VXlwg162shMR/CKSiv2Q= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1742364905; c=relaxed/simple; bh=92eV0uk5DRe47AyGTfcmgv5zzaozrTPrOGSODqpWdEE=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=K8Q0he/zJEL0GQYjQTZ6UdnfhFx0U/kWzRdl+VHdcK2eGPaFfV4+Lau2KdLLxqKiLLajn5q04Xz+w2nbcX6susewsRaPOpzG80XZTS+EnOWO55/GqJCKFpVwkZmLNeIxHHiA4+qmeYy10hy6tlw1I3rmqeSn1XFY2peD5mP+9jg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=wdc.com; spf=pass smtp.mailfrom=wdc.com; dkim=pass (2048-bit key) header.d=wdc.com header.i=@wdc.com header.b=hOHgtvV6; arc=none smtp.client-ip=216.71.154.45 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=wdc.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=wdc.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=wdc.com header.i=@wdc.com header.b="hOHgtvV6" DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=wdc.com; i=@wdc.com; q=dns/txt; s=dkim.wdc.com; t=1742364903; x=1773900903; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=92eV0uk5DRe47AyGTfcmgv5zzaozrTPrOGSODqpWdEE=; b=hOHgtvV67jCM0ZQI/zZYeTHsVWrJMX/sWlG+9ZKf9ilq3dExXdj4oUfW Od6yaTs5oYPGY/WbVLICsCstl0iIAmIqW/ywJpRAcKr0xhuZOC6mHebio /4Q2gJ1rtQrcV4Zrg9uz0agu3fix7m0cr7TXL6evW7LJNs6QAbhRItWCx 6ymqn0Vt5rAQKu6DfNiCifJekUl6MgJu/RyNubQgraXu25oCfEYNrP4gy OREYkp2Wmijz88PQBTK7tqpESpheEFC0mMgbymZ4qOBJOLSTbBZrZ7xt2 XowYaTb/sEr/Ml8+SGqUFmvYOO/HzBD/0VchhfZeSN+otSypRd+pywR1E Q==; X-CSE-ConnectionGUID: krg0oQleQROdGCT+f03jIg== X-CSE-MsgGUID: qvDT8dfJRKm3DpqcxhhAIw== X-IronPort-AV: E=Sophos;i="6.14,258,1736784000"; d="scan'208";a="55227251" Received: from uls-op-cesaip01.wdc.com (HELO uls-op-cesaep01.wdc.com) ([199.255.45.14]) by ob1.hgst.iphmx.com with ESMTP; 19 Mar 2025 14:15:03 +0800 IronPort-SDR: 67da5307_rNtlL+SvKaPMGEWSVBhK4YM5WiSZ84XcEYiDhiKI+4BayXF knsWo7rbbw3Kiq/9/Wgq2q1RA5BO4VrXBX74S1Q== Received: from uls-op-cesaip02.wdc.com ([10.248.3.37]) by uls-op-cesaep01.wdc.com with ESMTP/TLS/ECDHE-RSA-AES128-GCM-SHA256; 18 Mar 2025 22:15:52 -0700 WDCIronportException: Internal Received: from gbdn3z2.ad.shared (HELO naota-xeon..) ([10.224.109.136]) by uls-op-cesaip02.wdc.com with ESMTP; 18 Mar 2025 23:15:02 -0700 From: Naohiro Aota To: linux-btrfs@vger.kernel.org Cc: Naohiro Aota Subject: [PATCH v2 06/13] btrfs: introduce space_info argument to btrfs_chunk_alloc Date: Wed, 19 Mar 2025 15:14:37 +0900 Message-ID: X-Mailer: git-send-email 2.49.0 In-Reply-To: References: Precedence: bulk X-Mailing-List: linux-btrfs@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Take an optional btrfs_space_info argument in btrfs_chunk_alloc(). If specified, btrfs_chunk_alloc() works on the space_info. If not, the default space_info is used as the same as before. Signed-off-by: Naohiro Aota Reviewed-by: Johannes Thumshirn --- fs/btrfs/block-group.c | 19 ++++++++++++------- fs/btrfs/block-group.h | 3 ++- fs/btrfs/extent-tree.c | 2 +- fs/btrfs/space-info.c | 2 +- fs/btrfs/transaction.c | 2 +- 5 files changed, 17 insertions(+), 11 deletions(-) diff --git a/fs/btrfs/block-group.c b/fs/btrfs/block-group.c index b0e0b4251f36..fa08d7b67b1f 100644 --- a/fs/btrfs/block-group.c +++ b/fs/btrfs/block-group.c @@ -3020,7 +3020,7 @@ int btrfs_inc_block_group_ro(struct btrfs_block_group *cache, */ alloc_flags = btrfs_get_alloc_profile(fs_info, cache->flags); if (alloc_flags != cache->flags) { - ret = btrfs_chunk_alloc(trans, alloc_flags, + ret = btrfs_chunk_alloc(trans, NULL, alloc_flags, CHUNK_ALLOC_FORCE); /* * ENOSPC is allowed here, we may have enough space @@ -3049,7 +3049,7 @@ int btrfs_inc_block_group_ro(struct btrfs_block_group *cache, goto unlock_out; alloc_flags = btrfs_get_alloc_profile(fs_info, cache->space_info->flags); - ret = btrfs_chunk_alloc(trans, alloc_flags, CHUNK_ALLOC_FORCE); + ret = btrfs_chunk_alloc(trans, NULL, alloc_flags, CHUNK_ALLOC_FORCE); if (ret < 0) goto out; /* @@ -3901,7 +3901,7 @@ int btrfs_force_chunk_alloc(struct btrfs_trans_handle *trans, u64 type) { u64 alloc_flags = btrfs_get_alloc_profile(trans->fs_info, type); - return btrfs_chunk_alloc(trans, alloc_flags, CHUNK_ALLOC_FORCE); + return btrfs_chunk_alloc(trans, NULL, alloc_flags, CHUNK_ALLOC_FORCE); } static struct btrfs_block_group *do_chunk_alloc(struct btrfs_trans_handle *trans, u64 flags) @@ -4104,12 +4104,15 @@ static struct btrfs_block_group *do_chunk_alloc(struct btrfs_trans_handle *trans * - return 0 if it doesn't need to allocate a new chunk, * - return 1 if it successfully allocates a chunk, * - return errors including -ENOSPC otherwise. + * + * @space_info can optionally be specified to make a new chunk belong to it. If + * it is NULL, it is set automatically. */ -int btrfs_chunk_alloc(struct btrfs_trans_handle *trans, u64 flags, +int btrfs_chunk_alloc(struct btrfs_trans_handle *trans, + struct btrfs_space_info *space_info, u64 flags, enum btrfs_chunk_alloc_enum force) { struct btrfs_fs_info *fs_info = trans->fs_info; - struct btrfs_space_info *space_info; struct btrfs_block_group *ret_bg; bool wait_for_alloc = false; bool should_alloc = false; @@ -4148,8 +4151,10 @@ int btrfs_chunk_alloc(struct btrfs_trans_handle *trans, u64 flags, if (flags & BTRFS_BLOCK_GROUP_SYSTEM) return -ENOSPC; - space_info = btrfs_find_space_info(fs_info, flags); - ASSERT(space_info); + if (!space_info) { + space_info = btrfs_find_space_info(fs_info, flags); + ASSERT(space_info); + } do { spin_lock(&space_info->lock); diff --git a/fs/btrfs/block-group.h b/fs/btrfs/block-group.h index 36937eeab9b8..c01f3af726a1 100644 --- a/fs/btrfs/block-group.h +++ b/fs/btrfs/block-group.h @@ -342,7 +342,8 @@ int btrfs_add_reserved_bytes(struct btrfs_block_group *cache, bool force_wrong_size_class); void btrfs_free_reserved_bytes(struct btrfs_block_group *cache, u64 num_bytes, int delalloc); -int btrfs_chunk_alloc(struct btrfs_trans_handle *trans, u64 flags, +int btrfs_chunk_alloc(struct btrfs_trans_handle *trans, + struct btrfs_space_info *space_info, u64 flags, enum btrfs_chunk_alloc_enum force); int btrfs_force_chunk_alloc(struct btrfs_trans_handle *trans, u64 type); void check_system_chunk(struct btrfs_trans_handle *trans, const u64 type); diff --git a/fs/btrfs/extent-tree.c b/fs/btrfs/extent-tree.c index 957230abd827..062f860ec379 100644 --- a/fs/btrfs/extent-tree.c +++ b/fs/btrfs/extent-tree.c @@ -4165,7 +4165,7 @@ static int find_free_extent_update_loop(struct btrfs_fs_info *fs_info, return ret; } - ret = btrfs_chunk_alloc(trans, ffe_ctl->flags, + ret = btrfs_chunk_alloc(trans, NULL, ffe_ctl->flags, CHUNK_ALLOC_FORCE_FOR_EXTENT); /* Do not bail out on ENOSPC since we can do more. */ diff --git a/fs/btrfs/space-info.c b/fs/btrfs/space-info.c index 3982c0300640..c421161f4237 100644 --- a/fs/btrfs/space-info.c +++ b/fs/btrfs/space-info.c @@ -817,7 +817,7 @@ static void flush_space(struct btrfs_fs_info *fs_info, ret = PTR_ERR(trans); break; } - ret = btrfs_chunk_alloc(trans, + ret = btrfs_chunk_alloc(trans, space_info, btrfs_get_alloc_profile(fs_info, space_info->flags), (state == ALLOC_CHUNK) ? CHUNK_ALLOC_NO_FORCE : CHUNK_ALLOC_FORCE); diff --git a/fs/btrfs/transaction.c b/fs/btrfs/transaction.c index f26a394a9ec5..ae6ee8b91d71 100644 --- a/fs/btrfs/transaction.c +++ b/fs/btrfs/transaction.c @@ -763,7 +763,7 @@ start_transaction(struct btrfs_root *root, unsigned int num_items, if (do_chunk_alloc && num_bytes) { u64 flags = h->block_rsv->space_info->flags; - btrfs_chunk_alloc(h, btrfs_get_alloc_profile(fs_info, flags), + btrfs_chunk_alloc(h, NULL, btrfs_get_alloc_profile(fs_info, flags), CHUNK_ALLOC_NO_FORCE); } From patchwork Wed Mar 19 06:14:38 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Naohiro Aota X-Patchwork-Id: 14022111 Received: from esa6.hgst.iphmx.com (esa6.hgst.iphmx.com [216.71.154.45]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 1298C24EA9D for ; Wed, 19 Mar 2025 06:15:05 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=216.71.154.45 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1742364906; cv=none; b=j43e/vTslYW56FkIGlN9WIvdGNni8+Op+QaxrA/k6l/ddoXdJwId5IpOXCGNNKKAm9deLbYS9oST6O2XdOAhSHEvfMWwvIy7neEf8hWZLLNo/g4Aw6Amk1zK2Q4Ef59dMKY+TF90a6N/YVpJvd4AYLIxru8n5QEB/TcvDszM4cQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1742364906; c=relaxed/simple; bh=Tst1uPTMFAxmau1w4KlkVEO0zo28e4/zcFF7sjMzuXs=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=LoY9+v/j3EfiVMfXw4mwlP+RzwLTmQ00L4YUqI3uT4zsmFlZvD4pYZ7+TVh8SZSSfDzG8oQSmdc3fK4vyN+fUtavBorPdTcCT5LZ3aFs5Lyx6ZZdUGdQ/4YK5wa4n+Ty9ynR+Ware68vnVVbx46tiAHmX4wuOtcCMnfUacn4heI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=wdc.com; spf=pass smtp.mailfrom=wdc.com; dkim=pass (2048-bit key) header.d=wdc.com header.i=@wdc.com header.b=Fhc5dXH4; arc=none smtp.client-ip=216.71.154.45 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=wdc.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=wdc.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=wdc.com header.i=@wdc.com header.b="Fhc5dXH4" DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=wdc.com; i=@wdc.com; q=dns/txt; s=dkim.wdc.com; t=1742364904; x=1773900904; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=Tst1uPTMFAxmau1w4KlkVEO0zo28e4/zcFF7sjMzuXs=; b=Fhc5dXH4nv7ukh268s+KKpjlga9CfO3UW24MXNtLoGC4F3uxMxYH9bCQ 5I1nKOWS1L/l20KKBa2NAuL0wmvztzdQgp7KTH/uqwTdOq2102sIdnhvv 5pQJ4atBe6OkdaMd26oCu9YOdXmBdRcd/mIAK2GKU6rKRKjB0ICESM23o r4MOm2IlctcgWbPgv5ReeS6vjiH9WxkgrMB1uxWXHRm6ggTjUbGiXJhLc ewJlfmgnaruM1iF5bHIyyjHLlnTCaVeorFgay8Xo1rMfwkRqbydpSVXBC WOg/4N1X8YDS5nbZSH43RpDMX8zpCfccrrK3IZjvSeYi9mXxjfgcz19C6 w==; X-CSE-ConnectionGUID: t9QFPxsZQ1Co/6YqxiUqrA== X-CSE-MsgGUID: GfEMESaWRPCOPa20Qqa/2A== X-IronPort-AV: E=Sophos;i="6.14,258,1736784000"; d="scan'208";a="55227255" Received: from uls-op-cesaip01.wdc.com (HELO uls-op-cesaep01.wdc.com) ([199.255.45.14]) by ob1.hgst.iphmx.com with ESMTP; 19 Mar 2025 14:15:04 +0800 IronPort-SDR: 67da5308_935c9B+JuRcAQULB5VCHWKnYWN7botfGTYNBOsVwejzExUk etWBIkFatP1O+07hdl2lW/UX0MvXZla5BrvuH8Q== Received: from uls-op-cesaip02.wdc.com ([10.248.3.37]) by uls-op-cesaep01.wdc.com with ESMTP/TLS/ECDHE-RSA-AES128-GCM-SHA256; 18 Mar 2025 22:15:53 -0700 WDCIronportException: Internal Received: from gbdn3z2.ad.shared (HELO naota-xeon..) ([10.224.109.136]) by uls-op-cesaip02.wdc.com with ESMTP; 18 Mar 2025 23:15:03 -0700 From: Naohiro Aota To: linux-btrfs@vger.kernel.org Cc: Naohiro Aota Subject: [PATCH v2 07/13] btrfs: pass space_info for block group creation Date: Wed, 19 Mar 2025 15:14:38 +0900 Message-ID: <1c2d3aa8f33d04cae6296d2d10a0688f435ef3a7.1742364593.git.naohiro.aota@wdc.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: References: Precedence: bulk X-Mailing-List: linux-btrfs@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Add btrfs_space_info parameter to btrfs_make_block_group(), its related functions and related struct. Passed space_info will have a new block group. If NULL is passed, it uses the default space_info. The parameter is used in a later commit and the behavior is unchanged now. Signed-off-by: Naohiro Aota Reviewed-by: Johannes Thumshirn --- fs/btrfs/block-group.c | 15 ++++++++------- fs/btrfs/block-group.h | 2 +- fs/btrfs/volumes.c | 16 +++++++++++----- fs/btrfs/volumes.h | 2 +- 4 files changed, 21 insertions(+), 14 deletions(-) diff --git a/fs/btrfs/block-group.c b/fs/btrfs/block-group.c index fa08d7b67b1f..56c3aa0e7fe2 100644 --- a/fs/btrfs/block-group.c +++ b/fs/btrfs/block-group.c @@ -2868,7 +2868,7 @@ static u64 calculate_global_root_id(const struct btrfs_fs_info *fs_info, u64 off } struct btrfs_block_group *btrfs_make_block_group(struct btrfs_trans_handle *trans, - u64 type, + struct btrfs_space_info *space_info, u64 type, u64 chunk_offset, u64 size) { struct btrfs_fs_info *fs_info = trans->fs_info; @@ -2923,7 +2923,7 @@ struct btrfs_block_group *btrfs_make_block_group(struct btrfs_trans_handle *tran * assigned to our block group. We want our bg to be added to the rbtree * with its ->space_info set. */ - cache->space_info = btrfs_find_space_info(fs_info, cache->flags); + cache->space_info = space_info; ASSERT(cache->space_info); ret = btrfs_add_block_group_cache(cache); @@ -3904,7 +3904,8 @@ int btrfs_force_chunk_alloc(struct btrfs_trans_handle *trans, u64 type) return btrfs_chunk_alloc(trans, NULL, alloc_flags, CHUNK_ALLOC_FORCE); } -static struct btrfs_block_group *do_chunk_alloc(struct btrfs_trans_handle *trans, u64 flags) +static struct btrfs_block_group *do_chunk_alloc(struct btrfs_trans_handle *trans, + struct btrfs_space_info *space_info, u64 flags) { struct btrfs_block_group *bg; int ret; @@ -3917,7 +3918,7 @@ static struct btrfs_block_group *do_chunk_alloc(struct btrfs_trans_handle *trans */ check_system_chunk(trans, flags); - bg = btrfs_create_chunk(trans, flags); + bg = btrfs_create_chunk(trans, space_info, flags); if (IS_ERR(bg)) { ret = PTR_ERR(bg); goto out; @@ -3966,7 +3967,7 @@ static struct btrfs_block_group *do_chunk_alloc(struct btrfs_trans_handle *trans const u64 sys_flags = btrfs_system_alloc_profile(trans->fs_info); struct btrfs_block_group *sys_bg; - sys_bg = btrfs_create_chunk(trans, sys_flags); + sys_bg = btrfs_create_chunk(trans, NULL, sys_flags); if (IS_ERR(sys_bg)) { ret = PTR_ERR(sys_bg); btrfs_abort_transaction(trans, ret); @@ -4216,7 +4217,7 @@ int btrfs_chunk_alloc(struct btrfs_trans_handle *trans, force_metadata_allocation(fs_info); } - ret_bg = do_chunk_alloc(trans, flags); + ret_bg = do_chunk_alloc(trans, space_info, flags); trans->allocating_chunk = false; if (IS_ERR(ret_bg)) { @@ -4299,7 +4300,7 @@ static void reserve_chunk_space(struct btrfs_trans_handle *trans, * the paths we visit in the chunk tree (they were already COWed * or created in the current transaction for example). */ - bg = btrfs_create_chunk(trans, flags); + bg = btrfs_create_chunk(trans, NULL, flags); if (IS_ERR(bg)) { ret = PTR_ERR(bg); } else { diff --git a/fs/btrfs/block-group.h b/fs/btrfs/block-group.h index c01f3af726a1..cb9b0405172c 100644 --- a/fs/btrfs/block-group.h +++ b/fs/btrfs/block-group.h @@ -326,7 +326,7 @@ void btrfs_reclaim_bgs(struct btrfs_fs_info *fs_info); void btrfs_mark_bg_to_reclaim(struct btrfs_block_group *bg); int btrfs_read_block_groups(struct btrfs_fs_info *info); struct btrfs_block_group *btrfs_make_block_group(struct btrfs_trans_handle *trans, - u64 type, + struct btrfs_space_info *space_info, u64 type, u64 chunk_offset, u64 size); void btrfs_create_pending_block_groups(struct btrfs_trans_handle *trans); int btrfs_inc_block_group_ro(struct btrfs_block_group *cache, diff --git a/fs/btrfs/volumes.c b/fs/btrfs/volumes.c index c8c21c55be53..b070a549a9e4 100644 --- a/fs/btrfs/volumes.c +++ b/fs/btrfs/volumes.c @@ -3420,7 +3420,7 @@ int btrfs_remove_chunk(struct btrfs_trans_handle *trans, u64 chunk_offset) const u64 sys_flags = btrfs_system_alloc_profile(fs_info); struct btrfs_block_group *sys_bg; - sys_bg = btrfs_create_chunk(trans, sys_flags); + sys_bg = btrfs_create_chunk(trans, NULL, sys_flags); if (IS_ERR(sys_bg)) { ret = PTR_ERR(sys_bg); btrfs_abort_transaction(trans, ret); @@ -5216,6 +5216,8 @@ struct alloc_chunk_ctl { u64 stripe_size; u64 chunk_size; int ndevs; + /* Space_info the block group is going to belong. */ + struct btrfs_space_info *space_info; }; static void init_alloc_chunk_ctl_policy_regular( @@ -5618,7 +5620,7 @@ static struct btrfs_block_group *create_chunk(struct btrfs_trans_handle *trans, return ERR_PTR(ret); } - block_group = btrfs_make_block_group(trans, type, start, ctl->chunk_size); + block_group = btrfs_make_block_group(trans, ctl->space_info, type, start, ctl->chunk_size); if (IS_ERR(block_group)) { btrfs_remove_chunk_map(info, map); return block_group; @@ -5644,7 +5646,7 @@ static struct btrfs_block_group *create_chunk(struct btrfs_trans_handle *trans, } struct btrfs_block_group *btrfs_create_chunk(struct btrfs_trans_handle *trans, - u64 type) + struct btrfs_space_info *space_info, u64 type) { struct btrfs_fs_info *info = trans->fs_info; struct btrfs_fs_devices *fs_devices = info->fs_devices; @@ -5672,8 +5674,12 @@ struct btrfs_block_group *btrfs_create_chunk(struct btrfs_trans_handle *trans, return ERR_PTR(-EINVAL); } + if (!space_info) + space_info = btrfs_find_space_info(info, type); + ASSERT(space_info); ctl.start = find_next_chunk(info); ctl.type = type; + ctl.space_info = space_info; init_alloc_chunk_ctl(fs_devices, &ctl); devices_info = kcalloc(fs_devices->rw_devices, sizeof(*devices_info), @@ -5841,12 +5847,12 @@ static noinline int init_first_rw_device(struct btrfs_trans_handle *trans) */ alloc_profile = btrfs_metadata_alloc_profile(fs_info); - meta_bg = btrfs_create_chunk(trans, alloc_profile); + meta_bg = btrfs_create_chunk(trans, NULL, alloc_profile); if (IS_ERR(meta_bg)) return PTR_ERR(meta_bg); alloc_profile = btrfs_system_alloc_profile(fs_info); - sys_bg = btrfs_create_chunk(trans, alloc_profile); + sys_bg = btrfs_create_chunk(trans, NULL, alloc_profile); if (IS_ERR(sys_bg)) return PTR_ERR(sys_bg); diff --git a/fs/btrfs/volumes.h b/fs/btrfs/volumes.h index e247d551da67..8af536078cab 100644 --- a/fs/btrfs/volumes.h +++ b/fs/btrfs/volumes.h @@ -715,7 +715,7 @@ struct btrfs_discard_stripe *btrfs_map_discard(struct btrfs_fs_info *fs_info, int btrfs_read_sys_array(struct btrfs_fs_info *fs_info); int btrfs_read_chunk_tree(struct btrfs_fs_info *fs_info); struct btrfs_block_group *btrfs_create_chunk(struct btrfs_trans_handle *trans, - u64 type); + struct btrfs_space_info *space_info, u64 type); void btrfs_mapping_tree_free(struct btrfs_fs_info *fs_info); int btrfs_open_devices(struct btrfs_fs_devices *fs_devices, blk_mode_t flags, void *holder); From patchwork Wed Mar 19 06:14:39 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Naohiro Aota X-Patchwork-Id: 14022112 Received: from esa6.hgst.iphmx.com (esa6.hgst.iphmx.com [216.71.154.45]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id C92F424FBF7 for ; Wed, 19 Mar 2025 06:15:05 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=216.71.154.45 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1742364907; cv=none; b=U9VTz5AClSToJRAVJ227IH0CD4Zrc14aJVpTnoBM2gErODwBzmqiz4VZx46OeK1gjeTc8um9qQoSwfpEGgNLWyxYgs8yD+pj3fTXsqPpEsh04Hsl7aR4JxkUWPYM3dE/Rq1Sin6AAl1F0ZDc4sOv0FqgkyoHdT3LowAMihTXQF4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1742364907; c=relaxed/simple; bh=u/pHphpihMHnDsLLvXJGABZT5CWOxqEYfKa7zEainC4=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=p0hPVAdPhUJ/BalATaYjkgjwxuYX+xlZkC/j3Mt70FRYrT+7jJ1CYDvi/ocIH5P9IWe1F3kn0O5EYEXLfyuIcdL/J4drsSXPmYAv4fFdiOTv0phpa4fkW1QMjyaLW6Mi16AIRg1fSh2NW5W7lMwxNWkrta+FAfcE6sJ5f2ScZEM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=wdc.com; spf=pass smtp.mailfrom=wdc.com; dkim=pass (2048-bit key) header.d=wdc.com header.i=@wdc.com header.b=VHBTupJT; arc=none smtp.client-ip=216.71.154.45 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=wdc.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=wdc.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=wdc.com header.i=@wdc.com header.b="VHBTupJT" DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=wdc.com; i=@wdc.com; q=dns/txt; s=dkim.wdc.com; t=1742364905; x=1773900905; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=u/pHphpihMHnDsLLvXJGABZT5CWOxqEYfKa7zEainC4=; b=VHBTupJTJt2Tw3+CMLpFasiZ09xzwz778ercoBshJrWswWfKrKJR4GGZ l39hibeOYh4rTE46Oxf5Zb1gO3AIxPdA8M5HNXx55XlnDOnhKLUJwzuJQ l6pJLUT441CO8BrH0H2UGj6f1PIIK3j8JBAXVOZMDdwx+f3PM7nNBEBC7 He6hUS8leUt1k8g0LLCQ3dZjwAfijFV3KB3I6poOh4kAqjS+klQMQMgGE ckaPRGLz8qx2uMd1mdaOAnsOzjKcUMStAkfzxtilnDPffB0I/WNxodjdy WDmiR6Bnog99lVBMeeWnlYi1QOR5GEwnSb3Z/aFxJHr2fB61OMIPegyQ2 A==; X-CSE-ConnectionGUID: mbBSbsS1Tr21UPK5UKx+hA== X-CSE-MsgGUID: oMU0n4aLTDmPWksDLd7I+g== X-IronPort-AV: E=Sophos;i="6.14,258,1736784000"; d="scan'208";a="55227257" Received: from uls-op-cesaip01.wdc.com (HELO uls-op-cesaep01.wdc.com) ([199.255.45.14]) by ob1.hgst.iphmx.com with ESMTP; 19 Mar 2025 14:15:05 +0800 IronPort-SDR: 67da5309_KWlWap+kzo809+k1Nv/W2fbvGYeu5fwB/OIMtV5umaYsiKG ZsSEPnN2fSZJ88GMRgiXQ732gwp/eOCTroHk4+w== Received: from uls-op-cesaip02.wdc.com ([10.248.3.37]) by uls-op-cesaep01.wdc.com with ESMTP/TLS/ECDHE-RSA-AES128-GCM-SHA256; 18 Mar 2025 22:15:54 -0700 WDCIronportException: Internal Received: from gbdn3z2.ad.shared (HELO naota-xeon..) ([10.224.109.136]) by uls-op-cesaip02.wdc.com with ESMTP; 18 Mar 2025 23:15:04 -0700 From: Naohiro Aota To: linux-btrfs@vger.kernel.org Cc: Naohiro Aota Subject: [PATCH v2 08/13] btrfs: introduce btrfs_space_info sub-group Date: Wed, 19 Mar 2025 15:14:39 +0900 Message-ID: <355f307dca7ea6da7db20038d46b3ef7a2cedd4f.1742364593.git.naohiro.aota@wdc.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: References: Precedence: bulk X-Mailing-List: linux-btrfs@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Current code assumes we have only one space_info for each block group type (DATA, METADATA, and SYSTEM). We sometime needs multiple space_info to manage special block groups. One example is handling the data relocation block group for the zoned mode. That block group is dedicated for writing relocated data and we cannot allocate any regular extent from that block group, which is implemented in the zoned extent allocator. That block group still belongs to the normal data space_info. So, when all the normal data block groups are full and there are some free space in the dedicated block group, the space_info looks to have some free space, while it cannot allocate normal extent anymore. That results in a strange ENOSPC error. We need to have a space_info for the relocation data block group to represent the situation properly. This commit adds a basic infrastructure for having a "sub-group" of a space_info: creation and removing. A sub-group space_info belongs to one of the primary space_infos and has the same flags as its parent. This commit first introduces the relocation data sub-space_info, and the next commit will introduce tree-log sub-space_info. In the future, it could be useful to implement tiered storage for btrfs e.g, by implementing a sub-group space_info for block groups resides on a fast storage. Signed-off-by: Naohiro Aota --- fs/btrfs/block-group.c | 6 ++++++ fs/btrfs/space-info.c | 22 ++++++++++++++++++++-- fs/btrfs/space-info.h | 8 ++++++++ fs/btrfs/sysfs.c | 16 +++++++++++++--- 4 files changed, 47 insertions(+), 5 deletions(-) diff --git a/fs/btrfs/block-group.c b/fs/btrfs/block-group.c index 56c3aa0e7fe2..f5f0485d37b6 100644 --- a/fs/btrfs/block-group.c +++ b/fs/btrfs/block-group.c @@ -4537,6 +4537,12 @@ int btrfs_free_block_groups(struct btrfs_fs_info *info) struct btrfs_space_info, list); + for (int i = 0; i < BTRFS_SPACE_INFO_SUB_GROUP_MAX; i++) { + if (space_info->sub_group[i]) { + check_removing_space_info(space_info->sub_group[i]); + kfree(space_info->sub_group[i]); + } + } check_removing_space_info(space_info); list_del(&space_info->list); btrfs_sysfs_remove_space_info(space_info); diff --git a/fs/btrfs/space-info.c b/fs/btrfs/space-info.c index c421161f4237..53eea3cd2bf3 100644 --- a/fs/btrfs/space-info.c +++ b/fs/btrfs/space-info.c @@ -249,6 +249,7 @@ static void init_space_info(struct btrfs_fs_info *info, INIT_LIST_HEAD(&space_info->priority_tickets); space_info->clamp = 1; btrfs_update_space_info_chunk_size(space_info, calc_chunk_size(info, flags)); + space_info->subgroup_id = SUB_GROUP_PRIMARY; if (btrfs_is_zoned(info)) space_info->bg_reclaim_threshold = BTRFS_DEFAULT_ZONED_RECLAIM_THRESH; @@ -266,6 +267,22 @@ static int create_space_info(struct btrfs_fs_info *info, u64 flags) init_space_info(info, space_info, flags); + if (btrfs_is_zoned(info)) { + if (flags & BTRFS_BLOCK_GROUP_DATA) { + struct btrfs_space_info *reloc = kzalloc(sizeof(*reloc), GFP_NOFS); + + if (!reloc) + return -ENOMEM; + init_space_info(info, reloc, flags); + space_info->sub_group[SUB_GROUP_DATA_RELOC] = reloc; + reloc->parent = space_info; + reloc->subgroup_id = SUB_GROUP_DATA_RELOC; + + ret = btrfs_sysfs_add_space_info_type(info, reloc); + ASSERT(!ret); + } + } + ret = btrfs_sysfs_add_space_info_type(info, space_info); if (ret) return ret; @@ -561,8 +578,9 @@ static void __btrfs_dump_space_info(const struct btrfs_fs_info *fs_info, lockdep_assert_held(&info->lock); /* The free space could be negative in case of overcommit */ - btrfs_info(fs_info, "space_info %s has %lld free, is %sfull", - flag_str, + btrfs_info(fs_info, + "space_info %s (sub-group id %d) has %lld free, is %sfull", + flag_str, info->subgroup_id, (s64)(info->total_bytes - btrfs_space_info_used(info, true)), info->full ? "" : "not "); btrfs_info(fs_info, diff --git a/fs/btrfs/space-info.h b/fs/btrfs/space-info.h index 7459b4eb99cd..64641885babd 100644 --- a/fs/btrfs/space-info.h +++ b/fs/btrfs/space-info.h @@ -98,8 +98,16 @@ enum btrfs_flush_state { RESET_ZONES = 12, }; +enum btrfs_space_info_sub_group { + SUB_GROUP_DATA_RELOC = 0, + SUB_GROUP_PRIMARY = -1, +}; +#define BTRFS_SPACE_INFO_SUB_GROUP_MAX 1 struct btrfs_space_info { struct btrfs_fs_info *fs_info; + struct btrfs_space_info *parent; + struct btrfs_space_info *sub_group[BTRFS_SPACE_INFO_SUB_GROUP_MAX]; + int subgroup_id; spinlock_t lock; u64 total_bytes; /* total bytes in the space, diff --git a/fs/btrfs/sysfs.c b/fs/btrfs/sysfs.c index b9af74498b0c..92caa5d09e2f 100644 --- a/fs/btrfs/sysfs.c +++ b/fs/btrfs/sysfs.c @@ -1930,15 +1930,25 @@ void btrfs_sysfs_remove_space_info(struct btrfs_space_info *space_info) kobject_put(&space_info->kobj); } -static const char *alloc_name(u64 flags) +static const char *alloc_name(struct btrfs_space_info *space_info) { + u64 flags = space_info->flags; + switch (flags) { case BTRFS_BLOCK_GROUP_METADATA | BTRFS_BLOCK_GROUP_DATA: return "mixed"; case BTRFS_BLOCK_GROUP_METADATA: return "metadata"; case BTRFS_BLOCK_GROUP_DATA: - return "data"; + switch (space_info->subgroup_id) { + case SUB_GROUP_PRIMARY: + return "data"; + case SUB_GROUP_DATA_RELOC: + return "data-reloc"; + default: + WARN_ON_ONCE(1); + return "data (unknown sub-group)"; + } case BTRFS_BLOCK_GROUP_SYSTEM: return "system"; default: @@ -1958,7 +1968,7 @@ int btrfs_sysfs_add_space_info_type(struct btrfs_fs_info *fs_info, ret = kobject_init_and_add(&space_info->kobj, &space_info_ktype, fs_info->space_info_kobj, "%s", - alloc_name(space_info->flags)); + alloc_name(space_info)); if (ret) { kobject_put(&space_info->kobj); return ret; From patchwork Wed Mar 19 06:14:40 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Naohiro Aota X-Patchwork-Id: 14022113 Received: from esa6.hgst.iphmx.com (esa6.hgst.iphmx.com [216.71.154.45]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id E477D211A37 for ; Wed, 19 Mar 2025 06:15:06 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=216.71.154.45 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1742364908; cv=none; b=NvACuT6QbBuj7S1SNj5xxl4zJ17piLIVFQtoHgQVj7pUjpk5zXINZM8FftgDA60Z/XthMdQihbSIBpTOa3gO7H7sOU+axVxjMKaZDA/pQUTWImqK/K/y/BB4qfabqdsWhh0br2TNMAP5uBgrHYmxFV2LI6O8MMpC6ppcvccJuxg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1742364908; c=relaxed/simple; bh=/YiZh01/0ct/vUeCzk7oLhphp9SrZBp9ppV+s57BwrI=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=ujt11L87VlrYzdV2LxnOBOY2yEf7KbRP4Y0ydVT/wkeYuyXEp0E5Fw6QxZTyM49EcEvk6DLGuzdE4rnWsZjYJbdm8xHwZtPDSojlGw89mLer0QyUgbMip4atnUeUNxweUhwj9YOeSt/JAjsut59hygxKWNbmZJBsR9v+eZT2SVo= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=wdc.com; spf=pass smtp.mailfrom=wdc.com; dkim=pass (2048-bit key) header.d=wdc.com header.i=@wdc.com header.b=eDuI8VTq; arc=none smtp.client-ip=216.71.154.45 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=wdc.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=wdc.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=wdc.com header.i=@wdc.com header.b="eDuI8VTq" DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=wdc.com; i=@wdc.com; q=dns/txt; s=dkim.wdc.com; t=1742364906; x=1773900906; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=/YiZh01/0ct/vUeCzk7oLhphp9SrZBp9ppV+s57BwrI=; b=eDuI8VTqGepGFvWrw7MCOTOMyevxp2bJ4Cl0+VMe5uzdlan3TZD/ljjC C0Qh1a7j4EHPjNNEvDV8E+k1gPa0tOto1YbQQv2R+hBVQwSmjTuSMUUzQ wgVfZGj5VsTtjnnFgeiSdKfyAS/s0lLkV7jK1ZYRhixhrJwGzAra2UQo4 xP5YxTLrfKnz/J6BT3HiwNM5NNW4CpCfxkzvJshHmJjnquvgRQZok5KgW Cni2pDI6t91S5ffq8/A/TwLMwESv4C30yH6yHn84JAgmjtrsihyv01/gm bUUFJjqQdztk/2wPWis5xkQXOcrESXPd8LGl6d19Z4FbXtmuGX9OtWnUq A==; X-CSE-ConnectionGUID: lILWdo1WTLqMfoDuJDQw2A== X-CSE-MsgGUID: gfAKTs7RRpSrhgAtvW/uZA== X-IronPort-AV: E=Sophos;i="6.14,258,1736784000"; d="scan'208";a="55227259" Received: from uls-op-cesaip01.wdc.com (HELO uls-op-cesaep01.wdc.com) ([199.255.45.14]) by ob1.hgst.iphmx.com with ESMTP; 19 Mar 2025 14:15:06 +0800 IronPort-SDR: 67da530a_1sS/4YAcFOJ3cAtJOK98m5EPqFOVfxme+zYYisJ1G6jIFx7 VeS8UYyPR0JxtI6W2erg44zFMxQLGVZozYuy+8g== Received: from uls-op-cesaip02.wdc.com ([10.248.3.37]) by uls-op-cesaep01.wdc.com with ESMTP/TLS/ECDHE-RSA-AES128-GCM-SHA256; 18 Mar 2025 22:15:55 -0700 WDCIronportException: Internal Received: from gbdn3z2.ad.shared (HELO naota-xeon..) ([10.224.109.136]) by uls-op-cesaip02.wdc.com with ESMTP; 18 Mar 2025 23:15:05 -0700 From: Naohiro Aota To: linux-btrfs@vger.kernel.org Cc: Naohiro Aota Subject: [PATCH v2 09/13] btrfs: introduce tree-log sub-space_info Date: Wed, 19 Mar 2025 15:14:40 +0900 Message-ID: X-Mailer: git-send-email 2.49.0 In-Reply-To: References: Precedence: bulk X-Mailing-List: linux-btrfs@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 This commit introduces the tree-log sub-space_info, which is sub-space of metadata space_info and dedicated for tree-log node allocation. Signed-off-by: Naohiro Aota --- fs/btrfs/space-info.c | 12 ++++++++++++ fs/btrfs/space-info.h | 1 + fs/btrfs/sysfs.c | 10 +++++++++- 3 files changed, 22 insertions(+), 1 deletion(-) diff --git a/fs/btrfs/space-info.c b/fs/btrfs/space-info.c index 53eea3cd2bf3..3c775c76e2af 100644 --- a/fs/btrfs/space-info.c +++ b/fs/btrfs/space-info.c @@ -280,6 +280,18 @@ static int create_space_info(struct btrfs_fs_info *info, u64 flags) ret = btrfs_sysfs_add_space_info_type(info, reloc); ASSERT(!ret); + } else if (flags & BTRFS_BLOCK_GROUP_METADATA) { + struct btrfs_space_info *treelog = kzalloc(sizeof(*treelog), GFP_NOFS); + + if (!treelog) + return -ENOMEM; + init_space_info(info, treelog, flags); + space_info->sub_group[SUB_GROUP_METADATA_TREELOG] = treelog; + treelog->parent = space_info; + treelog->subgroup_id = SUB_GROUP_METADATA_TREELOG; + + ret = btrfs_sysfs_add_space_info_type(info, treelog); + ASSERT(!ret); } } diff --git a/fs/btrfs/space-info.h b/fs/btrfs/space-info.h index 64641885babd..1aadf88e5789 100644 --- a/fs/btrfs/space-info.h +++ b/fs/btrfs/space-info.h @@ -100,6 +100,7 @@ enum btrfs_flush_state { enum btrfs_space_info_sub_group { SUB_GROUP_DATA_RELOC = 0, + SUB_GROUP_METADATA_TREELOG = 0, SUB_GROUP_PRIMARY = -1, }; #define BTRFS_SPACE_INFO_SUB_GROUP_MAX 1 diff --git a/fs/btrfs/sysfs.c b/fs/btrfs/sysfs.c index 92caa5d09e2f..fba31e2354e5 100644 --- a/fs/btrfs/sysfs.c +++ b/fs/btrfs/sysfs.c @@ -1938,7 +1938,15 @@ static const char *alloc_name(struct btrfs_space_info *space_info) case BTRFS_BLOCK_GROUP_METADATA | BTRFS_BLOCK_GROUP_DATA: return "mixed"; case BTRFS_BLOCK_GROUP_METADATA: - return "metadata"; + switch (space_info->subgroup_id) { + case SUB_GROUP_PRIMARY: + return "metadata"; + case SUB_GROUP_METADATA_TREELOG: + return "metadata-treelog"; + default: + WARN_ON_ONCE(1); + return "metadata (unknown sub-group)"; + } case BTRFS_BLOCK_GROUP_DATA: switch (space_info->subgroup_id) { case SUB_GROUP_PRIMARY: From patchwork Wed Mar 19 06:14:41 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Naohiro Aota X-Patchwork-Id: 14022114 Received: from esa6.hgst.iphmx.com (esa6.hgst.iphmx.com [216.71.154.45]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 907A224EF91 for ; Wed, 19 Mar 2025 06:15:08 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=216.71.154.45 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1742364910; cv=none; b=aokC5eMg0izI2YQiYM6hJeS0QGf6UAUppMTcdOY6RzE6hi9YkvmxZrgO2k0XoJjljnrZ78i0hAY18PsJ1wqTHpZgvMWNmJmA/z1qD+SYKUcw2mNU0gxCg3AfVf0kKgSoTYLOrQI6WUx1jW9po+ZaoqzvRXJJpOTiKCbsJx8e4F4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1742364910; c=relaxed/simple; bh=ND+aV7bzkhxk5FWFs3EFXqoVXMiEtCxYhlDG6Rf/QTo=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=ESYPEDefiJUwxy5xyE5NJXbSWfRiDwC8/8O1sb/1XLl5a5iNJUXLBfGYlgj83jHu7FOwZ3330OWYwQZyynPWPukQ6qRKtp4LkNDdcQ16I5MwqhPrvjtXt2gQyDQRJFnOQn98PkVFGCZRdl4gYn2YdZ557SNTBDGwc09SjPLo6oc= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=wdc.com; spf=pass smtp.mailfrom=wdc.com; dkim=pass (2048-bit key) header.d=wdc.com header.i=@wdc.com header.b=IwcCUTr7; arc=none smtp.client-ip=216.71.154.45 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=wdc.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=wdc.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=wdc.com header.i=@wdc.com header.b="IwcCUTr7" DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=wdc.com; i=@wdc.com; q=dns/txt; s=dkim.wdc.com; t=1742364908; x=1773900908; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=ND+aV7bzkhxk5FWFs3EFXqoVXMiEtCxYhlDG6Rf/QTo=; b=IwcCUTr7wngaFnWECQNbjB9FxiSYW82lc+MnB00wW/9M1x5pcazzQzxX 03o3FyJbBzuq3umoxovfZhNe2sOjYKDkxdmgnL6M6yckVf1sW3hWwtqC1 +a8j+HuIL2K/s2uJW2qGhsZUq4Qdpdfx5yJP9Ng0KYqN91xf5aVpJWsjW 9dhJndMEYHr7uPabGo7bS0fiNcKY9hzAnXat1wzuNcdQV/3OjzK3HelEm T6gOVcmnB8jLSBTDe0jypArBa4uHS+NH5WWHsWDiygdKxbDg7DBNQ0urp fA0apZUqZ4bs6Cix2voCNZxo1ZC5XFKW3mahX19v5sWGyFD6FGAa95ltI A==; X-CSE-ConnectionGUID: /JB0JgB6Q+2rBfYKD/g2Wg== X-CSE-MsgGUID: Vi9+2n8oQJ6KyrffeqymjA== X-IronPort-AV: E=Sophos;i="6.14,258,1736784000"; d="scan'208";a="55227260" Received: from uls-op-cesaip01.wdc.com (HELO uls-op-cesaep01.wdc.com) ([199.255.45.14]) by ob1.hgst.iphmx.com with ESMTP; 19 Mar 2025 14:15:07 +0800 IronPort-SDR: 67da530b_Xv/cx7DgtHFxhWStgP2cl5+4pDqgY7hx9GrOGUgjborpM/H cf9SSTr9rsA9eHEI0iHD6zNOAeoGICjBNEQGKsg== Received: from uls-op-cesaip02.wdc.com ([10.248.3.37]) by uls-op-cesaep01.wdc.com with ESMTP/TLS/ECDHE-RSA-AES128-GCM-SHA256; 18 Mar 2025 22:15:56 -0700 WDCIronportException: Internal Received: from gbdn3z2.ad.shared (HELO naota-xeon..) ([10.224.109.136]) by uls-op-cesaip02.wdc.com with ESMTP; 18 Mar 2025 23:15:06 -0700 From: Naohiro Aota To: linux-btrfs@vger.kernel.org Cc: Naohiro Aota Subject: [PATCH v2 10/13] btrfs: tweak extent/chunk allocation for space_info sub-space Date: Wed, 19 Mar 2025 15:14:41 +0900 Message-ID: X-Mailer: git-send-email 2.49.0 In-Reply-To: References: Precedence: bulk X-Mailing-List: linux-btrfs@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Make the extent allocator and the chunk allocator aware of the sub-space. It now uses SUB_GROUP_DATA_RELOC sub-space for data relocation block group, and uses SUB_GROUP_METADATA_TREELOG for metadata tree-log block group. And, it needs to check the space_info is the right one when a block group candidate is given. Also, new block group should now belong to the specified one. Signed-off-by: Naohiro Aota Reviewed-by: Johannes Thumshirn --- fs/btrfs/extent-tree.c | 18 ++++++++++++++---- fs/btrfs/space-info.c | 4 +++- 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/fs/btrfs/extent-tree.c b/fs/btrfs/extent-tree.c index 062f860ec379..5767a9ef39c7 100644 --- a/fs/btrfs/extent-tree.c +++ b/fs/btrfs/extent-tree.c @@ -4353,7 +4353,7 @@ static noinline int find_free_extent(struct btrfs_root *root, int ret = 0; int cache_block_group_error = 0; struct btrfs_block_group *block_group = NULL; - struct btrfs_space_info *space_info; + struct btrfs_space_info *space_info = NULL; bool full_search = false; WARN_ON(ffe_ctl->num_bytes < fs_info->sectorsize); @@ -4384,10 +4384,19 @@ static noinline int find_free_extent(struct btrfs_root *root, trace_find_free_extent(root, ffe_ctl); - space_info = btrfs_find_space_info(fs_info, ffe_ctl->flags); + if (btrfs_is_zoned(fs_info)) { + /* Use dedicated sub-space_info for dedicated block group users. */ + if (ffe_ctl->for_data_reloc) + space_info = space_info->sub_group[SUB_GROUP_DATA_RELOC]; + else if (ffe_ctl->for_treelog) + space_info = space_info->sub_group[SUB_GROUP_METADATA_TREELOG]; + } if (!space_info) { - btrfs_err(fs_info, "No space info for %llu", ffe_ctl->flags); - return -ENOSPC; + space_info = btrfs_find_space_info(fs_info, ffe_ctl->flags); + if (!space_info) { + btrfs_err(fs_info, "No space info for %llu", ffe_ctl->flags); + return -ENOSPC; + } } ret = prepare_allocation(fs_info, ffe_ctl, space_info, ins); @@ -4408,6 +4417,7 @@ static noinline int find_free_extent(struct btrfs_root *root, * picked out then we don't care that the block group is cached. */ if (block_group && block_group_bits(block_group, ffe_ctl->flags) && + block_group->space_info == space_info && block_group->cached != BTRFS_CACHE_NO) { down_read(&space_info->groups_sem); if (list_empty(&block_group->list) || diff --git a/fs/btrfs/space-info.c b/fs/btrfs/space-info.c index 3c775c76e2af..730763be4276 100644 --- a/fs/btrfs/space-info.c +++ b/fs/btrfs/space-info.c @@ -351,7 +351,9 @@ void btrfs_add_bg_to_space_info(struct btrfs_fs_info *info, factor = btrfs_bg_type_to_factor(block_group->flags); - found = btrfs_find_space_info(info, block_group->flags); + found = block_group->space_info; + if (!found) + found = btrfs_find_space_info(info, block_group->flags); ASSERT(found); spin_lock(&found->lock); found->total_bytes += block_group->length; From patchwork Wed Mar 19 06:14:42 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Naohiro Aota X-Patchwork-Id: 14022116 Received: from esa6.hgst.iphmx.com (esa6.hgst.iphmx.com [216.71.154.45]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id D7E082505BD for ; Wed, 19 Mar 2025 06:15:10 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=216.71.154.45 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1742364913; cv=none; b=tyyos1Gi7slIgSWAv36AgNAptMT0c7n6cacqtIumKOadw95gZT4/GNCP0w+QW9vJrp4Xqc15jZkrk/FfmZPfsquE5V1tW8G/NnDm2EtLrUB1bld3yxZWttdkjaush00L8F/5M5IjUNw45gz4sxzDqhTxSyRQ1z2iHINxJYaozbA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1742364913; c=relaxed/simple; bh=PP20KYXQuXdEGmKx31+7Ec6b51hIATsjKSFw2oysyx4=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Wbh17t1RwRcFE2i0WgFvhoZw8IGE1b6DxEfo5cJpbbEdeLcoIYMCm0dl4rs6qYrddWkfFt6tDWT68rNdafmJYeQ+poqLZQKDgdUuI0J/tkvPdwIue7c2rkzKUoKg4K2dNB9dFo3tVLm5pY2C9z6mbPCCybAunxL8CfGcfz8gyuo= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=wdc.com; spf=pass smtp.mailfrom=wdc.com; dkim=pass (2048-bit key) header.d=wdc.com header.i=@wdc.com header.b=Wb2ESHEB; arc=none smtp.client-ip=216.71.154.45 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=wdc.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=wdc.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=wdc.com header.i=@wdc.com header.b="Wb2ESHEB" DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=wdc.com; i=@wdc.com; q=dns/txt; s=dkim.wdc.com; t=1742364911; x=1773900911; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=PP20KYXQuXdEGmKx31+7Ec6b51hIATsjKSFw2oysyx4=; b=Wb2ESHEBXn2cUMX7noJSgYhDLVbrXxBhtNoFFjiame374ZFI1RrXhYmK WD1UhPZ80ka1ENnAXUBJzmUcR0TnBTFbt896j/ChBASEQJnHKCpjKecG1 PhrhCH7YLmtotHKXniuQWaOBcTbS5lmktjqwZ3H9On2iUX2hhTwyMeJKv voXai68VJj9ikGOak699LJYjbsmqE4ThOAviRotFd9qI+pcSlYp0nH5mT 9E+puVjrhMWS4D6LTicjmdcFRYn35crSVJ7VItTtemukR1MyRJrb22WAW wKL8S6QWUjRJpE1B7fDkrhIM591atDrWkNrum+/VQEsmAgFDdX5sBT46m Q==; X-CSE-ConnectionGUID: 1VZrDFV+RzaK07Vnk9+EZA== X-CSE-MsgGUID: 0FGEJmHwQMuSYl3yuKSaaA== X-IronPort-AV: E=Sophos;i="6.14,258,1736784000"; d="scan'208";a="55227262" Received: from uls-op-cesaip01.wdc.com (HELO uls-op-cesaep01.wdc.com) ([199.255.45.14]) by ob1.hgst.iphmx.com with ESMTP; 19 Mar 2025 14:15:08 +0800 IronPort-SDR: 67da530c_9iPX9lnVrBo01kKfrNJ0WEk9V2y3QLxR+sGW/PZTk676hKK QYZdxRbNSpO3TGlIXFg98mY4KQXbppGbtqpfFBQ== Received: from uls-op-cesaip02.wdc.com ([10.248.3.37]) by uls-op-cesaep01.wdc.com with ESMTP/TLS/ECDHE-RSA-AES128-GCM-SHA256; 18 Mar 2025 22:15:57 -0700 WDCIronportException: Internal Received: from gbdn3z2.ad.shared (HELO naota-xeon..) ([10.224.109.136]) by uls-op-cesaip02.wdc.com with ESMTP; 18 Mar 2025 23:15:07 -0700 From: Naohiro Aota To: linux-btrfs@vger.kernel.org Cc: Naohiro Aota Subject: [PATCH v2 11/13] btrfs: use proper data space_info Date: Wed, 19 Mar 2025 15:14:42 +0900 Message-ID: <54c32cd875f589527ee25f9b0e9ff82a90c66d7b.1742364593.git.naohiro.aota@wdc.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: References: Precedence: bulk X-Mailing-List: linux-btrfs@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Now that, we have data sub-space for the zoned mode. This commit tweaks some space_info functions to use proper space_info for a file. Signed-off-by: Naohiro Aota --- fs/btrfs/delalloc-space.c | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/fs/btrfs/delalloc-space.c b/fs/btrfs/delalloc-space.c index 918ba2ab1d5f..4cffac85ff54 100644 --- a/fs/btrfs/delalloc-space.c +++ b/fs/btrfs/delalloc-space.c @@ -111,6 +111,17 @@ * making error handling and cleanup easier. */ +static inline struct btrfs_space_info *data_sinfo_for_inode(const struct btrfs_inode *inode) +{ + struct btrfs_fs_info *fs_info = inode->root->fs_info; + + if (!btrfs_is_zoned(fs_info)) + return fs_info->data_sinfo; + if (btrfs_is_data_reloc_root(inode->root)) + return fs_info->data_sinfo->sub_group[SUB_GROUP_DATA_RELOC]; + return fs_info->data_sinfo; +} + int btrfs_alloc_data_chunk_ondemand(const struct btrfs_inode *inode, u64 bytes) { struct btrfs_root *root = inode->root; @@ -123,7 +134,7 @@ int btrfs_alloc_data_chunk_ondemand(const struct btrfs_inode *inode, u64 bytes) if (btrfs_is_free_space_inode(inode)) flush = BTRFS_RESERVE_FLUSH_FREE_SPACE_INODE; - return btrfs_reserve_data_bytes(fs_info->data_sinfo, bytes, flush); + return btrfs_reserve_data_bytes(data_sinfo_for_inode(inode), bytes, flush); } int btrfs_check_data_free_space(struct btrfs_inode *inode, @@ -144,7 +155,7 @@ int btrfs_check_data_free_space(struct btrfs_inode *inode, else if (btrfs_is_free_space_inode(inode)) flush = BTRFS_RESERVE_FLUSH_FREE_SPACE_INODE; - ret = btrfs_reserve_data_bytes(fs_info->data_sinfo, len, flush); + ret = btrfs_reserve_data_bytes(data_sinfo_for_inode(inode), len, flush); if (ret < 0) return ret; @@ -172,12 +183,10 @@ void btrfs_free_reserved_data_space_noquota(struct btrfs_inode *inode, u64 len) { struct btrfs_fs_info *fs_info = inode->root->fs_info; - struct btrfs_space_info *data_sinfo; ASSERT(IS_ALIGNED(len, fs_info->sectorsize)); - data_sinfo = fs_info->data_sinfo; - btrfs_space_info_free_bytes_may_use(data_sinfo, len); + btrfs_space_info_free_bytes_may_use(data_sinfo_for_inode(inode), len); } /* From patchwork Wed Mar 19 06:14:43 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Naohiro Aota X-Patchwork-Id: 14022115 Received: from esa6.hgst.iphmx.com (esa6.hgst.iphmx.com [216.71.154.45]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 9BC252500BA for ; Wed, 19 Mar 2025 06:15:10 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=216.71.154.45 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1742364912; cv=none; b=sJjVaY1QelGzpKxqx0+kr1hNAaSiAo2j20sensIPhgi92ZL6F6T+2wrepY2wFxxY72XXFw58T3+LryxLe1VLahXb6CLX8vKO5md2gifv7skKYhZq6JRAqtd1HKlAwbFQTplou96WwfdZYeem5j/FfyrVafnhb2E5A3s+b7g/UG8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1742364912; c=relaxed/simple; bh=LKFnztNMIkuZx7GqSHh072tyo+d3HXkaVRG0AqrvyVU=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=oEdV7XqAIDoZkwb7Jhmw5DoaLW4v6foQkDyuEHDVSce+ACZTcTfXq0JXZPdwXDXhKMCCVonQuyi59EAKbTyN6Ex49vqqGhh4crAjtagUScQfGWhSzCZDG83X3ssaa2bvtwvsp/sKJrm6cW76bvFKkHFqiv+YokDVv7qc7tpa15k= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=wdc.com; spf=pass smtp.mailfrom=wdc.com; dkim=pass (2048-bit key) header.d=wdc.com header.i=@wdc.com header.b=HpQVREOU; arc=none smtp.client-ip=216.71.154.45 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=wdc.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=wdc.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=wdc.com header.i=@wdc.com header.b="HpQVREOU" DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=wdc.com; i=@wdc.com; q=dns/txt; s=dkim.wdc.com; t=1742364910; x=1773900910; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=LKFnztNMIkuZx7GqSHh072tyo+d3HXkaVRG0AqrvyVU=; b=HpQVREOUmMW/uDrc1j6+eE1+XfFAawUePZsqTk+lKcCitApTOB/exRsm ftWbSK7KWjgX/ypdlgpMy+Ni1SyqJyWqnMLTiLRitAZGfIdK8Jm5rHnsf M0BBRG25ZTIGMqt+nSpwbWSVVY5DQR6NwKEWcjVh2To6zjXgGHtmkZ6Lp NPk1b0t6oBCn7I/Ae0jvMJzEXWpWjcedg6ZrHKER53H0pCsPPTOLp9vg5 JSVmiKjtxveqjl0PW5zHHPY5hkWvdMWOioP1wb6r2MOMatLICJSHoJ2Pw S6jZGBiIIFd/veNoRfN2Xs4DaRf3qVIsz2zJDT4MNYeonCwfoiFr/GIIE g==; X-CSE-ConnectionGUID: dKbDhUFeSgekUsXkAneLZA== X-CSE-MsgGUID: qEK0u/mwTDq++UMQ60sexQ== X-IronPort-AV: E=Sophos;i="6.14,258,1736784000"; d="scan'208";a="55227280" Received: from uls-op-cesaip01.wdc.com (HELO uls-op-cesaep01.wdc.com) ([199.255.45.14]) by ob1.hgst.iphmx.com with ESMTP; 19 Mar 2025 14:15:09 +0800 IronPort-SDR: 67da530d_V90RFpjQyK77jbBHawqIOTCw9yafJeg4NgeOzhOkUo1z7YG 5CfmP2I6qSbhfdq/64s7ZXkBv2OG+JMRiqcmBYw== Received: from uls-op-cesaip02.wdc.com ([10.248.3.37]) by uls-op-cesaep01.wdc.com with ESMTP/TLS/ECDHE-RSA-AES128-GCM-SHA256; 18 Mar 2025 22:15:58 -0700 WDCIronportException: Internal Received: from gbdn3z2.ad.shared (HELO naota-xeon..) ([10.224.109.136]) by uls-op-cesaip02.wdc.com with ESMTP; 18 Mar 2025 23:15:08 -0700 From: Naohiro Aota To: linux-btrfs@vger.kernel.org Cc: Naohiro Aota Subject: [PATCH v2 12/13] btrfs: add block_rsv for treelog Date: Wed, 19 Mar 2025 15:14:43 +0900 Message-ID: X-Mailer: git-send-email 2.49.0 In-Reply-To: References: Precedence: bulk X-Mailing-List: linux-btrfs@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 We need to add a dedicated block_rsv for tree-log, because the block_rsv serves for a tree node allocation in btrfs_alloc_tree_block(). Currently, tree-log tree uses fs_info->empty_block_rsv, which is shared across trees and points to the normal metadata space_info. Instead, we add a dedicated block_rsv and that block_rsv can use the dedicated sub-space_info. Currently, we use the dedicated block_rsv only for the zoned mode, but it might be somewhat useful for the regular btrfs too. Signed-off-by: Naohiro Aota Reviewed-by: Johannes Thumshirn --- fs/btrfs/block-rsv.c | 12 ++++++++++++ fs/btrfs/block-rsv.h | 1 + fs/btrfs/disk-io.c | 1 + fs/btrfs/fs.h | 2 ++ 4 files changed, 16 insertions(+) diff --git a/fs/btrfs/block-rsv.c b/fs/btrfs/block-rsv.c index 3f3608299c0b..680b395b32ad 100644 --- a/fs/btrfs/block-rsv.c +++ b/fs/btrfs/block-rsv.c @@ -418,6 +418,12 @@ void btrfs_init_root_block_rsv(struct btrfs_root *root) case BTRFS_CHUNK_TREE_OBJECTID: root->block_rsv = &fs_info->chunk_block_rsv; break; + case BTRFS_TREE_LOG_OBJECTID: + if (btrfs_is_zoned(fs_info)) + root->block_rsv = &fs_info->treelog_rsv; + else + root->block_rsv = NULL; + break; default: root->block_rsv = NULL; break; @@ -438,6 +444,12 @@ void btrfs_init_global_block_rsv(struct btrfs_fs_info *fs_info) fs_info->delayed_block_rsv.space_info = space_info; fs_info->delayed_refs_rsv.space_info = space_info; + /* The treelog_rsv uses a dedicated space_info on the zoned mode. */ + if (!btrfs_is_zoned(fs_info)) + fs_info->treelog_rsv.space_info = space_info; + else + fs_info->treelog_rsv.space_info = space_info->sub_group[SUB_GROUP_METADATA_TREELOG]; + btrfs_update_global_block_rsv(fs_info); } diff --git a/fs/btrfs/block-rsv.h b/fs/btrfs/block-rsv.h index d12b1fac5c74..79ae9d05cd91 100644 --- a/fs/btrfs/block-rsv.h +++ b/fs/btrfs/block-rsv.h @@ -24,6 +24,7 @@ enum btrfs_rsv_type { BTRFS_BLOCK_RSV_CHUNK, BTRFS_BLOCK_RSV_DELOPS, BTRFS_BLOCK_RSV_DELREFS, + BTRFS_BLOCK_RSV_TREELOG, BTRFS_BLOCK_RSV_EMPTY, BTRFS_BLOCK_RSV_TEMP, }; diff --git a/fs/btrfs/disk-io.c b/fs/btrfs/disk-io.c index 1a916716cefe..0fb114619b0e 100644 --- a/fs/btrfs/disk-io.c +++ b/fs/btrfs/disk-io.c @@ -2829,6 +2829,7 @@ void btrfs_init_fs_info(struct btrfs_fs_info *fs_info) BTRFS_BLOCK_RSV_GLOBAL); btrfs_init_block_rsv(&fs_info->trans_block_rsv, BTRFS_BLOCK_RSV_TRANS); btrfs_init_block_rsv(&fs_info->chunk_block_rsv, BTRFS_BLOCK_RSV_CHUNK); + btrfs_init_block_rsv(&fs_info->treelog_rsv, BTRFS_BLOCK_RSV_TREELOG); btrfs_init_block_rsv(&fs_info->empty_block_rsv, BTRFS_BLOCK_RSV_EMPTY); btrfs_init_block_rsv(&fs_info->delayed_block_rsv, BTRFS_BLOCK_RSV_DELOPS); diff --git a/fs/btrfs/fs.h b/fs/btrfs/fs.h index 5a346d4a4b91..2deb0394115d 100644 --- a/fs/btrfs/fs.h +++ b/fs/btrfs/fs.h @@ -471,6 +471,8 @@ struct btrfs_fs_info { struct btrfs_block_rsv delayed_block_rsv; /* Block reservation for delayed refs */ struct btrfs_block_rsv delayed_refs_rsv; + /* Block reservation for treelog tree */ + struct btrfs_block_rsv treelog_rsv; struct btrfs_block_rsv empty_block_rsv; From patchwork Wed Mar 19 06:14:44 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Naohiro Aota X-Patchwork-Id: 14022117 Received: from esa6.hgst.iphmx.com (esa6.hgst.iphmx.com [216.71.154.45]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 393052505AD for ; Wed, 19 Mar 2025 06:15:12 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=216.71.154.45 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1742364913; cv=none; b=XKchGppnrC9xPUga4kPJEN6lXwuhX22hjRIARmkAlr5P5XJZjSvgzkMTaQBN/ynZZfFmK6BWx22aTgtBcPm8MdwTzQgt+ml0BVEVHxLSQ9ux7JSUXlNz+B/UVDYxrtfLdBZCRvpTFpv3RYnSk+9kfQBnrtiHvFAUktmK8887DT8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1742364913; c=relaxed/simple; bh=NPEdKFR4ehVmYWSr4OrNJ2mvYC7ZLsfWsbvT9Pj2PXY=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=hWO7ftorwxu85CdO4mHYUnST5OUIW1IBZm49DyVWhLA7q2kpUpWZ0Yb/X8QQ2SvG50Az+BMe4hEQamoBk3Eg+ARYNWXwfbFzMrW07UpnTnwyW/219WfiYLzTac8rKdfRMzfDsu421KJlE02cfB6MEDooqoQMyH+PT0k4u9sWkpQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=wdc.com; spf=pass smtp.mailfrom=wdc.com; dkim=pass (2048-bit key) header.d=wdc.com header.i=@wdc.com header.b=EBCaX5rM; arc=none smtp.client-ip=216.71.154.45 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=wdc.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=wdc.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=wdc.com header.i=@wdc.com header.b="EBCaX5rM" DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=wdc.com; i=@wdc.com; q=dns/txt; s=dkim.wdc.com; t=1742364912; x=1773900912; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=NPEdKFR4ehVmYWSr4OrNJ2mvYC7ZLsfWsbvT9Pj2PXY=; b=EBCaX5rM8PUg4obuKhGLnyNjxJbCUCBOdu/Wce3q8dy4qp3YhK1uxH9c MmlsKfiKWc6P8T0yTNClnYTGhpqW4TD/o24v7iKIcReNCieUMJ8syitJx 0F0JUiQ2sntH8Wy6s+2AGHqO6eFCwJdAFAp7AfBMFCqro/pO5Z0kF2sUo 0tY9qiQXFUEZNqjmry/tpKTJTYCT2rifNrIqbgnhN7H3NubH3KMFXrVYL m7eV7h0WOsy/BP69F25/n/it8tkvDl087IqGvi++jeXX6HAY43ICvWY+3 xf/pbrRqBg0SPK4c2ucOfvDQ7HlvNlQyXwtDsD0PQxL2cqfhnrBSiDh2A Q==; X-CSE-ConnectionGUID: 3u/298NHQz+Vj8ftdu4DUQ== X-CSE-MsgGUID: XiMNZXA8Tb6wwv/nbs2UVA== X-IronPort-AV: E=Sophos;i="6.14,258,1736784000"; d="scan'208";a="55227294" Received: from uls-op-cesaip01.wdc.com (HELO uls-op-cesaep01.wdc.com) ([199.255.45.14]) by ob1.hgst.iphmx.com with ESMTP; 19 Mar 2025 14:15:10 +0800 IronPort-SDR: 67da530e_TwgB6988F0PwJ/RzjCqPPBKaQCXWRUEIHDh5SfyALcmr9Ky R3h8FlL4QPugCxOel5R9UFY5VLLF5NIEABdiqBQ== Received: from uls-op-cesaip02.wdc.com ([10.248.3.37]) by uls-op-cesaep01.wdc.com with ESMTP/TLS/ECDHE-RSA-AES128-GCM-SHA256; 18 Mar 2025 22:15:59 -0700 WDCIronportException: Internal Received: from gbdn3z2.ad.shared (HELO naota-xeon..) ([10.224.109.136]) by uls-op-cesaip02.wdc.com with ESMTP; 18 Mar 2025 23:15:09 -0700 From: Naohiro Aota To: linux-btrfs@vger.kernel.org Cc: Naohiro Aota Subject: [PATCH v2 13/13] btrfs: reclaim from sub-space space_info Date: Wed, 19 Mar 2025 15:14:44 +0900 Message-ID: <5c116a0feffc7f87845a00fd840fb4f7be52f906.1742364593.git.naohiro.aota@wdc.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: References: Precedence: bulk X-Mailing-List: linux-btrfs@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Modify btrfs_async_{data,metadata}_reclaim() to run the reclaim process on the sub-spaces as well. Signed-off-by: Naohiro Aota Reviewed-by: Johannes Thumshirn --- fs/btrfs/space-info.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/fs/btrfs/space-info.c b/fs/btrfs/space-info.c index 730763be4276..951d3984ea5a 100644 --- a/fs/btrfs/space-info.c +++ b/fs/btrfs/space-info.c @@ -1215,6 +1215,9 @@ static void btrfs_async_reclaim_metadata_space(struct work_struct *work) fs_info = container_of(work, struct btrfs_fs_info, async_reclaim_work); space_info = btrfs_find_space_info(fs_info, BTRFS_BLOCK_GROUP_METADATA); do_async_reclaim_metadata_space(space_info); + for (int i = 0; i < BTRFS_SPACE_INFO_SUB_GROUP_MAX; i++) + if (space_info->sub_group[i]) + do_async_reclaim_metadata_space(space_info->sub_group[i]); } /* @@ -1443,6 +1446,9 @@ static void btrfs_async_reclaim_data_space(struct work_struct *work) fs_info = container_of(work, struct btrfs_fs_info, async_data_reclaim_work); space_info = fs_info->data_sinfo; do_async_reclaim_data_space(space_info); + for (int i = 0; i < BTRFS_SPACE_INFO_SUB_GROUP_MAX; i++) + if (space_info->sub_group[i]) + do_async_reclaim_data_space(space_info->sub_group[i]); } void btrfs_init_async_reclaim_work(struct btrfs_fs_info *fs_info)