From patchwork Wed Apr 16 14:28:06 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Naohiro Aota X-Patchwork-Id: 14054062 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 A34231B87E2 for ; Wed, 16 Apr 2025 14:28:34 +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=1744813716; cv=none; b=dmTRBpYyRpoaGfmzxFyuD7oAmM9/x68p85NkzhFqm9fC3oAsK0Rha26GfGlri3hOgJyLkXFhw8D0gFk4Kolx2qCdx0y9xxSi7lL62YTPc8FRQbsQmka8GqkE4miUjdjRhbtYIPBO3esHA7uXBsV1df20qIP98+HkSIArJxa0fR4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744813716; c=relaxed/simple; bh=CNxn5T8cyv3QVZhRb5fWxLVPWjCkLrC3RSqjgxC1a5M=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=UUaVbVxy0ZWy3F7YLLB9lZriLdcHjgXs3ec6hsC9qFpus9b6y+vZxZ8qbHaeleSDY/HvplmAaoOEGZRaZCI1Vp9vCzlEx4rwvZJVQAn5nApc9JTLRdpZxj7PwG81ESAtPxvasGbvVpRY5Zq6vjzmVravkTMxgtg+PU/yDrrTMDI= 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=KQi38xwK; 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="KQi38xwK" DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=wdc.com; i=@wdc.com; q=dns/txt; s=dkim.wdc.com; t=1744813714; x=1776349714; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=CNxn5T8cyv3QVZhRb5fWxLVPWjCkLrC3RSqjgxC1a5M=; b=KQi38xwK94wSiscHsZegXQB2ooIDk0gRclJCTBbHgjkiheO31qurhRXL suwbjNzeuRi0VswlOXup8XVxOdohfcSf1+MxEJz+DUU5fQpNbWk1SdDsL nh33a1k7wfE/y+upTvIYthf0sZGiXuXhhceVP1euM3WRw1un3shVxXp1U BHMbTGYPRtFIi2YVDDFcYhPlwttu9Tz8RdCuXnm74Ncm0GPiP5c03adXF hQau5VWgpWvSQHyvvD5Fu7P7aBnxiKwVVLBrlS1IosbxZnH4vGZxxtWsH 4ec+bZj3Tw2J3Lz7AvppQ9twaa/+2H3QguQx6Tytn8wINUu7chRNbiSXp Q==; X-CSE-ConnectionGUID: 9LBfh+2IQaapXbDBv6ssEw== X-CSE-MsgGUID: RmaQN6FLQnCAsMdJ7Z3n1A== X-IronPort-AV: E=Sophos;i="6.15,216,1739808000"; d="scan'208";a="81484518" Received: from h199-255-45-14.hgst.com (HELO uls-op-cesaep01.wdc.com) ([199.255.45.14]) by ob1.hgst.iphmx.com with ESMTP; 16 Apr 2025 22:28:27 +0800 IronPort-SDR: 67ffb07d_z8NgS1ZJF33MrqrMmtS+bTJU1aLBrKjZevAvacWinQ527uH zYX9P3ta9yXKSNmonOfVSh6CSd90RgHmWiZTaVw== Received: from uls-op-cesaip01.wdc.com ([10.248.3.36]) by uls-op-cesaep01.wdc.com with ESMTP/TLS/ECDHE-RSA-AES128-GCM-SHA256; 16 Apr 2025 06:28:30 -0700 WDCIronportException: Internal Received: from 5cg2075gjp.ad.shared (HELO naota-xeon..) ([10.224.104.89]) by uls-op-cesaip01.wdc.com with ESMTP; 16 Apr 2025 07:28:26 -0700 From: Naohiro Aota To: linux-btrfs@vger.kernel.org Cc: Naohiro Aota , Johannes Thumshirn Subject: [PATCH v3 01/13] btrfs: take btrfs_space_info in btrfs_reserve_data_bytes Date: Wed, 16 Apr 2025 23:28:06 +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 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 1479be2427cb..c7181779b013 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 77cc5d4a5a47..3bb7246f40fa 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 Apr 16 14:28:07 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Naohiro Aota X-Patchwork-Id: 14054065 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 A835C1DA2E5 for ; Wed, 16 Apr 2025 14:28:35 +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=1744813718; cv=none; b=p1ZZsDkUrglH8lvDmwNcx99LtMIuQ/1snwJMLbcJeOCdECEaZHvkG2gFZOHlSMKVrAJcjLoxRPrHn99HBZbC9MKyTwtWMN0yuwJwWz6xuH4qOuYFalBrA/Q4cxjGTzbfMjvbzjhMVOCBzjg88jnCX8l06WE8Eoqt7GtisB9dTwQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744813718; c=relaxed/simple; bh=SzSGoxamWDY402w6GyCgok8UEOwwuH7LjcUAxc9lxTo=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=lfaZshHL6S7ktSLeC3kNTMHBwCocJEn0l3MYDN1oKWcrqrgGgCrC2V4u8UG/1klNrUmZd2p5WH0PLK7xArFnD53D9S00zqDp8EY37FH7G+n6ilaUBFkog7KrAkpdgWmN1sLyZpCs3h8iMkdxu7y+/BHEMftu1WVbS1+2jzOr1rY= 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=JONb/SR5; 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="JONb/SR5" DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=wdc.com; i=@wdc.com; q=dns/txt; s=dkim.wdc.com; t=1744813715; x=1776349715; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=SzSGoxamWDY402w6GyCgok8UEOwwuH7LjcUAxc9lxTo=; b=JONb/SR5pcy9SWRiBHXWypSM01gVIAwpCZa2tUqwgROD5nov97340104 eiMtIX+EjHFNETguNKwllvXhCe6lwbt5trDKaX7SWP7IYaYKHlpILyamg Hyn9lAUgrCPj0rVIkZHscXnsFLhJzwmSON82l8nFL5yF/BgbZNaJPRHbG ydyjXDmiWQLHHUJlYtco/8+TmtgAFf4HVZtw/6yyLya6CXYgCaK9D7v82 s/enGXYFJGWCweCNyDvyIumROke0Ok1R57AZFaFl7txJMcBB44GALYMbF sz7lb+3ZorU5RN2IuvkiSjARpjywoIULjE8gqUmp6eyRgy6tcZ5x7rKis A==; X-CSE-ConnectionGUID: 5nriC3SRRYmQzxxo9a9fEQ== X-CSE-MsgGUID: flx/9Bb5RZWPDXme/el07w== X-IronPort-AV: E=Sophos;i="6.15,216,1739808000"; d="scan'208";a="81484519" Received: from h199-255-45-14.hgst.com (HELO uls-op-cesaep01.wdc.com) ([199.255.45.14]) by ob1.hgst.iphmx.com with ESMTP; 16 Apr 2025 22:28:28 +0800 IronPort-SDR: 67ffb07e_4w+u/dNRTh0/wAIgZNfbf0EIFeIn6XQrDh72XH2FekwyXre aOvl9OM0pH24oS+xlr3A0jmQO8Agm4XUIGtmF+Q== Received: from uls-op-cesaip01.wdc.com ([10.248.3.36]) by uls-op-cesaep01.wdc.com with ESMTP/TLS/ECDHE-RSA-AES128-GCM-SHA256; 16 Apr 2025 06:28:31 -0700 WDCIronportException: Internal Received: from 5cg2075gjp.ad.shared (HELO naota-xeon..) ([10.224.104.89]) by uls-op-cesaip01.wdc.com with ESMTP; 16 Apr 2025 07:28:27 -0700 From: Naohiro Aota To: linux-btrfs@vger.kernel.org Cc: Naohiro Aota , Johannes Thumshirn Subject: [PATCH v3 02/13] btrfs: take struct btrfs_inode in btrfs_free_reserved_data_space_noquota Date: Wed, 16 Apr 2025 23:28:07 +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 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 c7181779b013..a18895255af9 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 069005959479..6119c0d3f883 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 868ec20ef805..652dd9c5ec82 100644 --- a/fs/btrfs/inode.c +++ b/fs/btrfs/inode.c @@ -2591,7 +2591,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); @@ -9718,7 +9718,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: btrfs_unlock_extent(io_tree, start, end, &cached_state); out_folios: diff --git a/fs/btrfs/relocation.c b/fs/btrfs/relocation.c index 6ba9fcb53c33..6f4d9ffa404e 100644 --- a/fs/btrfs/relocation.c +++ b/fs/btrfs/relocation.c @@ -2749,8 +2749,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 Apr 16 14:28:08 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Naohiro Aota X-Patchwork-Id: 14054063 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 480A41DDA31 for ; Wed, 16 Apr 2025 14:28:35 +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=1744813717; cv=none; b=X3Zh4iP7wQsIRTNM7nKl1uQrXTic3uLQ6nMKMXVThJrDtkpBsT3lUsu6ppV01F6i12tYRCb+aLAzt3NOH8Nl0LMREhwB0v2dwPeCCiPGpAwwUuJSK02qwjxLXXx20kKfOe3bQpSodKSUMnWbNsDFPZ7hQ/C65sVPlK3kiPvKJPk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744813717; c=relaxed/simple; bh=/pz5QIt977haPHt4u/HdU+p4ARPhasKV2YRKEe/vTr0=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=aq1m6XdbIHMpE+p6k19v/YtE/k97n43Rj0xsOGBoDlFnE5gnZ4ybAgrLvGT0vrfQUkcMY+Q16LZezdgHnKwIitA/AZUvzm7h+dcRDPzRNoeVf58iE8w4EC0NXqGbbiZ7uKWpUIKOv5aGMCz+fZZ5XOPqCGMoDK3hM0O2EAc9g4M= 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=BvBXPEv4; 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="BvBXPEv4" DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=wdc.com; i=@wdc.com; q=dns/txt; s=dkim.wdc.com; t=1744813716; x=1776349716; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=/pz5QIt977haPHt4u/HdU+p4ARPhasKV2YRKEe/vTr0=; b=BvBXPEv4Ozc0E7mIHnckKbdlR/TX1bpSZJh7XXS7ACHQ5fnTjWb9VBYb GNDBNSB4luv7cv/TOiOf38UpQ/LrvVj02JnDvQScQzVrZB2gDWLTgGFDy bz6PqX0+piWT6ba4TFQrcLO42fvUZ0yx8vHBvUQS8CWVto7thCuJmglX9 pBDiwAKbT+30HNqzPyirxF/XZEQmH+vGKQWy8QYJa17dL0y9T8HTcvh+O azKPDrQFNhdQArl0pqipL+/yQEFtNMvbNYWB0MsK3gHcrNh35A7YdaRYI ZCWOUMBnHBSyusGO41AFGLWeCTNZhgu4wlkw/QGD4BHLmLIpofMV9UAAw g==; X-CSE-ConnectionGUID: yn3OdADNSDycXsoyb+2j1Q== X-CSE-MsgGUID: MZ0NjrJlQKiZgtyA1aZRsg== X-IronPort-AV: E=Sophos;i="6.15,216,1739808000"; d="scan'208";a="81484520" Received: from h199-255-45-14.hgst.com (HELO uls-op-cesaep01.wdc.com) ([199.255.45.14]) by ob1.hgst.iphmx.com with ESMTP; 16 Apr 2025 22:28:29 +0800 IronPort-SDR: 67ffb07f_ybGX+8q9U/CrSsWK84hCwY4qj6lLpJM5uv46h465YcH1Gfc TMFCZ0PZ2OMBh2e63BWcgiunAOVm+smD7/MbDtg== Received: from uls-op-cesaip01.wdc.com ([10.248.3.36]) by uls-op-cesaep01.wdc.com with ESMTP/TLS/ECDHE-RSA-AES128-GCM-SHA256; 16 Apr 2025 06:28:32 -0700 WDCIronportException: Internal Received: from 5cg2075gjp.ad.shared (HELO naota-xeon..) ([10.224.104.89]) by uls-op-cesaip01.wdc.com with ESMTP; 16 Apr 2025 07:28:28 -0700 From: Naohiro Aota To: linux-btrfs@vger.kernel.org Cc: Naohiro Aota , Johannes Thumshirn Subject: [PATCH v3 03/13] btrfs: factor out init_space_info() Date: Wed, 16 Apr 2025 23:28:08 +0900 Message-ID: <75d34a6de9baa6d5aa98f43e184906beb66e649c.1744813603.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 3bb7246f40fa..7334ffa67a86 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 Apr 16 14:28:09 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Naohiro Aota X-Patchwork-Id: 14054064 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 8ED971DED4A for ; Wed, 16 Apr 2025 14:28:36 +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=1744813718; cv=none; b=se56HdhEn6CEH93wME+t8Mw98/4w7PjmcWE5rWzrjGrrmNjLkT9CHLKdfg1N0WPeW3DjXe4bjbzqc4wif/A4pbS36TVdUwX7CMm0tDcXN6uwvOXSwkwgMx8ukcHMufVYNe/Pxwa/lCcif8V38FP3NAcVYDLJQBf5EnJhYlhI6Lw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744813718; c=relaxed/simple; bh=1WOFkZFChn4tMIum2aOJxBG3IglU3PprRyVo+8t3a+c=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=D3dtV7z8RIGGVKSJDUJhVuOAlL5Jtvb75O/HbUZFe6mUPYDICg5myK3YTiohWdBHs5dYw7nmosF71pSzYPtkOcRfS9n1HBM9yjbyuAVVZoA2D3qkhEU9ZYPf344CzFOVdpWHwwyOpVSSCf4arMymkwWd9gKScpiQTdEL79tcBKc= 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=nIXMTTAr; 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="nIXMTTAr" DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=wdc.com; i=@wdc.com; q=dns/txt; s=dkim.wdc.com; t=1744813716; x=1776349716; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=1WOFkZFChn4tMIum2aOJxBG3IglU3PprRyVo+8t3a+c=; b=nIXMTTArrApslfBJy21hKbAzrociEcmlRWM+l84BdLRYUZ1yj08Rr9aj gE61Yhl6IJ+QiXEtj4NnevBA2x46/8zyKzuoQSTaw5SGTuLQjswScIcu9 isastZn14F4WgvNs1OBzdfgz4M55fB+LAgwmoz/DMy2GbufIKKp7iS+Dp XC2k7M9PDbJUxwG2u+PJVPPhos8/Nllj2z36dcSkxoHqbDYXRynbl69Kn NTF27gUSnxsVGBi75WBwoVVZ1dwqyS63rWbKjZ2BuO9LnYxB/gXPQE9WV or5GQNAt7AVxnIfJBs2x/8n74N/0935TW3Sl4cDfThCoiTItQ50WhJUgz g==; X-CSE-ConnectionGUID: pANJXq9OTGuIwppqTNUafw== X-CSE-MsgGUID: KtWSJ9S+QcenY7CGYgYiWQ== X-IronPort-AV: E=Sophos;i="6.15,216,1739808000"; d="scan'208";a="81484521" Received: from h199-255-45-14.hgst.com (HELO uls-op-cesaep01.wdc.com) ([199.255.45.14]) by ob1.hgst.iphmx.com with ESMTP; 16 Apr 2025 22:28:30 +0800 IronPort-SDR: 67ffb080_UmWMfTQgtsPB2pW/FtKkAKml0pZ8fVJOTtXODtegSw4GVuf vxUNiUwP/wYzpx/W40qwCShZYPYL6oBAgUq2EZw== Received: from uls-op-cesaip01.wdc.com ([10.248.3.36]) by uls-op-cesaep01.wdc.com with ESMTP/TLS/ECDHE-RSA-AES128-GCM-SHA256; 16 Apr 2025 06:28:33 -0700 WDCIronportException: Internal Received: from 5cg2075gjp.ad.shared (HELO naota-xeon..) ([10.224.104.89]) by uls-op-cesaip01.wdc.com with ESMTP; 16 Apr 2025 07:28:29 -0700 From: Naohiro Aota To: linux-btrfs@vger.kernel.org Cc: Naohiro Aota , Johannes Thumshirn Subject: [PATCH v3 04/13] btrfs: spin out do_async_reclaim_{data,metadata}_space() Date: Wed, 16 Apr 2025 23:28:09 +0900 Message-ID: <65daa5055b3769c8c4078137cfae990b222c1107.1744813603.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 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 7334ffa67a86..d6d33ab754ba 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 Apr 16 14:28:10 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Naohiro Aota X-Patchwork-Id: 14054066 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 E86331C54B2 for ; Wed, 16 Apr 2025 14:28:37 +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=1744813719; cv=none; b=fQlLzCYC3GX67XSK7BektmpFtJK8JvkDHc/RUzwgeDhKdHXsxHOFCq3QCyNYBrKhYD7od7xFXTfgAfmg/0R7kSbwI/5KwOSWrxnNFTl3Ct2U8f7I/c9NqK62Jg7pOciOi0ztErfQcyv1SjAQU6HXmoefRZVYntolgbjxvso0xZE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744813719; c=relaxed/simple; bh=vKXVPOaBUUxuZW9IiU1O+R0eGzV6K4f4LAPuW0RP+AU=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=g2dsdho7JHn3FKN5mCy6m19ETNkZVnT7gYcccMKQwmmxTBxpwtI3RAol6fY/eoMkNCLpLfJmMA/WrkvYryqRTWAaj41vd5S60ooOeIYTsqkvHmNIQsRS/R5IhnJHL3t2aR49+njxDaDS8pqyKumMWQCAGT+Tpgpe7qQH/RnVsos= 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=qPeEpg6f; 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="qPeEpg6f" DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=wdc.com; i=@wdc.com; q=dns/txt; s=dkim.wdc.com; t=1744813717; x=1776349717; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=vKXVPOaBUUxuZW9IiU1O+R0eGzV6K4f4LAPuW0RP+AU=; b=qPeEpg6faSNqd2eGu+MxR6JqmPjYKfMUK/l4G95KMQH91lAcD/ZXsbe8 sfM4OdSSzZrdLVw5Mp4AaegkHnI9AHSn0ws43ZQJsy/c5CljrIaDflZAX mi6R2TpgDIuyegzozuIeoPqOBa7H2ZnMigmbBxJS7OJ6aBuCVbE2aHGCg A6I5n8eAZp6fxyj/WSE8T3Xq5yQXmCqdgyCbt9tpsJ25TPUzYA/k0pbYj 25ypqVjS4VMA4S8Cy4UC6TdQPduTZLv6ah1SUaNQ3F8/9vNZPMQNf4PFt Saq6eZAuW9u2aCt5Z4qsKYQKEGGR6loELEQi5+BFm++x+d9KuTdDMt+Pt Q==; X-CSE-ConnectionGUID: YlAov7MvTKqwiQ9uD5cjyA== X-CSE-MsgGUID: C+RQDj9ATeWQDzlHMCFMgA== X-IronPort-AV: E=Sophos;i="6.15,216,1739808000"; d="scan'208";a="81484523" Received: from h199-255-45-14.hgst.com (HELO uls-op-cesaep01.wdc.com) ([199.255.45.14]) by ob1.hgst.iphmx.com with ESMTP; 16 Apr 2025 22:28:31 +0800 IronPort-SDR: 67ffb081_ohqwXsfjHl5FQfxqFYZB2fQYCTM5k4V63cG/gbVn0zxqYT4 /TAGGjb09CP+ZFDd6KJ3UJ0h64HU3jYLrqcIwdA== Received: from uls-op-cesaip01.wdc.com ([10.248.3.36]) by uls-op-cesaep01.wdc.com with ESMTP/TLS/ECDHE-RSA-AES128-GCM-SHA256; 16 Apr 2025 06:28:34 -0700 WDCIronportException: Internal Received: from 5cg2075gjp.ad.shared (HELO naota-xeon..) ([10.224.104.89]) by uls-op-cesaip01.wdc.com with ESMTP; 16 Apr 2025 07:28:30 -0700 From: Naohiro Aota To: linux-btrfs@vger.kernel.org Cc: Naohiro Aota , Johannes Thumshirn Subject: [PATCH v3 05/13] btrfs: factor out check_removing_space_info() Date: Wed, 16 Apr 2025 23:28:10 +0900 Message-ID: <9f12a9c25bb0bfc760a3a6aad5357d4365bff502.1744813603.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. Signed-off-by: Naohiro Aota Reviewed-by: Johannes Thumshirn --- 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 91807d294366..b700d80089d3 100644 --- a/fs/btrfs/block-group.c +++ b/fs/btrfs/block-group.c @@ -4400,6 +4400,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 @@ -4501,28 +4529,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 Apr 16 14:28:11 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Naohiro Aota X-Patchwork-Id: 14054067 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 6CFF21EB5DA for ; Wed, 16 Apr 2025 14:28:38 +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=1744813720; cv=none; b=BJouxINjQwf2Hf5B3Zsi0Ib4T8a8NrGA20ShZOEIyO3M+JhiQ0Uw+rxLGK/L8/r4/mo6Uhb1xDwIvFLM8CejXX0ad03/J1rbuNQRdv6djRCg/R1OisO09pUrrTcAyP8JGnTBeB+F7eEkLjoABLnCE3T/Pw1SCh4ZAFPfiOzSQkA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744813720; c=relaxed/simple; bh=nDlRIctq9sSTuK3XV/+XqLxDMgu+Vnk/w/VMvkuRWWQ=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=NAcY+tZm2XzONBX8TIiG636R1vd/xdXPKkgSjZtIuSUJCSqEgty3j/CtXpKUlDtUJ9slTNVS7pCfUUaGquKOxLzuHdgfG032TLOL2Pvy9rWTvt7eYKlv3o37ikjJPFr2+xHLEE1HTWwN4BkLZCajX4/LH1GJmQmhPcsO6XY8fQY= 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=nKWlEey1; 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="nKWlEey1" DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=wdc.com; i=@wdc.com; q=dns/txt; s=dkim.wdc.com; t=1744813718; x=1776349718; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=nDlRIctq9sSTuK3XV/+XqLxDMgu+Vnk/w/VMvkuRWWQ=; b=nKWlEey13u/XGZznoc1mGLbRuiM6oNdsWTZPKbjq7iTmSGFB6nR4uuU2 HVqxdiy5GslpqcB/NF7DfBTd7yDyE4jzA4WULNeFtK7B5X4YepDGb8hk4 lwHnLrkiq39pP2AAj7Mpt/dFc3YdFgqqOe72nty63SPwPG7Ame51uUXpX MHP1qAM6OTs1sXu/JA/psTQYuAFJ+kWi2Q3V+3u2kYSyfjXK3AduE3OkI rhhNzM5oyFlJjylH0kXTH2XLLCubKsog+c8NvB3tvEkFxyyJkR8fiDnSU Nzgc6OKgbWGETobPvgpDwt56NhclMSw3Dd/Epr8KwSsUxDFLwImeWrhlB w==; X-CSE-ConnectionGUID: vD5e5scKTt6XEt7+WZtOIg== X-CSE-MsgGUID: aErMLORnSmOxhxT2el5WFw== X-IronPort-AV: E=Sophos;i="6.15,216,1739808000"; d="scan'208";a="81484524" Received: from h199-255-45-14.hgst.com (HELO uls-op-cesaep01.wdc.com) ([199.255.45.14]) by ob1.hgst.iphmx.com with ESMTP; 16 Apr 2025 22:28:32 +0800 IronPort-SDR: 67ffb082_H4s+/PR3a9EdG6OmmIGFWl0y+ljZjnbd3SifnEMqxK/JxXG X0/MvxKDMibwkMMcftUuUa5WO/gLUNoJ0kI/wBg== Received: from uls-op-cesaip01.wdc.com ([10.248.3.36]) by uls-op-cesaep01.wdc.com with ESMTP/TLS/ECDHE-RSA-AES128-GCM-SHA256; 16 Apr 2025 06:28:34 -0700 WDCIronportException: Internal Received: from 5cg2075gjp.ad.shared (HELO naota-xeon..) ([10.224.104.89]) by uls-op-cesaip01.wdc.com with ESMTP; 16 Apr 2025 07:28:31 -0700 From: Naohiro Aota To: linux-btrfs@vger.kernel.org Cc: Naohiro Aota , Johannes Thumshirn Subject: [PATCH v3 06/13] btrfs: introduce space_info argument to btrfs_chunk_alloc Date: Wed, 16 Apr 2025 23:28:11 +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 b700d80089d3..12cc9069d4bb 100644 --- a/fs/btrfs/block-group.c +++ b/fs/btrfs/block-group.c @@ -3018,7 +3018,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 @@ -3047,7 +3047,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; /* @@ -3899,7 +3899,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) @@ -4102,12 +4102,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; @@ -4146,8 +4149,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 a68a8a07caff..1dad1a42c9c1 100644 --- a/fs/btrfs/extent-tree.c +++ b/fs/btrfs/extent-tree.c @@ -4159,7 +4159,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 d6d33ab754ba..2489c2a16123 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 39e48bf610a1..670e0527996c 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 Apr 16 14:28:12 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Naohiro Aota X-Patchwork-Id: 14054068 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 E5F881DDA31 for ; Wed, 16 Apr 2025 14:28:38 +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=1744813720; cv=none; b=XDQM7JtEB4fiFTUHc5KLqDNRvDs8hFyb8a394yGdiK6nbAbccb7Kd3VNMUTlck3eq4v5GJVp7i96xX/96hZ/p9rYOvxOXRzoAsR0iE1ubmPFGjqqW5a9oLZFBNYAt3xso1ozN6UkNCsoATcdjgjk9/nVyYR3RfRbdiLC2/Ugff0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744813720; c=relaxed/simple; bh=Tmc1LwVB3pe8siIgy8JHC7uNrskHVxa6NlsYmWRncgY=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=dDh8J7BuNQ5gA+Ito7m8uFNMHIV3Pl54nee/h3X2OcL/iVvXdcHbgWJBlRu8FAj+ljwMJkvfdigYpLh1bolOCzhk3FqCLlcFS2lxCWZP54G3LRoUXdiJIH8fhdgEYno8JCzz87vJ/ovXGwVgvvw4oFZp+kuRq9Q2yYwXJW7JgM0= 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=DUZh4VWm; 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="DUZh4VWm" DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=wdc.com; i=@wdc.com; q=dns/txt; s=dkim.wdc.com; t=1744813718; x=1776349718; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=Tmc1LwVB3pe8siIgy8JHC7uNrskHVxa6NlsYmWRncgY=; b=DUZh4VWmbl+VrvCViEOw50wZOD9SqdWlA2DdqQTQDWW7CS113AjPUTV6 UKBAChBJODaws6Kb6wk3xWVOpfQXMB6wTo5EMsdCVyaJPZEvui87g4IbO ljoluWR2B5sktu5BBDkHarmYpqaSbXNCOgUZqKt6P/vPlT0KgDOpPUiBL 127kSRT90VEFZEU00yLCujaLKY+7xnJ/lW/030Ud7POeGfEbCWlBt2vM3 E7Mg94ImNUGrc8pzElwD+DcFhKcSy+Lb4GRkHGr1M5tGB8tlGJJ5wzNx6 CT1jhn3KGupT0X1uKlrA3wKSvgGD+vjVwemO4r4H6g9LEbpMo5AxGTad+ g==; X-CSE-ConnectionGUID: ilQdkMtUTeeL4vu6sKoZvg== X-CSE-MsgGUID: 9ArL6p4FQ+agcp/zKolhqg== X-IronPort-AV: E=Sophos;i="6.15,216,1739808000"; d="scan'208";a="81484526" Received: from h199-255-45-14.hgst.com (HELO uls-op-cesaep01.wdc.com) ([199.255.45.14]) by ob1.hgst.iphmx.com with ESMTP; 16 Apr 2025 22:28:32 +0800 IronPort-SDR: 67ffb083_0F13WClwgHeHHhmlkftjqVMG95qV5Flv9g3f1SicohYA6e6 FCGGfcDWT7+evYoAMe6muYX3hw9MbxGBKyn7NwA== Received: from uls-op-cesaip01.wdc.com ([10.248.3.36]) by uls-op-cesaep01.wdc.com with ESMTP/TLS/ECDHE-RSA-AES128-GCM-SHA256; 16 Apr 2025 06:28:35 -0700 WDCIronportException: Internal Received: from 5cg2075gjp.ad.shared (HELO naota-xeon..) ([10.224.104.89]) by uls-op-cesaip01.wdc.com with ESMTP; 16 Apr 2025 07:28:32 -0700 From: Naohiro Aota To: linux-btrfs@vger.kernel.org Cc: Naohiro Aota , Johannes Thumshirn Subject: [PATCH v3 07/13] btrfs: pass space_info for block group creation Date: Wed, 16 Apr 2025 23:28:12 +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 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 | 18 ++++++++++-------- fs/btrfs/block-group.h | 4 ++-- fs/btrfs/volumes.c | 22 +++++++++++++++++----- fs/btrfs/volumes.h | 3 ++- 4 files changed, 31 insertions(+), 16 deletions(-) diff --git a/fs/btrfs/block-group.c b/fs/btrfs/block-group.c index 12cc9069d4bb..846c9737ff5a 100644 --- a/fs/btrfs/block-group.c +++ b/fs/btrfs/block-group.c @@ -2866,8 +2866,8 @@ 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, - u64 chunk_offset, u64 size) + struct btrfs_space_info *space_info, + u64 type, u64 chunk_offset, u64 size) { struct btrfs_fs_info *fs_info = trans->fs_info; struct btrfs_block_group *cache; @@ -2921,7 +2921,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); @@ -3902,7 +3902,9 @@ 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; @@ -3915,7 +3917,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; @@ -3964,7 +3966,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); @@ -4214,7 +4216,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)) { @@ -4297,7 +4299,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..35309b690d6f 100644 --- a/fs/btrfs/block-group.h +++ b/fs/btrfs/block-group.h @@ -326,8 +326,8 @@ 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, - u64 chunk_offset, u64 size); + 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, bool do_chunk_alloc); diff --git a/fs/btrfs/volumes.c b/fs/btrfs/volumes.c index 7509cbe3272c..5462c832ea19 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( @@ -5617,7 +5619,8 @@ 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; @@ -5643,7 +5646,8 @@ 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; @@ -5671,8 +5675,16 @@ 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); + if (!space_info) { + ASSERT(0); + return ERR_PTR(-EINVAL); + } + } 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), @@ -5840,12 +5852,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..7f314a4487c4 100644 --- a/fs/btrfs/volumes.h +++ b/fs/btrfs/volumes.h @@ -715,7 +715,8 @@ 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 Apr 16 14:28:13 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Naohiro Aota X-Patchwork-Id: 14054069 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 A65B91FBE9E for ; Wed, 16 Apr 2025 14:28:39 +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=1744813721; cv=none; b=g4MpJyA4Mj3wK4lK8fCLVcE8w9SQ60iD0FclRnuIS39rsSNRkBPrgyzI23QDQhCyGXha/lklOFuR/1cmFvgsQ3EQnIR1lKnCC1Wy5SUZhb0UOJTxldYNqR6XNRzA5gbRZwYb0rV5LiZf/Y5DuThQElaQV3MHVCgskeU4bS6w8iU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744813721; c=relaxed/simple; bh=Ah7RwYRZb//0D2Luv9yhDNWYDplhTKKZL6LMhDu4iOg=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=F41gub5XDOea1vJQI4NQge6uqBFBrnD/CUgNj+Cy852p755zqf1obivIdSOd8TowDLP2Lerg6biZnO6+v4h0GE019vgYk8Bl6D4S2MZeRrZAtl7K6WpU/VGjh4sY+fgyZ7Vk0JxE9xG+4caOdy6yO2puEboViiDrHRNL9lzi5fg= 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=L5HPm2CZ; 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="L5HPm2CZ" DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=wdc.com; i=@wdc.com; q=dns/txt; s=dkim.wdc.com; t=1744813719; x=1776349719; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=Ah7RwYRZb//0D2Luv9yhDNWYDplhTKKZL6LMhDu4iOg=; b=L5HPm2CZuI4iE3TqpORXBTqnWohdgJJDCv3YBPComOurwYl4OLRhEEWF OlEAHZ01BDdkbOtB8shvi6n90uZQPXiMeXZkQZKFaJEiYULxLdB53yIpr B10R3oVp4QlH4XDvcmYg+x0EmW3YvDghhr1LxfE6e68YN++12QWtfYRTk lEEyY/WWh9snK0fpeC9hwQ6OWvRFJLdXgmg2jgORQ9bEgVV+h87BEM6+l vd+iMCLm71zlJg1ftw35skCYLS2y/OWyqTjVE9YGh0mbw7WHVZgYaxYUI OvUgpaIXFU5HF0BrxnInewtFK02SVl2VXP92vuhSeMr8aAI9kwJ5XAmKJ w==; X-CSE-ConnectionGUID: wfjXBXVzRyuyFJcQ/c0Ynw== X-CSE-MsgGUID: ZILgYdHaSPq6s0Woo9iEgQ== X-IronPort-AV: E=Sophos;i="6.15,216,1739808000"; d="scan'208";a="81484527" Received: from h199-255-45-14.hgst.com (HELO uls-op-cesaep01.wdc.com) ([199.255.45.14]) by ob1.hgst.iphmx.com with ESMTP; 16 Apr 2025 22:28:33 +0800 IronPort-SDR: 67ffb083_7g9kz5hqDS0jHPo0qqYmsuXI8dLH0z3BcEY+/HGw7a+FmwC ZkZorj0Om1rGON2AbKXLyEqHVf/+DtFXm9KtgNw== Received: from uls-op-cesaip01.wdc.com ([10.248.3.36]) by uls-op-cesaep01.wdc.com with ESMTP/TLS/ECDHE-RSA-AES128-GCM-SHA256; 16 Apr 2025 06:28:36 -0700 WDCIronportException: Internal Received: from 5cg2075gjp.ad.shared (HELO naota-xeon..) ([10.224.104.89]) by uls-op-cesaip01.wdc.com with ESMTP; 16 Apr 2025 07:28:33 -0700 From: Naohiro Aota To: linux-btrfs@vger.kernel.org Cc: Naohiro Aota Subject: [PATCH v3 08/13] btrfs: introduce btrfs_space_info sub-group Date: Wed, 16 Apr 2025 23:28:13 +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 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 Reviewed-by: Johannes Thumshirn --- fs/btrfs/block-group.c | 11 +++++++++++ fs/btrfs/space-info.c | 38 +++++++++++++++++++++++++++++++++++--- fs/btrfs/space-info.h | 8 ++++++++ fs/btrfs/sysfs.c | 16 +++++++++++++--- 4 files changed, 67 insertions(+), 6 deletions(-) diff --git a/fs/btrfs/block-group.c b/fs/btrfs/block-group.c index 846c9737ff5a..475353b0b32c 100644 --- a/fs/btrfs/block-group.c +++ b/fs/btrfs/block-group.c @@ -4411,6 +4411,17 @@ static void check_removing_space_info(struct btrfs_space_info *space_info) { struct btrfs_fs_info *info = space_info->fs_info; + if (space_info->subgroup_id == SUB_GROUP_PRIMARY) { + /* This is a top space_info, proceeds its children first. */ + 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]); + space_info->sub_group[i] = NULL; + } + } + } + /* * Do not hide this behind enospc_debug, this is actually * important and indicates a real bug if this happens. diff --git a/fs/btrfs/space-info.c b/fs/btrfs/space-info.c index 2489c2a16123..37e55298c082 100644 --- a/fs/btrfs/space-info.c +++ b/fs/btrfs/space-info.c @@ -249,16 +249,38 @@ 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; } +static int create_space_info_sub_group(struct btrfs_space_info *parent, u64 flags, + enum btrfs_space_info_sub_group id) +{ + struct btrfs_fs_info *fs_info = parent->fs_info; + struct btrfs_space_info *sub_space; + + ASSERT(parent->subgroup_id == SUB_GROUP_PRIMARY); + ASSERT(id != SUB_GROUP_PRIMARY); + + sub_space = kzalloc(sizeof(*sub_space), GFP_NOFS); + if (!sub_space) + return -ENOMEM; + + init_space_info(fs_info, sub_space, flags); + parent->sub_group[id] = sub_space; + sub_space->parent = parent; + sub_space->subgroup_id = id; + + return btrfs_sysfs_add_space_info_type(fs_info, sub_space); +} + static int create_space_info(struct btrfs_fs_info *info, u64 flags) { struct btrfs_space_info *space_info; - int ret; + int ret = 0; space_info = kzalloc(sizeof(*space_info), GFP_NOFS); if (!space_info) @@ -266,6 +288,15 @@ 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) + ret = create_space_info_sub_group(space_info, flags, + SUB_GROUP_DATA_RELOC); + if (ret == -ENOMEM) + return ret; + ASSERT(!ret); + } + ret = btrfs_sysfs_add_space_info_type(info, space_info); if (ret) return ret; @@ -561,8 +592,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 Apr 16 14:28:14 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Naohiro Aota X-Patchwork-Id: 14054070 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 389D61FBE8A for ; Wed, 16 Apr 2025 14:28:40 +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=1744813721; cv=none; b=BXDcYHEwaXzXwk4mffbBvSoiWPLFKz3c/DlYttEUGEi+AYeQKu0GvLbaYypZFVTjcEUjpfksQZGnUTegveBX0IEBNJE8mthWthqo1MyOYOOZHOKfeT8/tGZX/Jt/APY4fW+B0jDkwpg/pRMxjpfbe1xlCuUnUdAjOAmvLygMgaQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744813721; c=relaxed/simple; bh=7zSUCpfxzZJrASCwbkJ+Av7AcVbH2p7fhrx+dKAfjdw=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=kkc10as4KUp94pDgHBXT+1YixdLXYxcOOelmsd+ldDiAzSeHHY+V66G1lbieaMHRnZ1DL/VXs4ANc2090REYV5HVMImqZOv1FQZ5y33q6BTLlaWm1LbKY6Wz1oej8pdNgDeDKxcZIy/nvCFu+/5uQ3QIAg/CrCMTcavGW33fjlc= 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=RSrkIIOl; 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="RSrkIIOl" DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=wdc.com; i=@wdc.com; q=dns/txt; s=dkim.wdc.com; t=1744813720; x=1776349720; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=7zSUCpfxzZJrASCwbkJ+Av7AcVbH2p7fhrx+dKAfjdw=; b=RSrkIIOlK6nPhJeOAVT+9Jt1IhggDcGffOqJ2/WhwZf2EvIUVP1Ysv6h 76OtXMUrndSSgM+VJs2682Qo+tDjNKwA45OTlfirixECc2pUQDMF61k4s Pd1PPdBDZD0AdcKsH93Y4OXgxCqgJ0Egwj5toT8oAU4T4LN6JLJbSWo// ksQir6/tkPJ8/nHi8rqu8R29To54Ow9V1/HfZipQoWRmBO4hoWduZbRzL nI8piZaiHdU6Zr+0JS3P/fefNLDLMYFgPmwzqGimt4/JG+esIip5KKt0s ORgOpod4JuGp9PKW49SWNrzrF86vwQ/GUVp/HpcF/Hj4WirlZNw0ckCO4 w==; X-CSE-ConnectionGUID: j5Qiz8dNSWGtA6Jv/sbvdg== X-CSE-MsgGUID: ztP2lydjSRqmFC//6QsbDg== X-IronPort-AV: E=Sophos;i="6.15,216,1739808000"; d="scan'208";a="81484529" Received: from h199-255-45-14.hgst.com (HELO uls-op-cesaep01.wdc.com) ([199.255.45.14]) by ob1.hgst.iphmx.com with ESMTP; 16 Apr 2025 22:28:34 +0800 IronPort-SDR: 67ffb084_E0DSP+yJOlbRwWWZ0Yv6em0Yp5luf+50kbxOR2q3O8ZsSt8 1oeEdEonUEtQZC3OlHLDSV505QlbP62VuvyC4RA== Received: from uls-op-cesaip01.wdc.com ([10.248.3.36]) by uls-op-cesaep01.wdc.com with ESMTP/TLS/ECDHE-RSA-AES128-GCM-SHA256; 16 Apr 2025 06:28:37 -0700 WDCIronportException: Internal Received: from 5cg2075gjp.ad.shared (HELO naota-xeon..) ([10.224.104.89]) by uls-op-cesaip01.wdc.com with ESMTP; 16 Apr 2025 07:28:33 -0700 From: Naohiro Aota To: linux-btrfs@vger.kernel.org Cc: Naohiro Aota Subject: [PATCH v3 09/13] btrfs: introduce tree-log sub-space_info Date: Wed, 16 Apr 2025 23:28:14 +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 Reviewed-by: Johannes Thumshirn --- fs/btrfs/space-info.c | 4 ++++ fs/btrfs/space-info.h | 1 + fs/btrfs/sysfs.c | 10 +++++++++- 3 files changed, 14 insertions(+), 1 deletion(-) diff --git a/fs/btrfs/space-info.c b/fs/btrfs/space-info.c index 37e55298c082..4b2343a3a009 100644 --- a/fs/btrfs/space-info.c +++ b/fs/btrfs/space-info.c @@ -292,6 +292,10 @@ static int create_space_info(struct btrfs_fs_info *info, u64 flags) if (flags & BTRFS_BLOCK_GROUP_DATA) ret = create_space_info_sub_group(space_info, flags, SUB_GROUP_DATA_RELOC); + else if (flags & BTRFS_BLOCK_GROUP_METADATA) + ret = create_space_info_sub_group(space_info, flags, + SUB_GROUP_METADATA_TREELOG); + if (ret == -ENOMEM) return ret; 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 Apr 16 14:28:15 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Naohiro Aota X-Patchwork-Id: 14054071 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 D144E1FC7D2 for ; Wed, 16 Apr 2025 14:28:40 +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=1744813722; cv=none; b=lkOcqG7m4zaU1jDIRSQddfsQfcu68UOyRMyLHB5YxNQgJg/xpiEq1GrGfEb/SSUTRput4F/c52vdBVIUxPdUfJBd+gcsMBHUFCWqjJaSwD8eBVnDCuFCw20em2sspQIq4qNWeiyPmMx8RT45CO6wwROZ/21BnN9ShVFDLzzgYiY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744813722; c=relaxed/simple; bh=U0iKqlhYRr1nofNy7aE9+3JNfru99hYNbCUopsqLeYU=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=UREDKrF2i/HzL8VuKRE/zXeElhNQaofzuJNfw9ak7jrbJ5yxUdTAmvue69s/od5+oUNhweqBA+ju7wkl6C3e1M+ReIuIbHf92mQ4Sra1GjVmlxGYYcpXe8y/+tWQfDZe5+HE9GUFA9NpJSijUQQaj8Kl5k861di/VwU508Dyw1c= 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=UkB26WRc; 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="UkB26WRc" DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=wdc.com; i=@wdc.com; q=dns/txt; s=dkim.wdc.com; t=1744813720; x=1776349720; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=U0iKqlhYRr1nofNy7aE9+3JNfru99hYNbCUopsqLeYU=; b=UkB26WRcvT5/L/WMIPNrwxGUPVGDmTBpWZw+KBIzkztwlckUpzjHL3/9 CZPwlz14I07fAsTUJi9BW8xR1kDV6YnVKyoicBis1NHDeOgkq7xN6BqHm 6mMHrZeSzhNyCFrrZus51hSz78fXo1ogAslGu/klW5Rdw921mq4chrbg+ D6m6/MIy6Qv4Y6GQNFeBcPrCsGjsyrA7lyPuPPmHIYCXCrhNIjcz3lbUs r5vhfd0lPJoMroTeoKe0+Z8Vo9WW5ETP1QRhgglrZTKHqGMf+a3skUhrW cCQIwpBljkCz3SZmI4bopfZY3YDJUvXC4qbb8EPfhwPjnYgWpYcT6EKAB A==; X-CSE-ConnectionGUID: nLAt5Kc+QfWnsbNYxq97nA== X-CSE-MsgGUID: BkuQNvwGTbW0szCn6ftDmQ== X-IronPort-AV: E=Sophos;i="6.15,216,1739808000"; d="scan'208";a="81484532" Received: from h199-255-45-14.hgst.com (HELO uls-op-cesaep01.wdc.com) ([199.255.45.14]) by ob1.hgst.iphmx.com with ESMTP; 16 Apr 2025 22:28:35 +0800 IronPort-SDR: 67ffb085_UY2504Z5XQhtW8aq1cHx0abf1jV0q6lWyyzHDGXAsI4lyGA aZSkmMC2TlWFEBEwpaEiNMuELNEImwXc9+f4Vog== Received: from uls-op-cesaip01.wdc.com ([10.248.3.36]) by uls-op-cesaep01.wdc.com with ESMTP/TLS/ECDHE-RSA-AES128-GCM-SHA256; 16 Apr 2025 06:28:38 -0700 WDCIronportException: Internal Received: from 5cg2075gjp.ad.shared (HELO naota-xeon..) ([10.224.104.89]) by uls-op-cesaip01.wdc.com with ESMTP; 16 Apr 2025 07:28:34 -0700 From: Naohiro Aota To: linux-btrfs@vger.kernel.org Cc: Naohiro Aota , Johannes Thumshirn Subject: [PATCH v3 10/13] btrfs: tweak extent/chunk allocation for space_info sub-space Date: Wed, 16 Apr 2025 23:28:15 +0900 Message-ID: <520eb9731dec3ab8b6c445bd5eb2ad7d3a1be700.1744813603.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 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 1dad1a42c9c1..0744134a0000 100644 --- a/fs/btrfs/extent-tree.c +++ b/fs/btrfs/extent-tree.c @@ -4347,7 +4347,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); @@ -4378,10 +4378,19 @@ static noinline int find_free_extent(struct btrfs_root *root, trace_btrfs_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); @@ -4402,6 +4411,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 4b2343a3a009..62dc69322b80 100644 --- a/fs/btrfs/space-info.c +++ b/fs/btrfs/space-info.c @@ -357,7 +357,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 Apr 16 14:28:16 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Naohiro Aota X-Patchwork-Id: 14054072 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 7FE971FDE01 for ; Wed, 16 Apr 2025 14:28:41 +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=1744813723; cv=none; b=EjNTz+4ZdcCimtugWJOnLTifyJpxNWFld03vOiCQ66XsRlXqMESxcwPnDZ4sRYlNjll8vbdcpLdG/BoV1uUALM08GLaeIiRHkvhocstEkyTx++52rNftp/ir4J60VhQ5JBuoHXfgm6u6vllLCLS9gzyiF/6S7bQNq1vbbiJ+6FI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744813723; c=relaxed/simple; bh=ULMSqJUJE/JQekeiM4lAHJyRNTu+vI9qN/9eYCz4Ttk=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=t9/xw4DdVZrqRNWXkDqYPsl7vB/FTAd83w0o5l2MDDcrrRqNBp8Dai2SuKUHh3pG1nV55J2/CXGw/X5Jaz5LH1jNohIuQWfCDluBTn/W9owrqNu6c8qrvDFATzreTfaEuifzT4OkkbJ3chnjmGctXKcW7rBz5EUb/hu4htGL/BA= 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=nofnYlyG; 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="nofnYlyG" DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=wdc.com; i=@wdc.com; q=dns/txt; s=dkim.wdc.com; t=1744813721; x=1776349721; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=ULMSqJUJE/JQekeiM4lAHJyRNTu+vI9qN/9eYCz4Ttk=; b=nofnYlyGiPXTRwyZwGLjbvH4AKGzacw/iM9CR2k+FqL2el5wJcFAacX9 CWE3dJPWTY5gsIQIAov66L2s0iZYV/3R+VjqSdWxOHcDqRmvCb566m66y 7IA7IheJv0MjO4vcDKGIK7YNpMqisredNsFF5eTU25MsPfllkC4gDA3HK jnsxlGj23xXVYjkD0rT+4mpo3YzYQhgC8Yt3wg48RawVVERSNjqndju3f kwt7g2DTfZl0y6K4cpSdf0XLGSAh8VchWhtVkUatunhw+RhuahTAPAz1S ufSw5BA35qSzRDO1v7oXx50a3LiD21H557g+YBSRIBeDB62/KesE5fxdH A==; X-CSE-ConnectionGUID: 6i23ydGtT5epuHCbgRiwxQ== X-CSE-MsgGUID: XLVyCOtISKWNn1r+GVuntg== X-IronPort-AV: E=Sophos;i="6.15,216,1739808000"; d="scan'208";a="81484533" Received: from h199-255-45-14.hgst.com (HELO uls-op-cesaep01.wdc.com) ([199.255.45.14]) by ob1.hgst.iphmx.com with ESMTP; 16 Apr 2025 22:28:36 +0800 IronPort-SDR: 67ffb086_1tfnqVMb0ptj1l59jppRRZVl728zm/HRHLagdqKURs7aU8i I6lrY7+v/kWeU9PeWqScKdYCR3+DOf39FCbG8xg== Received: from uls-op-cesaip01.wdc.com ([10.248.3.36]) by uls-op-cesaep01.wdc.com with ESMTP/TLS/ECDHE-RSA-AES128-GCM-SHA256; 16 Apr 2025 06:28:38 -0700 WDCIronportException: Internal Received: from 5cg2075gjp.ad.shared (HELO naota-xeon..) ([10.224.104.89]) by uls-op-cesaip01.wdc.com with ESMTP; 16 Apr 2025 07:28:35 -0700 From: Naohiro Aota To: linux-btrfs@vger.kernel.org Cc: Naohiro Aota Subject: [PATCH v3 11/13] btrfs: use proper data space_info Date: Wed, 16 Apr 2025 23:28:16 +0900 Message-ID: <653405a025836e4938d3276e69d3015e6b038a0a.1744813603.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 Reviewed-by: Johannes Thumshirn --- fs/btrfs/delalloc-space.c | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/fs/btrfs/delalloc-space.c b/fs/btrfs/delalloc-space.c index a18895255af9..f7927657e036 100644 --- a/fs/btrfs/delalloc-space.c +++ b/fs/btrfs/delalloc-space.c @@ -111,6 +111,15 @@ * 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) && 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 +132,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 +153,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 +181,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 Apr 16 14:28:17 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Naohiro Aota X-Patchwork-Id: 14054073 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 D3DE21FDE12 for ; Wed, 16 Apr 2025 14:28:41 +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=1744813723; cv=none; b=hCEzFge/a2uSLJj9CC+ZxKCYgsCGlWhMlhKxZEK8xfE5NBLCehUwmQZRa6IR3y1oCPQhaW+ewKxt/GRCW4GPfkGwOhobCSpeIjLtnvA2m7nPOavJYByM4LAEUQaQCl3dPHFVBHAzpvSVIWrxtkFJAlciyZFF+cOc1JdZraQqnSE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744813723; c=relaxed/simple; bh=UBfgXN6gBLlaw65UBgmlXeVKmrb3MPa206NgHYolr+A=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=qdnVBPqZKMTedlZIF8rpFk/9tdT3iibfuyuL/TdzVHgcg1wSZMnccq1bZ+d50ixtKMApAS6NYgY1pvdII4+cdDBUTFWA9XTbeEB9wjw5d07IsR+fyexuViu6wumLPqtGrORX8R+UmvA26Tms1H8lksGyLZ8NsUqtShVcwcR2Fwo= 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=HKUonaj4; 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="HKUonaj4" DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=wdc.com; i=@wdc.com; q=dns/txt; s=dkim.wdc.com; t=1744813721; x=1776349721; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=UBfgXN6gBLlaw65UBgmlXeVKmrb3MPa206NgHYolr+A=; b=HKUonaj4oyuAi1muEgWXMsF/E+Zu4qZfR074U4nCNOf3NIQVx8FQ6u+I Ux6OzxcXreu0KarY8htLzpDpPKC6UpZulbd/2SZAbpCax7a2V4Xi4EyHw eeLu66ZfIMvZG2XDpz1Wa/qJeegqC6JByIQkJOzQMs+ckD9SAXK0o02Eq Y2ZSfGoTJSmXaVS/SKq9qcSKg6hxYp27SDvj7F1SLvCUJoOCG7lBfz5Oc ZHu4uWrQ5UQyeFBZU0qJI0fiB2EeH1d656YMs1t+3cqNtJ2mSJt3C+SUG VpzaGpmFRAci2NhH3ohepM+MeGv1UU1uvGmE0u1oES0vCLVLgJmRwJxMR w==; X-CSE-ConnectionGUID: jXMxEkEYQWOdYgdGsU5V7Q== X-CSE-MsgGUID: B+cUkyUaSc2gvatRYrfVyw== X-IronPort-AV: E=Sophos;i="6.15,216,1739808000"; d="scan'208";a="81484534" Received: from h199-255-45-14.hgst.com (HELO uls-op-cesaep01.wdc.com) ([199.255.45.14]) by ob1.hgst.iphmx.com with ESMTP; 16 Apr 2025 22:28:36 +0800 IronPort-SDR: 67ffb087_GFxkiMpUzigolI/mO+HDI5gh8NvvJhvOumb8mid+3HyCBPs 8O92SxCvHlFQ29B5jJ/I0CNp4g1WEfFJ3RmOm8w== Received: from uls-op-cesaip01.wdc.com ([10.248.3.36]) by uls-op-cesaep01.wdc.com with ESMTP/TLS/ECDHE-RSA-AES128-GCM-SHA256; 16 Apr 2025 06:28:39 -0700 WDCIronportException: Internal Received: from 5cg2075gjp.ad.shared (HELO naota-xeon..) ([10.224.104.89]) by uls-op-cesaip01.wdc.com with ESMTP; 16 Apr 2025 07:28:36 -0700 From: Naohiro Aota To: linux-btrfs@vger.kernel.org Cc: Naohiro Aota , Johannes Thumshirn Subject: [PATCH v3 12/13] btrfs: add block_rsv for treelog Date: Wed, 16 Apr 2025 23:28:17 +0900 Message-ID: <3a317ad692057695d49cd8428ed660f551eb759b.1744813603.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 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 59da809b7d57..88dbda24ad46 100644 --- a/fs/btrfs/disk-io.c +++ b/fs/btrfs/disk-io.c @@ -2822,6 +2822,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 bcca43046064..0d5af9732a3c 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 Apr 16 14:28:18 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Naohiro Aota X-Patchwork-Id: 14054074 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 795171FF1D1 for ; Wed, 16 Apr 2025 14:28:42 +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=1744813724; cv=none; b=PV6qdNKmV/NvVo9l64cJb1M/grbZBubv4vdeKOclsU+bMsNOZhikrib8fMZ/9BvpmxjkurSmqqRTRBENHat0VQjIgEPzQ7t8HeLP55eFhEOPUxawZiZLKZU+Aa2JA2r6Ok+ouNARMDi6H5Tr4OOVuboohJeRg3/diD6dbW6qN7Y= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744813724; c=relaxed/simple; bh=ChdfpV60FnsVHNIDor87O+AvqJAVTlOcC3EH5nkb6Ik=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=WyTxnVNd2LgVQOZgan+q3aeLS+IuBsLAOKMh2+7vrASTOIirq+P4WktkW7BHSQ4duEXdyjYKTPl2lBRUDFo5w/35ROE2sjZuUKByAVc4mdg9ElW1y9IlVyOFRZWhkMi2N3lY5RdvWLlk+loJHNlOKx/lJB3htsQugcilpRKzbKs= 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=jwjn8DAc; 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="jwjn8DAc" DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=wdc.com; i=@wdc.com; q=dns/txt; s=dkim.wdc.com; t=1744813722; x=1776349722; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=ChdfpV60FnsVHNIDor87O+AvqJAVTlOcC3EH5nkb6Ik=; b=jwjn8DAcTGwdGizkt7tcDfC0vp5Nj4w3P1AiOA37skOBhRBpMj3M7uCi 0XxenGmHWGRN3h21MgNtbTSd/w+CBDnpehk6nbRFMMUlbSGf93ZOG4d2a V/+6Quw5/YtP9iPNY5JfMF/DVcj0O4A1OvjU6b9q/Lb1EEMiLi8mga+CY XkyaBDWsYWb09Ty6O2eifCECsgRvyihgMk+69UCBXv99eiprSfvM7+6gk MzLRyKN0pM2R0Xq9iLvOApTyRl7QUSo2m0AKVeH5UgD4CVXyAUCdIqHvc 14DModXfgXvP3k486QYAsO5qF6pRQiE2vo2M2mMuhs2UjeFY9WV0Q5vPy Q==; X-CSE-ConnectionGUID: rVF9NvzhQQGLEZN7z/Xq4A== X-CSE-MsgGUID: IZwBM7J0QwyKI/8AsG6Mpg== X-IronPort-AV: E=Sophos;i="6.15,216,1739808000"; d="scan'208";a="81484535" Received: from h199-255-45-14.hgst.com (HELO uls-op-cesaep01.wdc.com) ([199.255.45.14]) by ob1.hgst.iphmx.com with ESMTP; 16 Apr 2025 22:28:37 +0800 IronPort-SDR: 67ffb087_CWySzCTiY4PVxjT1Sz67V9KPghQVVZ4EHN8oqx2xdf6Oo50 agxP5JqkhwBENx58RCKu9tyN8AFnX/fO+C4HJ0Q== Received: from uls-op-cesaip01.wdc.com ([10.248.3.36]) by uls-op-cesaep01.wdc.com with ESMTP/TLS/ECDHE-RSA-AES128-GCM-SHA256; 16 Apr 2025 06:28:40 -0700 WDCIronportException: Internal Received: from 5cg2075gjp.ad.shared (HELO naota-xeon..) ([10.224.104.89]) by uls-op-cesaip01.wdc.com with ESMTP; 16 Apr 2025 07:28:37 -0700 From: Naohiro Aota To: linux-btrfs@vger.kernel.org Cc: Naohiro Aota , Johannes Thumshirn Subject: [PATCH v3 13/13] btrfs: reclaim from sub-space space_info Date: Wed, 16 Apr 2025 23:28:18 +0900 Message-ID: <5b85a0d4bed9703a9332abbeb7bfb6802959f369.1744813603.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 62dc69322b80..0f543e3cb2fe 100644 --- a/fs/btrfs/space-info.c +++ b/fs/btrfs/space-info.c @@ -1221,6 +1221,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]); } /* @@ -1449,6 +1452,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)