From patchwork Tue Dec 12 12:37:59 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Johannes Thumshirn X-Patchwork-Id: 177317 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:bcd1:0:b0:403:3b70:6f57 with SMTP id r17csp7692135vqy; Tue, 12 Dec 2023 04:38:39 -0800 (PST) X-Google-Smtp-Source: AGHT+IHYH6Vv/M6wk4kzFzmAvxUDrmWTWLREtNGRnKsfAga0+5PoIA6dpr/AN5EYD9bgk1S+BKjt X-Received: by 2002:a05:6e02:1b0d:b0:35d:5995:799f with SMTP id i13-20020a056e021b0d00b0035d5995799fmr9176680ilv.57.1702384719396; Tue, 12 Dec 2023 04:38:39 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1702384719; cv=none; d=google.com; s=arc-20160816; b=sqBQbTQU0lyzZjoVlVzZKbzOtlhVllXMm3tuBEI2ggciZxkIayi+l6zUV8mzpOFy9Z XJP7HWGbFwNmIe7y2RU8T5UdVHOHEQUsqLdPdjvNY7gCl5EtIWLo5CRJpQIiBlRTRQwN Q+0P5y5emh0U7FOMDl4tctQ/alPjC8XzEBynLuzhIsJtjrLM35nTvO/M4AoL39jIaZkE k0NEt7lEskNv0cZ2OU69qh4p9Z4giXgW+klYI2xvH7Doc620AkBtqwS9lWzfIS9Sb/iR qiLNogl4fpOCWnxDYfUW3IdmIJ4s1wMJBsl0frz/6e3h+Qx0yBIkXmGPDbRIvNXaDfRr G+0A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:in-reply-to:references:message-id :content-transfer-encoding:mime-version:subject:date:from :wdcironportexception:ironport-sdr:ironport-sdr:dkim-signature; bh=bJ7OECDDKXonXX680W+L3bewSPGQ2O4jOSZHpVdQYRM=; fh=RkzPy8j9Bgyvxc5aNhoOEUjthII6WQwvTfVAiEIVvUg=; b=xOSjI1yzmAi0dGfYsLcR3YEv0e29CHoj6/yL9oOHNLaRsj6VD4JpoWJAaS/9s/TMk1 9xNT/Kqnl42hrPT7L8dhLgqujFCd5fVmQbqILX/QJomUG9gaf4Wqr0NJh+rkd5ynJnHM ttTdqQ1zBKjrRsc4SBECW+veOM1Q1Us5hVxQlETIk033oL8SbosMiUma/iNoRBwp0cmp ltu2hs5xJTvSqiWYzX6n7tFwCqiOjYKG74NR7tlr+11DpG7lZ/lCL/NJiK4sSlt1RfY0 qtELqraEC20I+7cWI76QkBqGpldV4xEr1OD79/9RegNRacna4kwlHZPYkHgmHm3J/ltQ ckXA== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@wdc.com header.s=dkim.wdc.com header.b=Gbbt9rz3; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.38 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=wdc.com Received: from fry.vger.email (fry.vger.email. [23.128.96.38]) by mx.google.com with ESMTPS id t9-20020a63eb09000000b005bd04d27b69si7591877pgh.725.2023.12.12.04.38.39 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 12 Dec 2023 04:38:39 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.38 as permitted sender) client-ip=23.128.96.38; Authentication-Results: mx.google.com; dkim=fail header.i=@wdc.com header.s=dkim.wdc.com header.b=Gbbt9rz3; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.38 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=wdc.com Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by fry.vger.email (Postfix) with ESMTP id C6C5B80968A1; Tue, 12 Dec 2023 04:38:35 -0800 (PST) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.11 at fry.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1346554AbjLLMiQ (ORCPT + 99 others); Tue, 12 Dec 2023 07:38:16 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:43524 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1346582AbjLLMiO (ORCPT ); Tue, 12 Dec 2023 07:38:14 -0500 Received: from esa2.hgst.iphmx.com (esa2.hgst.iphmx.com [68.232.143.124]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id D800A10C; Tue, 12 Dec 2023 04:38:16 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=wdc.com; i=@wdc.com; q=dns/txt; s=dkim.wdc.com; t=1702384696; x=1733920696; h=from:date:subject:mime-version:content-transfer-encoding: message-id:references:in-reply-to:to:cc; bh=Poy7kvGZE2juSHXFRnwi+t2LcQTptZvXl+fIR2CJQao=; b=Gbbt9rz3hmobQgifqcHxPpqzLrCjwXCAfrUmiKVuEIIxpmfbiHxa1H15 amCQuOHNLwVHYf69T+LBof0YupLyHME3St6RFW/A1WkUN2JuxW0iNptIH JBB0P7biZwTs3oBi3vRxWSXM0mWwiom9jUzn4xI/F+odiZsJpm0HQO6zP Txs7WmBGjQPtm0K3Kk6Wjj3MMzrNMgcB7pO4EUBNXHsv4xEjA1YRFZt61 +Qs/7OdYDwZ/rQSeOvYXrfG8y9tJm/+AoaE+X0u/PmZxZ763jlTlMpoih nmFQQVDBxfP/Nzxmh46Y+XwqvJCHifxs+Mkum90XTUDQXKAeba/FORC5N Q==; X-CSE-ConnectionGUID: Dc1luYC5TPqbW69VnjGZtQ== X-CSE-MsgGUID: C7rufPamS+2oUgir46Oy4g== X-IronPort-AV: E=Sophos;i="6.04,270,1695657600"; d="scan'208";a="4629786" Received: from uls-op-cesaip02.wdc.com (HELO uls-op-cesaep02.wdc.com) ([199.255.45.15]) by ob1.hgst.iphmx.com with ESMTP; 12 Dec 2023 20:38:14 +0800 IronPort-SDR: fWB3rHOB2x8AJctoYVrruqCvm/BR9kOPdTw2sd8gRak3RfUxwAwWH0q4m56BLJ5HClB7fZNVfl M05RYLG8OhCQ== Received: from uls-op-cesaip02.wdc.com ([10.248.3.37]) by uls-op-cesaep02.wdc.com with ESMTP/TLS/ECDHE-RSA-AES128-GCM-SHA256; 12 Dec 2023 03:43:27 -0800 IronPort-SDR: fhUeR6/hDirl0xmEVTtn/EHzTfiTR86jI28zwK+5PBLCGZOwqHoY3FFu5+SoxSo4cedD4YNxZD ZV0FNzkfl19w== WDCIronportException: Internal Received: from unknown (HELO redsun91.ssa.fujisawa.hgst.com) ([10.149.66.6]) by uls-op-cesaip02.wdc.com with ESMTP; 12 Dec 2023 04:38:13 -0800 From: Johannes Thumshirn Date: Tue, 12 Dec 2023 04:37:59 -0800 Subject: [PATCH 01/13] btrfs: factor out helper for single device IO check MIME-Version: 1.0 Message-Id: <20231212-btrfs_map_block-cleanup-v1-1-b2d954d9a55b@wdc.com> References: <20231212-btrfs_map_block-cleanup-v1-0-b2d954d9a55b@wdc.com> In-Reply-To: <20231212-btrfs_map_block-cleanup-v1-0-b2d954d9a55b@wdc.com> To: Chris Mason , Josef Bacik , David Sterba Cc: linux-btrfs@vger.kernel.org, linux-kernel@vger.kernel.org, Johannes Thumshirn X-Mailer: b4 0.12.3 X-Developer-Signature: v=1; a=ed25519-sha256; t=1702384691; l=1953; i=johannes.thumshirn@wdc.com; s=20230613; h=from:subject:message-id; bh=Poy7kvGZE2juSHXFRnwi+t2LcQTptZvXl+fIR2CJQao=; b=tdbqfIMC7FsCjaWlWYQTNAYg00mwmNnZLJZ1jukrQz3iG8+Ly1UxlQnl/aQRsgJrOyEUYMdWv RcMUrLxBT9yAGBTzKHf34GVMLDNvUUXlpOKg2HY7GlEk7vG9VY7ErE9 X-Developer-Key: i=johannes.thumshirn@wdc.com; a=ed25519; pk=TGmHKs78FdPi+QhrViEvjKIGwReUGCfa+3LEnGoR2KM= X-Spam-Status: No, score=-0.6 required=5.0 tests=DKIM_INVALID,DKIM_SIGNED, HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,SPF_HELO_NONE, SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on fry.vger.email Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (fry.vger.email [0.0.0.0]); Tue, 12 Dec 2023 04:38:35 -0800 (PST) X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1785079760019665854 X-GMAIL-MSGID: 1785079760019665854 The check in btrfs_map_block() deciding if a particular I/O is targeting a single device is getting more and more convoluted. Factor out the check conditions into a helper function, with no functional change otherwise. Signed-off-by: Johannes Thumshirn Reviewed-by: Christoph Hellwig --- fs/btrfs/volumes.c | 28 ++++++++++++++++++++++++---- 1 file changed, 24 insertions(+), 4 deletions(-) diff --git a/fs/btrfs/volumes.c b/fs/btrfs/volumes.c index 1cc6b5d5eb61..1011178a244c 100644 --- a/fs/btrfs/volumes.c +++ b/fs/btrfs/volumes.c @@ -6330,6 +6330,28 @@ static int set_io_stripe(struct btrfs_fs_info *fs_info, enum btrfs_map_op op, return 0; } +static bool is_single_device_io(struct btrfs_fs_info *fs_info, + struct btrfs_io_stripe *smap, + struct btrfs_chunk_map *map, + int num_alloc_stripes, + enum btrfs_map_op op, int mirror_num) +{ + if (!smap) + return false; + + if (num_alloc_stripes != 1) + return false; + + if (btrfs_need_stripe_tree_update(fs_info, map->type) && + op != BTRFS_MAP_READ) + return false; + + if ((map->type & BTRFS_BLOCK_GROUP_RAID56_MASK) && mirror_num > 1) + return false; + + return true; +} + /* * Map one logical range to one or more physical ranges. * @@ -6532,10 +6554,8 @@ int btrfs_map_block(struct btrfs_fs_info *fs_info, enum btrfs_map_op op, * physical block information on the stack instead of allocating an * I/O context structure. */ - if (smap && num_alloc_stripes == 1 && - !(btrfs_need_stripe_tree_update(fs_info, map->type) && - op != BTRFS_MAP_READ) && - !((map->type & BTRFS_BLOCK_GROUP_RAID56_MASK) && mirror_num > 1)) { + if (is_single_device_io(fs_info, smap, map, num_alloc_stripes, op, + mirror_num)) { ret = set_io_stripe(fs_info, op, logical, length, smap, map, stripe_index, stripe_offset, stripe_nr); if (mirror_num_ret) From patchwork Tue Dec 12 12:38:00 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Johannes Thumshirn X-Patchwork-Id: 177318 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:bcd1:0:b0:403:3b70:6f57 with SMTP id r17csp7692140vqy; Tue, 12 Dec 2023 04:38:40 -0800 (PST) X-Google-Smtp-Source: AGHT+IG6W2xnItShki1HTb7Ch/yOtdaQUTT4g1yj+uwG5BVCS9L78Hzax5E6lSvC0fo1kXk2jjxW X-Received: by 2002:a05:6a00:ccd:b0:6ce:6f37:fa42 with SMTP id b13-20020a056a000ccd00b006ce6f37fa42mr8127969pfv.12.1702384720145; Tue, 12 Dec 2023 04:38:40 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1702384720; cv=none; d=google.com; s=arc-20160816; b=q/JnIbHn1VSnvC1ooVcgg76zE2t7BE3Y4YgzUp9SPjl7lFCwPqqiEf+AgWnHm0EKmT lSMJVnq02n9S2YYxXn8aupu5tLq5zegoyLcToEl8+YQu4jSWlbz7l6509HJhX7uBo/q2 nV+bgt0wYEy5mf7jCzWeuaitj1lG96oD+2MqShwkNrwkpBAFJSRfhW0VGjEvv8ILkJK2 IgjgZZjBpBvdjpcLN6RtHb1zHFwOephBBOZNZfzyEipYOYBWMQQwYu5OnUhWpHu3qbq1 dusK0wVPKevUjakrod43AlOnzj2Iw76hIiwegfydss/dusYpadxTmZN1E9wqCCUcS9Q4 mbDw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:in-reply-to:references:message-id :content-transfer-encoding:mime-version:subject:date:from :wdcironportexception:ironport-sdr:ironport-sdr:dkim-signature; bh=L0wbcXgWOu8Z9TpoTRDDCVQrbBrk2pc0svdIKYacX/I=; fh=RkzPy8j9Bgyvxc5aNhoOEUjthII6WQwvTfVAiEIVvUg=; b=Hi6RNd6WJ4elRvWIKUVajuV8Gau3Ex5c4jvuTQcoUCyAR/Gcj4ls6gaSGK4+EQEB8f AoBoBfUnw4t4u6k9t5A7JbMShSDf/WR0wC+KZIw2Ida0lX67uyM4/5WhoA9N3r0JPEgv P1g22pfnDvxXvlAJLK+dt/ehscWcIytAXLC/+W8UQV893yZ+9uNCHvfF21jMPKgjIvqB TZde0pXGbdEitaF1ImymZ4jnJr/SrSAMWwlhUG5V2NURxg3GsNHjKCSPWcOEoAd3PS/p 8o08MEx0YzSeIDcyl79kz5nj51a3QJ9IFICk5ZJG8sB9iT0DahEmQwI3YTGNKky2Hj4n OX9Q== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@wdc.com header.s=dkim.wdc.com header.b=Xpt0TSnD; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.33 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=wdc.com Received: from lipwig.vger.email (lipwig.vger.email. [23.128.96.33]) by mx.google.com with ESMTPS id m22-20020aa78a16000000b006ce63dbd7f4si7652171pfa.142.2023.12.12.04.38.39 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 12 Dec 2023 04:38:40 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.33 as permitted sender) client-ip=23.128.96.33; Authentication-Results: mx.google.com; dkim=fail header.i=@wdc.com header.s=dkim.wdc.com header.b=Xpt0TSnD; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.33 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=wdc.com Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by lipwig.vger.email (Postfix) with ESMTP id E23568063CCF; Tue, 12 Dec 2023 04:38:36 -0800 (PST) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.11 at lipwig.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1346669AbjLLMiY (ORCPT + 99 others); Tue, 12 Dec 2023 07:38:24 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:43592 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1346641AbjLLMiQ (ORCPT ); Tue, 12 Dec 2023 07:38:16 -0500 Received: from esa2.hgst.iphmx.com (esa2.hgst.iphmx.com [68.232.143.124]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id E12BA10E; Tue, 12 Dec 2023 04:38:17 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=wdc.com; i=@wdc.com; q=dns/txt; s=dkim.wdc.com; t=1702384697; x=1733920697; h=from:date:subject:mime-version:content-transfer-encoding: message-id:references:in-reply-to:to:cc; bh=URbmpvR20VX4btmngKh2nyV03iXD9B+5IvYzGplfqg8=; b=Xpt0TSnDghT+4+rwTyViw649yMN48LPpPk0lROp9GsKpBshM9zFDtoz2 el8U5Maf36XttMANzMtXiYX3mFdI7QM497+OHFSiKDNLESybEg0azYjR1 HX1Oo8fhytWIV+7LhgJvbmC9ubNx+N/wDsxynY3Ean+isTTMoUeDb0Th0 vg+9JNjrzdGOJtPEdzDpAQShChjjZpf1PKWj3QP8vsHH5FTwOYINrUQwM kQl7V3uhFyQlhP+Pt38P6YZIgol5MpF8NkgOH7zniy3P0r/Xar+BNYBB6 Lnr3CdpxJSKLApHG8M/MOWsUR9jeXLoxjE4N2sooP3RCQc0Ge0GGD5zHi g==; X-CSE-ConnectionGUID: 6YVYmZvuSg2Z9Z95GqKcrA== X-CSE-MsgGUID: xldAz7kiTb+E+/Pug4hOJg== X-IronPort-AV: E=Sophos;i="6.04,270,1695657600"; d="scan'208";a="4629787" Received: from uls-op-cesaip02.wdc.com (HELO uls-op-cesaep02.wdc.com) ([199.255.45.15]) by ob1.hgst.iphmx.com with ESMTP; 12 Dec 2023 20:38:15 +0800 IronPort-SDR: J06JVZNiQmtfl+MtlNWlqNrKxbD/juee6PHRaL40BhCOwBg0TFlRnN00HXXHPl6yCBptXdwurz 1eGT70MRE8rA== Received: from uls-op-cesaip02.wdc.com ([10.248.3.37]) by uls-op-cesaep02.wdc.com with ESMTP/TLS/ECDHE-RSA-AES128-GCM-SHA256; 12 Dec 2023 03:43:29 -0800 IronPort-SDR: MMwxy3aCgpBp7rU2yLVsHP/fYEvJiI+UHpkK+XTAZqqUmdyk8NY/cE8GN+sCaPOBdMA0mA4SQF 5vzo3uKBMjeg== WDCIronportException: Internal Received: from unknown (HELO redsun91.ssa.fujisawa.hgst.com) ([10.149.66.6]) by uls-op-cesaip02.wdc.com with ESMTP; 12 Dec 2023 04:38:14 -0800 From: Johannes Thumshirn Date: Tue, 12 Dec 2023 04:38:00 -0800 Subject: [PATCH 02/13] btrfs: re-introduce struct btrfs_io_geometry MIME-Version: 1.0 Message-Id: <20231212-btrfs_map_block-cleanup-v1-2-b2d954d9a55b@wdc.com> References: <20231212-btrfs_map_block-cleanup-v1-0-b2d954d9a55b@wdc.com> In-Reply-To: <20231212-btrfs_map_block-cleanup-v1-0-b2d954d9a55b@wdc.com> To: Chris Mason , Josef Bacik , David Sterba Cc: linux-btrfs@vger.kernel.org, linux-kernel@vger.kernel.org, Johannes Thumshirn X-Mailer: b4 0.12.3 X-Developer-Signature: v=1; a=ed25519-sha256; t=1702384691; l=11384; i=johannes.thumshirn@wdc.com; s=20230613; h=from:subject:message-id; bh=URbmpvR20VX4btmngKh2nyV03iXD9B+5IvYzGplfqg8=; b=bnwWZ1qmwgXoV9Z49QY0Hh1JKoUMiZJaZU94Ab0xKtNiy+wUa8Wz+BjDxLaRWzoaG7zc7bZul D67dSzPx+7SDUqe6P6KKUrGsWwHJZLdFhQwu4zHpi7HgUllqZYtPOJc X-Developer-Key: i=johannes.thumshirn@wdc.com; a=ed25519; pk=TGmHKs78FdPi+QhrViEvjKIGwReUGCfa+3LEnGoR2KM= X-Spam-Status: No, score=-0.6 required=5.0 tests=DKIM_INVALID,DKIM_SIGNED, HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,SPF_HELO_NONE, SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lipwig.vger.email Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (lipwig.vger.email [0.0.0.0]); Tue, 12 Dec 2023 04:38:37 -0800 (PST) X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1785079760343059931 X-GMAIL-MSGID: 1785079760343059931 Re-introduce struct btrfs_io_geometry, holding the necessary bits and pieces needed in btrfs_map_block() to decide the I/O geometry of a specific block mapping. Signed-off-by: Johannes Thumshirn --- fs/btrfs/volumes.c | 156 +++++++++++++++++++++++++++++------------------------ 1 file changed, 86 insertions(+), 70 deletions(-) diff --git a/fs/btrfs/volumes.c b/fs/btrfs/volumes.c index 1011178a244c..d0e529b3fd39 100644 --- a/fs/btrfs/volumes.c +++ b/fs/btrfs/volumes.c @@ -41,6 +41,16 @@ BTRFS_BLOCK_GROUP_RAID10 | \ BTRFS_BLOCK_GROUP_RAID56_MASK) +struct btrfs_io_geometry { + u32 stripe_index; + u32 stripe_nr; + int mirror_num; + int num_stripes; + u64 stripe_offset; + u64 raid56_full_stripe_start; + int max_errors; +}; + const struct btrfs_raid_attr btrfs_raid_array[BTRFS_NR_RAID_TYPES] = { [BTRFS_RAID_RAID10] = { .sub_stripes = 2, @@ -6393,28 +6403,22 @@ int btrfs_map_block(struct btrfs_fs_info *fs_info, enum btrfs_map_op op, struct btrfs_io_stripe *smap, int *mirror_num_ret) { struct btrfs_chunk_map *map; + struct btrfs_io_geometry io_geom = { }; u64 map_offset; - u64 stripe_offset; - u32 stripe_nr; - u32 stripe_index; int data_stripes; int i; int ret = 0; - int mirror_num = (mirror_num_ret ? *mirror_num_ret : 0); - int num_stripes; int num_copies; - int max_errors = 0; struct btrfs_io_context *bioc = NULL; struct btrfs_dev_replace *dev_replace = &fs_info->dev_replace; int dev_replace_is_ongoing = 0; u16 num_alloc_stripes; - u64 raid56_full_stripe_start = (u64)-1; u64 max_len; ASSERT(bioc_ret); num_copies = btrfs_num_copies(fs_info, logical, fs_info->sectorsize); - if (mirror_num > num_copies) + if (io_geom.mirror_num > num_copies) return -EINVAL; map = btrfs_get_chunk_map(fs_info, logical, *length); @@ -6424,8 +6428,10 @@ int btrfs_map_block(struct btrfs_fs_info *fs_info, enum btrfs_map_op op, data_stripes = nr_data_stripes(map); map_offset = logical - map->start; - max_len = btrfs_max_io_len(map, op, map_offset, &stripe_nr, - &stripe_offset, &raid56_full_stripe_start); + io_geom.raid56_full_stripe_start = (u64)-1; + max_len = btrfs_max_io_len(map, op, map_offset, &io_geom.stripe_nr, + &io_geom.stripe_offset, + &io_geom.raid56_full_stripe_start); *length = min_t(u64, map->chunk_len - map_offset, max_len); down_read(&dev_replace->rwsem); @@ -6437,53 +6443,54 @@ int btrfs_map_block(struct btrfs_fs_info *fs_info, enum btrfs_map_op op, if (!dev_replace_is_ongoing) up_read(&dev_replace->rwsem); - num_stripes = 1; - stripe_index = 0; + io_geom.num_stripes = 1; + io_geom.stripe_index = 0; + io_geom.mirror_num = (mirror_num_ret ? *mirror_num_ret : 0); if (map->type & BTRFS_BLOCK_GROUP_RAID0) { - stripe_index = stripe_nr % map->num_stripes; - stripe_nr /= map->num_stripes; + io_geom.stripe_index = io_geom.stripe_nr % map->num_stripes; + io_geom.stripe_nr /= map->num_stripes; if (op == BTRFS_MAP_READ) - mirror_num = 1; + io_geom.mirror_num = 1; } else if (map->type & BTRFS_BLOCK_GROUP_RAID1_MASK) { if (op != BTRFS_MAP_READ) { - num_stripes = map->num_stripes; - } else if (mirror_num) { - stripe_index = mirror_num - 1; + io_geom.num_stripes = map->num_stripes; + } else if (io_geom.mirror_num) { + io_geom.stripe_index = io_geom.mirror_num - 1; } else { - stripe_index = find_live_mirror(fs_info, map, 0, + io_geom.stripe_index = find_live_mirror(fs_info, map, 0, dev_replace_is_ongoing); - mirror_num = stripe_index + 1; + io_geom.mirror_num = io_geom.stripe_index + 1; } } else if (map->type & BTRFS_BLOCK_GROUP_DUP) { if (op != BTRFS_MAP_READ) { - num_stripes = map->num_stripes; - } else if (mirror_num) { - stripe_index = mirror_num - 1; + io_geom.num_stripes = map->num_stripes; + } else if (io_geom.mirror_num) { + io_geom.stripe_index = io_geom.mirror_num - 1; } else { - mirror_num = 1; + io_geom.mirror_num = 1; } } else if (map->type & BTRFS_BLOCK_GROUP_RAID10) { u32 factor = map->num_stripes / map->sub_stripes; - stripe_index = (stripe_nr % factor) * map->sub_stripes; - stripe_nr /= factor; + io_geom.stripe_index = (io_geom.stripe_nr % factor) * map->sub_stripes; + io_geom.stripe_nr /= factor; if (op != BTRFS_MAP_READ) - num_stripes = map->sub_stripes; - else if (mirror_num) - stripe_index += mirror_num - 1; + io_geom.num_stripes = map->sub_stripes; + else if (io_geom.mirror_num) + io_geom.stripe_index += io_geom.mirror_num - 1; else { - int old_stripe_index = stripe_index; - stripe_index = find_live_mirror(fs_info, map, - stripe_index, + int old_stripe_index = io_geom.stripe_index; + io_geom.stripe_index = find_live_mirror(fs_info, map, + io_geom.stripe_index, dev_replace_is_ongoing); - mirror_num = stripe_index - old_stripe_index + 1; + io_geom.mirror_num = io_geom.stripe_index - old_stripe_index + 1; } } else if (map->type & BTRFS_BLOCK_GROUP_RAID56_MASK) { - if (op != BTRFS_MAP_READ || mirror_num > 1) { + if (op != BTRFS_MAP_READ || io_geom.mirror_num > 1) { /* * Needs full stripe mapping. * @@ -6495,29 +6502,33 @@ int btrfs_map_block(struct btrfs_fs_info *fs_info, enum btrfs_map_op op, * but that can be expensive. Here we just divide * @stripe_nr with @data_stripes. */ - stripe_nr /= data_stripes; + io_geom.stripe_nr /= data_stripes; /* RAID[56] write or recovery. Return all stripes */ - num_stripes = map->num_stripes; - max_errors = btrfs_chunk_max_errors(map); + io_geom.num_stripes = map->num_stripes; + io_geom.max_errors = btrfs_chunk_max_errors(map); /* Return the length to the full stripe end */ *length = min(logical + *length, - raid56_full_stripe_start + map->start + - btrfs_stripe_nr_to_offset(data_stripes)) - + io_geom.raid56_full_stripe_start + + map->start + + btrfs_stripe_nr_to_offset( + data_stripes)) - logical; - stripe_index = 0; - stripe_offset = 0; + io_geom.stripe_index = 0; + io_geom.stripe_offset = 0; } else { - ASSERT(mirror_num <= 1); + ASSERT(io_geom.mirror_num <= 1); /* Just grab the data stripe directly. */ - stripe_index = stripe_nr % data_stripes; - stripe_nr /= data_stripes; + io_geom.stripe_index = io_geom.stripe_nr % data_stripes; + io_geom.stripe_nr /= data_stripes; /* We distribute the parity blocks across stripes */ - stripe_index = (stripe_nr + stripe_index) % map->num_stripes; - if (op == BTRFS_MAP_READ && mirror_num < 1) - mirror_num = 1; + io_geom.stripe_index = + (io_geom.stripe_nr + io_geom.stripe_index) % + map->num_stripes; + if (op == BTRFS_MAP_READ && io_geom.mirror_num < 1) + io_geom.mirror_num = 1; } } else { /* @@ -6525,19 +6536,19 @@ int btrfs_map_block(struct btrfs_fs_info *fs_info, enum btrfs_map_op op, * device we have to walk to find the data, and stripe_index is * the number of our device in the stripe array */ - stripe_index = stripe_nr % map->num_stripes; - stripe_nr /= map->num_stripes; - mirror_num = stripe_index + 1; + io_geom.stripe_index = io_geom.stripe_nr % map->num_stripes; + io_geom.stripe_nr /= map->num_stripes; + io_geom.mirror_num = io_geom.stripe_index + 1; } - if (stripe_index >= map->num_stripes) { + if (io_geom.stripe_index >= map->num_stripes) { btrfs_crit(fs_info, "stripe index math went horribly wrong, got stripe_index=%u, num_stripes=%u", - stripe_index, map->num_stripes); + io_geom.stripe_index, map->num_stripes); ret = -EINVAL; goto out; } - num_alloc_stripes = num_stripes; + num_alloc_stripes = io_geom.num_stripes; if (dev_replace_is_ongoing && dev_replace->tgtdev != NULL && op != BTRFS_MAP_READ) /* @@ -6555,11 +6566,12 @@ int btrfs_map_block(struct btrfs_fs_info *fs_info, enum btrfs_map_op op, * I/O context structure. */ if (is_single_device_io(fs_info, smap, map, num_alloc_stripes, op, - mirror_num)) { + io_geom.mirror_num)) { ret = set_io_stripe(fs_info, op, logical, length, smap, map, - stripe_index, stripe_offset, stripe_nr); + io_geom.stripe_index, io_geom.stripe_offset, + io_geom.stripe_nr); if (mirror_num_ret) - *mirror_num_ret = mirror_num; + *mirror_num_ret = io_geom.mirror_num; *bioc_ret = NULL; goto out; } @@ -6579,7 +6591,7 @@ int btrfs_map_block(struct btrfs_fs_info *fs_info, enum btrfs_map_op op, * It's still mostly the same as other profiles, just with extra rotation. */ if (map->type & BTRFS_BLOCK_GROUP_RAID56_MASK && - (op != BTRFS_MAP_READ || mirror_num > 1)) { + (op != BTRFS_MAP_READ || io_geom.mirror_num > 1)) { /* * For RAID56 @stripe_nr is already the number of full stripes * before us, which is also the rotation value (needs to modulo @@ -6589,12 +6601,13 @@ int btrfs_map_block(struct btrfs_fs_info *fs_info, enum btrfs_map_op op, * modulo, to reduce one modulo call. */ bioc->full_stripe_logical = map->start + - btrfs_stripe_nr_to_offset(stripe_nr * data_stripes); - for (int i = 0; i < num_stripes; i++) { + btrfs_stripe_nr_to_offset(io_geom.stripe_nr * data_stripes); + for (int i = 0; i < io_geom.num_stripes; i++) { ret = set_io_stripe(fs_info, op, logical, length, &bioc->stripes[i], map, - (i + stripe_nr) % num_stripes, - stripe_offset, stripe_nr); + (i + io_geom.stripe_nr) % io_geom.num_stripes, + io_geom.stripe_offset, + io_geom.stripe_nr); if (ret < 0) break; } @@ -6603,13 +6616,15 @@ int btrfs_map_block(struct btrfs_fs_info *fs_info, enum btrfs_map_op op, * For all other non-RAID56 profiles, just copy the target * stripe into the bioc. */ - for (i = 0; i < num_stripes; i++) { + for (i = 0; i < io_geom.num_stripes; i++) { ret = set_io_stripe(fs_info, op, logical, length, - &bioc->stripes[i], map, stripe_index, - stripe_offset, stripe_nr); + &bioc->stripes[i], map, + io_geom.stripe_index, + io_geom.stripe_offset, + io_geom.stripe_nr); if (ret < 0) break; - stripe_index++; + io_geom.stripe_index++; } } @@ -6620,18 +6635,19 @@ int btrfs_map_block(struct btrfs_fs_info *fs_info, enum btrfs_map_op op, } if (op != BTRFS_MAP_READ) - max_errors = btrfs_chunk_max_errors(map); + io_geom.max_errors = btrfs_chunk_max_errors(map); if (dev_replace_is_ongoing && dev_replace->tgtdev != NULL && op != BTRFS_MAP_READ) { handle_ops_on_dev_replace(op, bioc, dev_replace, logical, - &num_stripes, &max_errors); + &io_geom.num_stripes, + &io_geom.max_errors); } *bioc_ret = bioc; - bioc->num_stripes = num_stripes; - bioc->max_errors = max_errors; - bioc->mirror_num = mirror_num; + bioc->num_stripes = io_geom.num_stripes; + bioc->max_errors = io_geom.max_errors; + bioc->mirror_num = io_geom.mirror_num; out: if (dev_replace_is_ongoing) { From patchwork Tue Dec 12 12:38:01 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Johannes Thumshirn X-Patchwork-Id: 177316 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:bcd1:0:b0:403:3b70:6f57 with SMTP id r17csp7692102vqy; Tue, 12 Dec 2023 04:38:35 -0800 (PST) X-Google-Smtp-Source: AGHT+IEONlvAjwp1KPatU+Zm4sFCKzZGrmBaaRylN5r3NO2rRfBo119N5hinT9G1lcJsrPy3J3vo X-Received: by 2002:a05:6a20:158b:b0:18f:c3c8:effb with SMTP id h11-20020a056a20158b00b0018fc3c8effbmr7637403pzj.21.1702384714603; Tue, 12 Dec 2023 04:38:34 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1702384714; cv=none; d=google.com; s=arc-20160816; b=aHvplrdqGPoBc/PF0uhGTlv3lNF94DJkgUCOQyNKFIo2vhPXcIpl6wNuq8DG6T+0sF z4UoIa/KZUJO02D5BHh96kuVq1c7IGhwCNVON+Qj4m4mLZq+JsBXuPO9jDEqQzCTPP1n WRSmwfQu8GbYcF5+Xvn5mVRch3SAmZpw8uE35HTUkdK3SW1K0lC2NVr+k76pyFWrwfiD rd6XzaB5M+tcePMfwxADrU98b5tkDEGvyvLUL/fo1xu7yN1XvF+Iic6HAshNc5uxFAbJ 9pqlkEQ8XE2u86cO0yxFRfntVIGyexnzbDBaeHLvRXHfL+GwfLRqGUycoLxjFnsQB0MT 3IOA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:in-reply-to:references:message-id :content-transfer-encoding:mime-version:subject:date:from :wdcironportexception:ironport-sdr:ironport-sdr:dkim-signature; bh=9H4LrSKTzzHd2DSDBCwY+4NngDYjxPe3AmLSzIGH/X4=; fh=RkzPy8j9Bgyvxc5aNhoOEUjthII6WQwvTfVAiEIVvUg=; b=qcYxzl1ik3EvvqhtbmobwbKUR5WjlMOmr4Qk/bmZv+/ojelcwozN/JM0AKOgbaPcTx IZNmAvMv3EnQCR+bD9TP9LC5JbCeL2dPbBpebbRvQWPbj/XIeNrhgRyyOu6oMFUsP8av kvm1zFwXm9l4k2YFIJmBGIR337ohzhcRC8Xgf3I/8qGeBusXsD6shtYOPsUZag4J/GX+ J0VlZGYhx7jS7+AWieiTlEd1CKWsc6YVY7w7ROOHZK4BGyKb6bcU190QbbIUIuFZXdHU AIU3ZiRfja2zcybN3bZ3uh0Kp4IgL5Cp7sU8eFg66/phLQyot/feegCz+MUsmdXmltij ct2w== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@wdc.com header.s=dkim.wdc.com header.b=X4RI3YDr; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.35 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=wdc.com Received: from groat.vger.email (groat.vger.email. [23.128.96.35]) by mx.google.com with ESMTPS id a22-20020a056a001d1600b006ce08cdaf27si7760744pfx.371.2023.12.12.04.38.34 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 12 Dec 2023 04:38:34 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.35 as permitted sender) client-ip=23.128.96.35; Authentication-Results: mx.google.com; dkim=fail header.i=@wdc.com header.s=dkim.wdc.com header.b=X4RI3YDr; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.35 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=wdc.com Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by groat.vger.email (Postfix) with ESMTP id 1F89380A2228; Tue, 12 Dec 2023 04:38:31 -0800 (PST) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.11 at groat.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1346588AbjLLMiT (ORCPT + 99 others); Tue, 12 Dec 2023 07:38:19 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:43570 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1346623AbjLLMiP (ORCPT ); Tue, 12 Dec 2023 07:38:15 -0500 Received: from esa2.hgst.iphmx.com (esa2.hgst.iphmx.com [68.232.143.124]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id F02BC124; Tue, 12 Dec 2023 04:38:17 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=wdc.com; i=@wdc.com; q=dns/txt; s=dkim.wdc.com; t=1702384697; x=1733920697; h=from:date:subject:mime-version:content-transfer-encoding: message-id:references:in-reply-to:to:cc; bh=WzAokk5ODdjvW4/f5P8YZlwWo7Vx235+0DogRPEc7kw=; b=X4RI3YDrHQyqxVDlOnZmj97gXJ4qkSVChz/lUN51Ajht0aTsKyOjRT9E W+2OFcANC19E9n00VQo1/0VD/xb+R1sOwvF+w9uzbgHQNVFJdrV0H3QEa Fm+OAzpphoIHCUle1xyyLXdq2im5DcaDWVizRzyK7tPvingxhPVEbPv9Q xmZk3UOtEahjYTLmG9ao9LsS8vZ4ysfOWUj5N+VrrGxHRCsp8bLBGWQTP 9SSXQzw2UV/MGKKFxQ4MAg5Yf36WKzBl0IS3FfIQKgrwJW1S5RVzUFtIb doJWpHMmWUT5nC/wrfWrDYugb+K1KyVdpbxDfgEatH7QpR3LootVYOVLE w==; X-CSE-ConnectionGUID: 89DOXQceR2iiczdLWR+a7g== X-CSE-MsgGUID: olgMV74wSRWuyRbOb6+cjQ== X-IronPort-AV: E=Sophos;i="6.04,270,1695657600"; d="scan'208";a="4629788" Received: from uls-op-cesaip02.wdc.com (HELO uls-op-cesaep02.wdc.com) ([199.255.45.15]) by ob1.hgst.iphmx.com with ESMTP; 12 Dec 2023 20:38:17 +0800 IronPort-SDR: AmG5PtdcC1XRMmn4LP41gXKp7NBB8qUfOVV/XEhRLkyXSeXF+5AxK3QjfV/oW6hcy11Qazc4vO I8v/Xtbndh0A== Received: from uls-op-cesaip02.wdc.com ([10.248.3.37]) by uls-op-cesaep02.wdc.com with ESMTP/TLS/ECDHE-RSA-AES128-GCM-SHA256; 12 Dec 2023 03:43:30 -0800 IronPort-SDR: WH8nRobKMIPo/vxAN7+p3ZQVzg9jIb3Q7237p4t2hGYkt9qzsrF6aAtsa7Ml56sCqf5qqV/HWp +bjsBGj+MPag== WDCIronportException: Internal Received: from unknown (HELO redsun91.ssa.fujisawa.hgst.com) ([10.149.66.6]) by uls-op-cesaip02.wdc.com with ESMTP; 12 Dec 2023 04:38:16 -0800 From: Johannes Thumshirn Date: Tue, 12 Dec 2023 04:38:01 -0800 Subject: [PATCH 03/13] btrfs: factor out block-mapping for RAID0 MIME-Version: 1.0 Message-Id: <20231212-btrfs_map_block-cleanup-v1-3-b2d954d9a55b@wdc.com> References: <20231212-btrfs_map_block-cleanup-v1-0-b2d954d9a55b@wdc.com> In-Reply-To: <20231212-btrfs_map_block-cleanup-v1-0-b2d954d9a55b@wdc.com> To: Chris Mason , Josef Bacik , David Sterba Cc: linux-btrfs@vger.kernel.org, linux-kernel@vger.kernel.org, Johannes Thumshirn X-Mailer: b4 0.12.3 X-Developer-Signature: v=1; a=ed25519-sha256; t=1702384691; l=1575; i=johannes.thumshirn@wdc.com; s=20230613; h=from:subject:message-id; bh=WzAokk5ODdjvW4/f5P8YZlwWo7Vx235+0DogRPEc7kw=; b=/uz+vboQJqlbSQp3k+ds0ZfHHXV5k4xJ4As2oVMMjU3ZQ9l5n7fgGn5bPoK5+6++oONxXvg5o 5C58tm0DFHxDubj2hCz6XrGnqkUIT5seSpC14Q2Y6/u3lvoeq7ga/uv X-Developer-Key: i=johannes.thumshirn@wdc.com; a=ed25519; pk=TGmHKs78FdPi+QhrViEvjKIGwReUGCfa+3LEnGoR2KM= X-Spam-Status: No, score=-0.6 required=5.0 tests=DKIM_INVALID,DKIM_SIGNED, HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,SPF_HELO_NONE, SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on groat.vger.email Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (groat.vger.email [0.0.0.0]); Tue, 12 Dec 2023 04:38:31 -0800 (PST) X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1785079754378329612 X-GMAIL-MSGID: 1785079754378329612 Now that we have a container for the I/O geometry that has all the needed information for the block mappings of RAID0, factor out a helper calculating this information. Signed-off-by: Johannes Thumshirn --- fs/btrfs/volumes.c | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/fs/btrfs/volumes.c b/fs/btrfs/volumes.c index d0e529b3fd39..a5d85a77da25 100644 --- a/fs/btrfs/volumes.c +++ b/fs/btrfs/volumes.c @@ -6362,6 +6362,16 @@ static bool is_single_device_io(struct btrfs_fs_info *fs_info, return true; } +static void map_blocks_for_raid0(struct btrfs_chunk_map *map, + enum btrfs_map_op op, + struct btrfs_io_geometry *io_geom) +{ + io_geom->stripe_index = io_geom->stripe_nr % map->num_stripes; + io_geom->stripe_nr /= map->num_stripes; + if (op == BTRFS_MAP_READ) + io_geom->mirror_num = 1; +} + /* * Map one logical range to one or more physical ranges. * @@ -6447,10 +6457,7 @@ int btrfs_map_block(struct btrfs_fs_info *fs_info, enum btrfs_map_op op, io_geom.stripe_index = 0; io_geom.mirror_num = (mirror_num_ret ? *mirror_num_ret : 0); if (map->type & BTRFS_BLOCK_GROUP_RAID0) { - io_geom.stripe_index = io_geom.stripe_nr % map->num_stripes; - io_geom.stripe_nr /= map->num_stripes; - if (op == BTRFS_MAP_READ) - io_geom.mirror_num = 1; + map_blocks_for_raid0(map, op, &io_geom); } else if (map->type & BTRFS_BLOCK_GROUP_RAID1_MASK) { if (op != BTRFS_MAP_READ) { io_geom.num_stripes = map->num_stripes; From patchwork Tue Dec 12 12:38:02 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Johannes Thumshirn X-Patchwork-Id: 177319 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:bcd1:0:b0:403:3b70:6f57 with SMTP id r17csp7692233vqy; Tue, 12 Dec 2023 04:38:51 -0800 (PST) X-Google-Smtp-Source: AGHT+IF1ILcn3tTpvxToYExp98Kn2wbpewRrA9npuCA6jdj0NWllB8Exxx5NNYBee8nEIxGbf5aL X-Received: by 2002:a05:6a20:9694:b0:18f:fc47:5dec with SMTP id hp20-20020a056a20969400b0018ffc475decmr2705720pzc.31.1702384731079; Tue, 12 Dec 2023 04:38:51 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1702384731; cv=none; d=google.com; s=arc-20160816; b=Z63B7Q6dnBMoV8ljjDBzvsRbEmSN9rLQB9UOqd4c0sYRnku+W4WuGfSMoAqOFJcT6B cgMt6A5flKElbaV4gvd+JCp3NJSKp1EsMsRqSkdIpi/l4/3ePY6NPXhqn2nmfjUIlh4m BAw0ELrK9LB2kk/RDqUt7p0MovIKxTce7h5FV90H88CW617s8/TKfcxWlDWbL5UFqQsz KmRrHNNuFcZfT6Zgl02belkp8C07cuHfsGiCy584UcFpAYfZ4SHrDe/WIWXIn9rBvJTq 6AR+68yEcqvDKSKajZ7mUMaw4p4YYLIylePtNmKrRsB0ARc/Iyf/sb4q2gtrxz/sM6Vc g//w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:in-reply-to:references:message-id :content-transfer-encoding:mime-version:subject:date:from :wdcironportexception:ironport-sdr:ironport-sdr:dkim-signature; bh=io/z5Ojk+Q3EjCZKypz9+TgYcNDHU+3W0+WeIPAGPSk=; fh=RkzPy8j9Bgyvxc5aNhoOEUjthII6WQwvTfVAiEIVvUg=; b=SMQ7wvAbGIiORsddsmOBFou0Ds4o0f4SVWr4tsmp83pC/zLQylgamORo+w2my4nh54 OnFL5MIY0KxKZwJHIDZ4g6/4jjBabaSNFocnOjvZ2broppdlS74Jz624x/g1x0jPJXN1 0dmYNW6oTlBg/et+FIyvbDwlBDUCVOIKfscWHIgwVSUv8UwLxSPziBort/JnjHP8ioMb 9tbA3rgdQGw4kP6tS6IzN8CvMRJv+irQSHti8DGnm5AOl0nVAzfZVlN8/mEmJscvDPN2 GhtssRV0/MLMs/QlHTwCoVruGbtJOCBizBju+a9sd9RtsnQgHEGitRvL5S2kKHrzlSbo 2Z3g== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@wdc.com header.s=dkim.wdc.com header.b=llIIDe5i; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.38 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=wdc.com Received: from fry.vger.email (fry.vger.email. [23.128.96.38]) by mx.google.com with ESMTPS id p12-20020a170902e74c00b001cc33933e45si7943636plf.42.2023.12.12.04.38.50 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 12 Dec 2023 04:38:51 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.38 as permitted sender) client-ip=23.128.96.38; Authentication-Results: mx.google.com; dkim=fail header.i=@wdc.com header.s=dkim.wdc.com header.b=llIIDe5i; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.38 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=wdc.com Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by fry.vger.email (Postfix) with ESMTP id 4278580968A1; Tue, 12 Dec 2023 04:38:46 -0800 (PST) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.11 at fry.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1346588AbjLLMif (ORCPT + 99 others); Tue, 12 Dec 2023 07:38:35 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:53762 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1346645AbjLLMiW (ORCPT ); Tue, 12 Dec 2023 07:38:22 -0500 Received: from esa2.hgst.iphmx.com (esa2.hgst.iphmx.com [68.232.143.124]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 045BBF7; Tue, 12 Dec 2023 04:38:21 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=wdc.com; i=@wdc.com; q=dns/txt; s=dkim.wdc.com; t=1702384701; x=1733920701; h=from:date:subject:mime-version:content-transfer-encoding: message-id:references:in-reply-to:to:cc; bh=ebYL8Lh5wqUhbEP90Uoh61na4d5uGMM/U9hqcqH7K+Y=; b=llIIDe5iYhVc6CGXipW7lrSD0wsp+4eBaAF6cvBqv9J/T6cQivUXsl01 ZQjrf0/LQWT67gNoJ/WTNNy0tvVcfnTGF27hXj4WORI07uaqhH9NyEbBy ad7ChXXNuSN/x3dg1DOEFMWiEQD+IoawZmP94hHsG9fTs/6rtAQQtYe1y NFtoybuNP3LQjJMfPigcYgZo0cxtekKJK0AhwMZ08AMNWh6X6wrUIr9A1 nRnmUrcl3tvg8x/0oLe/xAecljc9FGeE0LEJwAFOr+BTuEc7xM+Y3zbfn 7akC9kFnMmemiR+Zt1JXwRN3gnZDALn0eURbFVZHNy3EBLRcM9KAOtLLg A==; X-CSE-ConnectionGUID: V4Y9g6jFSFOPS/tGQSNYmQ== X-CSE-MsgGUID: A6l7RrrfQ5ajfXSA0bNwew== X-IronPort-AV: E=Sophos;i="6.04,270,1695657600"; d="scan'208";a="4629789" Received: from uls-op-cesaip02.wdc.com (HELO uls-op-cesaep02.wdc.com) ([199.255.45.15]) by ob1.hgst.iphmx.com with ESMTP; 12 Dec 2023 20:38:18 +0800 IronPort-SDR: 5cgj/ywiWV1Xwx4jbZTECYaN6dHkn5CkPYWosv1NDLNiEfvi08dgPPeaQKoSUUtkjJChRfUPKD wAuVHpYSM1LQ== Received: from uls-op-cesaip02.wdc.com ([10.248.3.37]) by uls-op-cesaep02.wdc.com with ESMTP/TLS/ECDHE-RSA-AES128-GCM-SHA256; 12 Dec 2023 03:43:31 -0800 IronPort-SDR: caHHQ/Iaccr62S3pNOUgNTh8l3uYglaMj0x4HVxvGpZtXY+6837I9w98bidSfHIQscu4pe5hf5 yWya5NCITmMQ== WDCIronportException: Internal Received: from unknown (HELO redsun91.ssa.fujisawa.hgst.com) ([10.149.66.6]) by uls-op-cesaip02.wdc.com with ESMTP; 12 Dec 2023 04:38:17 -0800 From: Johannes Thumshirn Date: Tue, 12 Dec 2023 04:38:02 -0800 Subject: [PATCH 04/13] btrfs: factor out RAID1 block mapping MIME-Version: 1.0 Message-Id: <20231212-btrfs_map_block-cleanup-v1-4-b2d954d9a55b@wdc.com> References: <20231212-btrfs_map_block-cleanup-v1-0-b2d954d9a55b@wdc.com> In-Reply-To: <20231212-btrfs_map_block-cleanup-v1-0-b2d954d9a55b@wdc.com> To: Chris Mason , Josef Bacik , David Sterba Cc: linux-btrfs@vger.kernel.org, linux-kernel@vger.kernel.org, Johannes Thumshirn X-Mailer: b4 0.12.3 X-Developer-Signature: v=1; a=ed25519-sha256; t=1702384691; l=2028; i=johannes.thumshirn@wdc.com; s=20230613; h=from:subject:message-id; bh=ebYL8Lh5wqUhbEP90Uoh61na4d5uGMM/U9hqcqH7K+Y=; b=LM6TyK9cR63cC+HyWnjRomzXJyTGYo2mmltNAh+lgwQBnk7ytBOsp2hupb0maiwPSgQ6vPgjs 5QuN8YthKA/CNWcncr9R7cqJwsG5f2JH0K3BL1ve3bjqYFBPFWKNGrw X-Developer-Key: i=johannes.thumshirn@wdc.com; a=ed25519; pk=TGmHKs78FdPi+QhrViEvjKIGwReUGCfa+3LEnGoR2KM= X-Spam-Status: No, score=-0.6 required=5.0 tests=DKIM_INVALID,DKIM_SIGNED, HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,SPF_HELO_NONE, SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on fry.vger.email Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (fry.vger.email [0.0.0.0]); Tue, 12 Dec 2023 04:38:46 -0800 (PST) X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1785079771500940366 X-GMAIL-MSGID: 1785079771500940366 Now that we have a container for the I/O geometry that has all the needed information for the block mappings of RAID1, factor out a helper calculating this information. Signed-off-by: Johannes Thumshirn --- fs/btrfs/volumes.c | 31 +++++++++++++++++++++---------- 1 file changed, 21 insertions(+), 10 deletions(-) diff --git a/fs/btrfs/volumes.c b/fs/btrfs/volumes.c index a5d85a77da25..f6f1e783b3c1 100644 --- a/fs/btrfs/volumes.c +++ b/fs/btrfs/volumes.c @@ -6372,6 +6372,25 @@ static void map_blocks_for_raid0(struct btrfs_chunk_map *map, io_geom->mirror_num = 1; } +static void map_blocks_for_raid1(struct btrfs_fs_info *fs_info, + struct btrfs_chunk_map *map, + enum btrfs_map_op op, + struct btrfs_io_geometry *io_geom, int replace) +{ + if (op != BTRFS_MAP_READ) { + io_geom->num_stripes = map->num_stripes; + return; + } + + if (io_geom->mirror_num) { + io_geom->stripe_index = io_geom->mirror_num - 1; + return; + } + + io_geom->stripe_index = find_live_mirror(fs_info, map, 0, replace); + io_geom->mirror_num = io_geom->stripe_index + 1; +} + /* * Map one logical range to one or more physical ranges. * @@ -6459,16 +6478,8 @@ int btrfs_map_block(struct btrfs_fs_info *fs_info, enum btrfs_map_op op, if (map->type & BTRFS_BLOCK_GROUP_RAID0) { map_blocks_for_raid0(map, op, &io_geom); } else if (map->type & BTRFS_BLOCK_GROUP_RAID1_MASK) { - if (op != BTRFS_MAP_READ) { - io_geom.num_stripes = map->num_stripes; - } else if (io_geom.mirror_num) { - io_geom.stripe_index = io_geom.mirror_num - 1; - } else { - io_geom.stripe_index = find_live_mirror(fs_info, map, 0, - dev_replace_is_ongoing); - io_geom.mirror_num = io_geom.stripe_index + 1; - } - + map_blocks_for_raid1(fs_info, map, op, &io_geom, + dev_replace_is_ongoing); } else if (map->type & BTRFS_BLOCK_GROUP_DUP) { if (op != BTRFS_MAP_READ) { io_geom.num_stripes = map->num_stripes; From patchwork Tue Dec 12 12:38:03 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Johannes Thumshirn X-Patchwork-Id: 177320 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:bcd1:0:b0:403:3b70:6f57 with SMTP id r17csp7692276vqy; Tue, 12 Dec 2023 04:38:54 -0800 (PST) X-Google-Smtp-Source: AGHT+IEKGfA0KfwGDMMXDCQec3Q/El9Nv9FZ0EC9pQBjf0sAtlaGE9bmtTqfz7Y15DsCokyzKLxz X-Received: by 2002:a17:90a:8cd:b0:286:f166:679f with SMTP id 13-20020a17090a08cd00b00286f166679fmr2845750pjn.49.1702384734220; Tue, 12 Dec 2023 04:38:54 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1702384734; cv=none; d=google.com; s=arc-20160816; b=GTVzYkCzr7ockfeea+lcCi7LFtMGrcfRT7RYaYq+DcSj3yymfBjm/qThKClfYTjF7J 1CkgdDjsl3N8+5c64hIfqfcy7M5BdofkOcAbzzkfZwp5I0pylF9ZWWY8S4UyzL3uI+do JSxhtPm7kKdFVYeVz6QaJxtr/iFMUgFArRW2Oim4BSfBf8d9PomuqsJglVUwNiH2Fc8F xwqhZrnFcR0HnsiWBtJWucP8IGz1WPQYHaHBNHO+r3F54PZ8gYTIfZAUNNUs9293vRAZ pbIpEaXI5/fF9250Cxrjm/3Lk3ortndgJ/CprN5LB3Up/5n1HGW5tbsWVB/7g9jbEyMn 73sg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:in-reply-to:references:message-id :content-transfer-encoding:mime-version:subject:date:from :wdcironportexception:ironport-sdr:ironport-sdr:dkim-signature; bh=kHgs9psqnbPzByPbijVF53o6oEG56rtRENAn5nIVh14=; fh=RkzPy8j9Bgyvxc5aNhoOEUjthII6WQwvTfVAiEIVvUg=; b=DzHFcGCtoMc1XJh4VslBUCEVN79ahRTW4U5wwz0JFvio9Sh6HTASQW1fiixVlhjye/ fgG8LCHFFnbPzhofp6yAGmRAHyb+gZ5cqQiystSNm5sxwJ10XB7VWki7X1k/Ga5bOyve Zc787jJDzGBaNy5+Dgi6ohGlJowp3vfJLaGLknw7KS/cDGwDlenZkMTWd9fJwZq5DtaZ QZzHp+3wTp3x4klbCdR7QE3fejtFh+14hsKPP31IKCV7JifPdZ3k+bIZqLbZz2C6H5j5 CO010I5sp1cmqimCSeRg4UT/5OxIJyuasb+PO91eg/GOMXAwdd+Net1rDWivbWV3GWDH cW2Q== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@wdc.com header.s=dkim.wdc.com header.b=qpnHGXKd; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.33 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=wdc.com Received: from lipwig.vger.email (lipwig.vger.email. [23.128.96.33]) by mx.google.com with ESMTPS id mr22-20020a17090b239600b002864499ffe7si214579pjb.1.2023.12.12.04.38.53 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 12 Dec 2023 04:38:54 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.33 as permitted sender) client-ip=23.128.96.33; Authentication-Results: mx.google.com; dkim=fail header.i=@wdc.com header.s=dkim.wdc.com header.b=qpnHGXKd; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.33 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=wdc.com Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by lipwig.vger.email (Postfix) with ESMTP id 07A2B8051A22; Tue, 12 Dec 2023 04:38:51 -0800 (PST) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.11 at lipwig.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1346727AbjLLMij (ORCPT + 99 others); Tue, 12 Dec 2023 07:38:39 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:53774 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1346646AbjLLMiW (ORCPT ); Tue, 12 Dec 2023 07:38:22 -0500 Received: from esa2.hgst.iphmx.com (esa2.hgst.iphmx.com [68.232.143.124]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 69D8CFF; Tue, 12 Dec 2023 04:38:22 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=wdc.com; i=@wdc.com; q=dns/txt; s=dkim.wdc.com; t=1702384702; x=1733920702; h=from:date:subject:mime-version:content-transfer-encoding: message-id:references:in-reply-to:to:cc; bh=8tSsg77Jh959a0uxcl1WAe3mo/6FrLyJjMAFBfZRrMM=; b=qpnHGXKdLzhvCpccNO0ZT0TkjStE99sWyiGGBm6CWYCnMGzZRKQ2/QYu IoawUGvGK7LbBOVDGF2a7NOYS5uwb5XUN4KMAC79T48tKdwsfnt8h7go8 PEoN8fBAc74LLFDDpj39MnttmiIBWtzUkGgrFEZOgUlFvhwd2IsrQHuRY UL5KAxv1MsBjORhHNThGARcXDXH523ZR2Zk39lTVquyTGoXgdi5RyWmdp m8KkNw6uFlKW6ghvQUzgUP9GkG2YR5ruSRopKKJawxIOmGDqxhF4HsesU e47fOa9CKb+EiLtVYAFxSiYMYzdCHVwxAfNnqUB1QB7WEl+rFRaTkcYeo Q==; X-CSE-ConnectionGUID: +fJ9JpiQRUO/saY3erqFjg== X-CSE-MsgGUID: gDJS8AhiRnOVDxZfhomuGw== X-IronPort-AV: E=Sophos;i="6.04,270,1695657600"; d="scan'208";a="4629795" Received: from uls-op-cesaip02.wdc.com (HELO uls-op-cesaep02.wdc.com) ([199.255.45.15]) by ob1.hgst.iphmx.com with ESMTP; 12 Dec 2023 20:38:20 +0800 IronPort-SDR: O8vjKsrK2E1rtCUsHz872Qe5D5FukZVD00YqSvImHaVmCsRoeZLPzr52vvMFjOKfkSqe4o2XEb tRKhwaLCzaZg== Received: from uls-op-cesaip02.wdc.com ([10.248.3.37]) by uls-op-cesaep02.wdc.com with ESMTP/TLS/ECDHE-RSA-AES128-GCM-SHA256; 12 Dec 2023 03:43:33 -0800 IronPort-SDR: QjNMLaPjJ6RXcxrvEibP4i0X1/swpg9MR3SOFacbK7LRNRnAdj0Skwno5EeuwTF0redLPIJUfx Quku+SPSvTnw== WDCIronportException: Internal Received: from unknown (HELO redsun91.ssa.fujisawa.hgst.com) ([10.149.66.6]) by uls-op-cesaip02.wdc.com with ESMTP; 12 Dec 2023 04:38:18 -0800 From: Johannes Thumshirn Date: Tue, 12 Dec 2023 04:38:03 -0800 Subject: [PATCH 05/13] btrfs: factor out block mapping for DUP profiles MIME-Version: 1.0 Message-Id: <20231212-btrfs_map_block-cleanup-v1-5-b2d954d9a55b@wdc.com> References: <20231212-btrfs_map_block-cleanup-v1-0-b2d954d9a55b@wdc.com> In-Reply-To: <20231212-btrfs_map_block-cleanup-v1-0-b2d954d9a55b@wdc.com> To: Chris Mason , Josef Bacik , David Sterba Cc: linux-btrfs@vger.kernel.org, linux-kernel@vger.kernel.org, Johannes Thumshirn X-Mailer: b4 0.12.3 X-Developer-Signature: v=1; a=ed25519-sha256; t=1702384691; l=1714; i=johannes.thumshirn@wdc.com; s=20230613; h=from:subject:message-id; bh=8tSsg77Jh959a0uxcl1WAe3mo/6FrLyJjMAFBfZRrMM=; b=ARMrZTeHJQxstKrYpJ23CIAMX+dVKyPyZHzUPoWeD+Q73R5MetKwQKEkmJgxRP9IFb+oMVvUx DXVswOoPs5eD1Fx44sB2Wm00gdXokfMydHgYVc5Xna5c3fr8oWZIU+e X-Developer-Key: i=johannes.thumshirn@wdc.com; a=ed25519; pk=TGmHKs78FdPi+QhrViEvjKIGwReUGCfa+3LEnGoR2KM= X-Spam-Status: No, score=-0.6 required=5.0 tests=DKIM_INVALID,DKIM_SIGNED, HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,SPF_HELO_NONE, SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lipwig.vger.email Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (lipwig.vger.email [0.0.0.0]); Tue, 12 Dec 2023 04:38:51 -0800 (PST) X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1785079774602392502 X-GMAIL-MSGID: 1785079774602392502 Now that we have a container for the I/O geometry that has all the needed information for the block mappings of DUP, factor out a helper calculating this information. Signed-off-by: Johannes Thumshirn --- fs/btrfs/volumes.c | 26 ++++++++++++++++++-------- 1 file changed, 18 insertions(+), 8 deletions(-) diff --git a/fs/btrfs/volumes.c b/fs/btrfs/volumes.c index f6f1e783b3c1..b0a5c53fba51 100644 --- a/fs/btrfs/volumes.c +++ b/fs/btrfs/volumes.c @@ -6391,6 +6391,23 @@ static void map_blocks_for_raid1(struct btrfs_fs_info *fs_info, io_geom->mirror_num = io_geom->stripe_index + 1; } +static void map_blocks_for_dup(struct btrfs_chunk_map *map, + enum btrfs_map_op op, + struct btrfs_io_geometry *io_geom) +{ + if (op != BTRFS_MAP_READ) { + io_geom->num_stripes = map->num_stripes; + return; + } + + if (io_geom->mirror_num) { + io_geom->stripe_index = io_geom->mirror_num - 1; + return; + } + + io_geom->mirror_num = 1; +} + /* * Map one logical range to one or more physical ranges. * @@ -6481,14 +6498,7 @@ int btrfs_map_block(struct btrfs_fs_info *fs_info, enum btrfs_map_op op, map_blocks_for_raid1(fs_info, map, op, &io_geom, dev_replace_is_ongoing); } else if (map->type & BTRFS_BLOCK_GROUP_DUP) { - if (op != BTRFS_MAP_READ) { - io_geom.num_stripes = map->num_stripes; - } else if (io_geom.mirror_num) { - io_geom.stripe_index = io_geom.mirror_num - 1; - } else { - io_geom.mirror_num = 1; - } - + map_blocks_for_dup(map, op, &io_geom); } else if (map->type & BTRFS_BLOCK_GROUP_RAID10) { u32 factor = map->num_stripes / map->sub_stripes; From patchwork Tue Dec 12 12:38:04 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Johannes Thumshirn X-Patchwork-Id: 177321 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:bcd1:0:b0:403:3b70:6f57 with SMTP id r17csp7692326vqy; Tue, 12 Dec 2023 04:38:59 -0800 (PST) X-Google-Smtp-Source: AGHT+IEvkcLBDhaigYXNuQoSNRTYj5XV0eTWGbBl22oxguwCLA73EUtBruqljQhL5CBu9I/e5VuJ X-Received: by 2002:a17:90a:6589:b0:286:a687:48d8 with SMTP id k9-20020a17090a658900b00286a68748d8mr2321893pjj.6.1702384739655; Tue, 12 Dec 2023 04:38:59 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1702384739; cv=none; d=google.com; s=arc-20160816; b=0YdSqOh2eKZ1HeI14LVu5mFfMo41ezb0esdsogq22noo5JUMYmKfw/AvNvqoOAP8Ob IQBby0nPEy+XyA2cRiKsgdIyaqaL7MOBGxKz54XP9HzpPQHA8I8kOuGOYj0zayPbxEMR wDpnQw63319iL3ZpO6ohQVg7vMXH9qHS1etSltol6Jgs27ZcYjqL+NcRfNTg8bHkCqrV 3OoEUEBJqLahY+0fosTB2d8Ja+EOBV5fInXV5BQ4EzvAF7Kid+OECt0VpMXuQ1ne6eGI FczaPMacKQCa0X+GDBVMoH1uIUW3HeGo+4G9n/4RY0c+kJU8UtZuAEc8wNoQMR3kR0Ei IqUQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:in-reply-to:references:message-id :content-transfer-encoding:mime-version:subject:date:from :wdcironportexception:ironport-sdr:ironport-sdr:dkim-signature; bh=EaC9+PC/i7VvwE2Km3ZC8U85Jen7VrBxt87prOUmyNo=; fh=RkzPy8j9Bgyvxc5aNhoOEUjthII6WQwvTfVAiEIVvUg=; b=BahwJdqQo2zYIeLfKJXvxDJc2IVh8AJfVbbW2E812EwGXzkfSnABImSTsFJGpn6qGY vPY5xFHSplEao473aCH7jRnoVXXtHaM0D6Rq6TybWepcPdiBbOcIxWrDAY/FVLmKmLyr S8TkLWx9xk+sJ0ZK7F7pW0tEdzmCXcSiU1RikJyfQMYYqCzauxGI/KWYhBjQpoaRDu5O KgErpiv2RJgK5zjhQFfbH+NQ3PLTyVHgIcPKlE0OPM6WDi1JohKe15NHyKvSy6xA59Tl kyL+hPXmQduvazPhDmv2B2zp269stsfrHybsLj6A4lc5hX23jo9hX9zRn7Av6xYQAalr zfXg== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@wdc.com header.s=dkim.wdc.com header.b="k/PoXMnJ"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.33 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=wdc.com Received: from lipwig.vger.email (lipwig.vger.email. [23.128.96.33]) by mx.google.com with ESMTPS id bj22-20020a17090b089600b0028ad3c73e67si65206pjb.102.2023.12.12.04.38.59 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 12 Dec 2023 04:38:59 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.33 as permitted sender) client-ip=23.128.96.33; Authentication-Results: mx.google.com; dkim=fail header.i=@wdc.com header.s=dkim.wdc.com header.b="k/PoXMnJ"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.33 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=wdc.com Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by lipwig.vger.email (Postfix) with ESMTP id 354ED809E20D; Tue, 12 Dec 2023 04:38:57 -0800 (PST) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.11 at lipwig.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1346735AbjLLMin (ORCPT + 99 others); Tue, 12 Dec 2023 07:38:43 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:43650 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1346674AbjLLMi1 (ORCPT ); Tue, 12 Dec 2023 07:38:27 -0500 Received: from esa2.hgst.iphmx.com (esa2.hgst.iphmx.com [68.232.143.124]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id B4A92FD; Tue, 12 Dec 2023 04:38:23 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=wdc.com; i=@wdc.com; q=dns/txt; s=dkim.wdc.com; t=1702384703; x=1733920703; h=from:date:subject:mime-version:content-transfer-encoding: message-id:references:in-reply-to:to:cc; bh=lXJp7Vki0//VmgCnvQn6BIvzp7MNt5URtbIDUaZNqA8=; b=k/PoXMnJEPt14NaJLdJka9Q5/mrcVvnCfg8Uky2u5yIfa0L6C3e3vRTW kHL49jDPt2EvPohCYwLW+vfnyKMuTD5DiGdhWNRRInLMuxAsKdIX0+pAy 3yAw7mTI0dA1ccOb2GuHiJnV3irMem0pBJkbOs08sTZR2YoyELzpqGUcw aw3JWf7v0QzVd77w4VBGeRIVe730Vy1EyLeoqvolcdNEzCp2UTP6eRixZ eBMsETqHtUS1JQfDBcfFr4NhY+hTt9lWnDj5Zt+XyGX2mU2J+xWV3y9Nv 4ZQYWyeBWOwbQ+3HVDJlAL2t1kiSZJyYaUdYNKIBuT8ewmCmcJEpzQwwR g==; X-CSE-ConnectionGUID: daMNu9RUSHO9LoTO8c8C8A== X-CSE-MsgGUID: 6DIaMXuuT7Smg3fvFVgwMQ== X-IronPort-AV: E=Sophos;i="6.04,270,1695657600"; d="scan'208";a="4629798" Received: from uls-op-cesaip02.wdc.com (HELO uls-op-cesaep02.wdc.com) ([199.255.45.15]) by ob1.hgst.iphmx.com with ESMTP; 12 Dec 2023 20:38:21 +0800 IronPort-SDR: wCyq9dJo0BJXILY179PkoUmorCzlwyiDBdNw/9YAT/U7sWKLr7PEg0MwxG1S+fhlOae0jeROwE CDZ5xJngEXHQ== Received: from uls-op-cesaip02.wdc.com ([10.248.3.37]) by uls-op-cesaep02.wdc.com with ESMTP/TLS/ECDHE-RSA-AES128-GCM-SHA256; 12 Dec 2023 03:43:34 -0800 IronPort-SDR: /h257Fekxf+NXY9HO8WkSWfXGX6nO92JgHLxMDvw5r8Xc1jottiO/IJr73IAlR2TiJmZSSMCqc +kPftaDVG9Ew== WDCIronportException: Internal Received: from unknown (HELO redsun91.ssa.fujisawa.hgst.com) ([10.149.66.6]) by uls-op-cesaip02.wdc.com with ESMTP; 12 Dec 2023 04:38:20 -0800 From: Johannes Thumshirn Date: Tue, 12 Dec 2023 04:38:04 -0800 Subject: [PATCH 06/13] btrfs: factor out block mapping for RAID10 MIME-Version: 1.0 Message-Id: <20231212-btrfs_map_block-cleanup-v1-6-b2d954d9a55b@wdc.com> References: <20231212-btrfs_map_block-cleanup-v1-0-b2d954d9a55b@wdc.com> In-Reply-To: <20231212-btrfs_map_block-cleanup-v1-0-b2d954d9a55b@wdc.com> To: Chris Mason , Josef Bacik , David Sterba Cc: linux-btrfs@vger.kernel.org, linux-kernel@vger.kernel.org, Johannes Thumshirn X-Mailer: b4 0.12.3 X-Developer-Signature: v=1; a=ed25519-sha256; t=1702384691; l=2605; i=johannes.thumshirn@wdc.com; s=20230613; h=from:subject:message-id; bh=lXJp7Vki0//VmgCnvQn6BIvzp7MNt5URtbIDUaZNqA8=; b=d8m+QckEF6cYQbcvWsipkYLVoLwlaSreKemUA+fZRMjVs7GRVPDazRslJqnJFWPgSoYlrbnUM 87c5xvQ4hTFDUpyasUNrv+D3J/gffiOBSoS2DC+MlOpoCfsAGWstxTv X-Developer-Key: i=johannes.thumshirn@wdc.com; a=ed25519; pk=TGmHKs78FdPi+QhrViEvjKIGwReUGCfa+3LEnGoR2KM= X-Spam-Status: No, score=-0.6 required=5.0 tests=DKIM_INVALID,DKIM_SIGNED, HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,SPF_HELO_NONE, SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lipwig.vger.email Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (lipwig.vger.email [0.0.0.0]); Tue, 12 Dec 2023 04:38:57 -0800 (PST) X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1785079780753664525 X-GMAIL-MSGID: 1785079780753664525 Now that we have a container for the I/O geometry that has all the needed information for the block mappings of RAID10, factor out a helper calculating this information. Signed-off-by: Johannes Thumshirn --- fs/btrfs/volumes.c | 48 +++++++++++++++++++++++++++++++----------------- 1 file changed, 31 insertions(+), 17 deletions(-) diff --git a/fs/btrfs/volumes.c b/fs/btrfs/volumes.c index b0a5c53fba51..9090bfc4fe38 100644 --- a/fs/btrfs/volumes.c +++ b/fs/btrfs/volumes.c @@ -6408,6 +6408,35 @@ static void map_blocks_for_dup(struct btrfs_chunk_map *map, io_geom->mirror_num = 1; } +static void map_blocks_for_raid10(struct btrfs_fs_info *fs_info, + struct btrfs_chunk_map *map, + enum btrfs_map_op op, + struct btrfs_io_geometry *io_geom, + int replace) +{ + u32 factor = map->num_stripes / map->sub_stripes; + int old_stripe_index; + + io_geom->stripe_index = + (io_geom->stripe_nr % factor) * map->sub_stripes; + io_geom->stripe_nr /= factor; + + if (op != BTRFS_MAP_READ) { + io_geom->num_stripes = map->sub_stripes; + return; + } + + if (io_geom->mirror_num) { + io_geom->stripe_index += io_geom->mirror_num - 1; + return; + } + + old_stripe_index = io_geom->stripe_index; + io_geom->stripe_index = + find_live_mirror(fs_info, map, io_geom->stripe_index, replace); + io_geom->mirror_num = io_geom->stripe_index - old_stripe_index + 1; +} + /* * Map one logical range to one or more physical ranges. * @@ -6500,23 +6529,8 @@ int btrfs_map_block(struct btrfs_fs_info *fs_info, enum btrfs_map_op op, } else if (map->type & BTRFS_BLOCK_GROUP_DUP) { map_blocks_for_dup(map, op, &io_geom); } else if (map->type & BTRFS_BLOCK_GROUP_RAID10) { - u32 factor = map->num_stripes / map->sub_stripes; - - io_geom.stripe_index = (io_geom.stripe_nr % factor) * map->sub_stripes; - io_geom.stripe_nr /= factor; - - if (op != BTRFS_MAP_READ) - io_geom.num_stripes = map->sub_stripes; - else if (io_geom.mirror_num) - io_geom.stripe_index += io_geom.mirror_num - 1; - else { - int old_stripe_index = io_geom.stripe_index; - io_geom.stripe_index = find_live_mirror(fs_info, map, - io_geom.stripe_index, - dev_replace_is_ongoing); - io_geom.mirror_num = io_geom.stripe_index - old_stripe_index + 1; - } - + map_blocks_for_raid10(fs_info, map, op, &io_geom, + dev_replace_is_ongoing); } else if (map->type & BTRFS_BLOCK_GROUP_RAID56_MASK) { if (op != BTRFS_MAP_READ || io_geom.mirror_num > 1) { /* From patchwork Tue Dec 12 12:38:05 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Johannes Thumshirn X-Patchwork-Id: 177322 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:bcd1:0:b0:403:3b70:6f57 with SMTP id r17csp7692345vqy; Tue, 12 Dec 2023 04:39:02 -0800 (PST) X-Google-Smtp-Source: AGHT+IHezZLcSmVExExLqmjWXtNtNwfSQbR8l125i+8CTpwzEZ1L25+cX3Hcfio6jT5A+98aENOW X-Received: by 2002:a05:6a00:4804:b0:6ce:f69f:7055 with SMTP id di4-20020a056a00480400b006cef69f7055mr3677524pfb.17.1702384741811; Tue, 12 Dec 2023 04:39:01 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1702384741; cv=none; d=google.com; s=arc-20160816; b=BaDaODnFHqBh0XZ1BhpT0m+T3rw85T+cMQnUXOCmPvd5+r7nx2spvrWFXl9xJvipB5 fiXdIKOVUkmXhM3noDiVkjZRobWjAYWrWikUBYeVIareeN9mR06A0cSz3k53eOozJ3Zb KSDEO/BwigVUpypFaDo4rnY5T4U6Z5EWtyfYIEYpZVcTavsNX2t6mU0oFRW47t5tfmw5 E6CwwyVciUlq1T9yyUvW6QF9roBNQ3cl8/epRX76F+EnViI1GRAxpCQL3HOY0zZRmybu h8kZkziZn78MsS37FNA38rNBJGOYgXHPuBXdIn2L/5zdnCa3AxFVRt+Io/jtat7k3iL6 vZoA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:in-reply-to:references:message-id :content-transfer-encoding:mime-version:subject:date:from :wdcironportexception:ironport-sdr:ironport-sdr:dkim-signature; bh=zhndQ7UkmHAI3b1yg4vTh8g51M+BmVZd8BrEx5WKy58=; fh=RkzPy8j9Bgyvxc5aNhoOEUjthII6WQwvTfVAiEIVvUg=; b=ZxHmQIIdC/g46EJLUVKX7mpjjJmN5p3YXIG5O1fYw/EfFAsqAHDZKIiV72VyyNqSbW 4ugz1Lr5b1+2J1cebTQ8hJsTQ79gP+Mt0dEDz7oFrDe4+yNkaNZCG4G2PSUJ7Q7s/cwW ZTaQOmwP5GVTne60LDax7agZSTg9BavD8/w5NMRJf2hSKWME4o572zO0k7PwskYK+leF V2m23/XjqmfFezhsl0hZkjk3w0HAPulTju5YwdoeUUh9ehtaj6eblhAqP/s5fA9+E6Yf 0KkQcbWuuNMb8kR9DiYjNnd9FWxnd62U0zTk9qMqQJaEWJirGtEC0IdKXIMSLsWwVbBt lvcA== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@wdc.com header.s=dkim.wdc.com header.b="K/Yb0BNO"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:6 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=wdc.com Received: from pete.vger.email (pete.vger.email. [2620:137:e000::3:6]) by mx.google.com with ESMTPS id ay18-20020a056a00301200b006cdf615b690si7934886pfb.149.2023.12.12.04.39.01 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 12 Dec 2023 04:39:01 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:6 as permitted sender) client-ip=2620:137:e000::3:6; Authentication-Results: mx.google.com; dkim=fail header.i=@wdc.com header.s=dkim.wdc.com header.b="K/Yb0BNO"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:6 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=wdc.com Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by pete.vger.email (Postfix) with ESMTP id B503F80D0C69; Tue, 12 Dec 2023 04:38:58 -0800 (PST) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.11 at pete.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1346751AbjLLMiu (ORCPT + 99 others); Tue, 12 Dec 2023 07:38:50 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:38932 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1346673AbjLLMif (ORCPT ); Tue, 12 Dec 2023 07:38:35 -0500 Received: from esa2.hgst.iphmx.com (esa2.hgst.iphmx.com [68.232.143.124]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 7F18D18C; Tue, 12 Dec 2023 04:38:30 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=wdc.com; i=@wdc.com; q=dns/txt; s=dkim.wdc.com; t=1702384710; x=1733920710; h=from:date:subject:mime-version:content-transfer-encoding: message-id:references:in-reply-to:to:cc; bh=7IitFGc7/IJjyGbmbRVykpWQDNZ+Fz3j+hjcbSopc1E=; b=K/Yb0BNOsoES05ZFwy5REND1r1cIX9RQdVEIG9LTijrgsXON2l04Z1lQ TfNtO5+L7h5KB6bd7H65ckdAO5mzwuoAzZaFPpIkhLwEwyxTwPaok1Ork Urmh9V86MlwWFkK4kxGG5jusJWn4WYBx1s3d0cOnkmjFhVjQ43QzVxPTn 1AZJ/rnkW0hP2K85p3lrjl9W+GDdomTJQIBweWLZFuTrWAe9dnn1SuZMT 2PFcxQi9RDICzAI2D+pZbY0sXZUbFVmdJK9UIB+E3bFF6kbPEVv8zkCE/ qKzs6MZvuhpv8y1I4lTb7Y9hX9pP4VJt9xDSj9SSE/mwt/lAdKhrfK/LM Q==; X-CSE-ConnectionGUID: pD/fV8xhRcexNxFDJ//omg== X-CSE-MsgGUID: kRCA0+rwTeq+zgKt6hj8XA== X-IronPort-AV: E=Sophos;i="6.04,270,1695657600"; d="scan'208";a="4629799" Received: from uls-op-cesaip02.wdc.com (HELO uls-op-cesaep02.wdc.com) ([199.255.45.15]) by ob1.hgst.iphmx.com with ESMTP; 12 Dec 2023 20:38:22 +0800 IronPort-SDR: R4NX11529yF01cq9XPPIhIyS2B7QsnjTifd/BKHds/GrkRATpWcmFwY/hURfE8oYNZiO6jb++j kD/zgcJI1pdg== Received: from uls-op-cesaip02.wdc.com ([10.248.3.37]) by uls-op-cesaep02.wdc.com with ESMTP/TLS/ECDHE-RSA-AES128-GCM-SHA256; 12 Dec 2023 03:43:36 -0800 IronPort-SDR: 8J6ZDf1DDploJw+gY5lkK5JekK+E157uSfQee0KdypWrWGmB74LaZBDHO0y6h4YPSaEP7JcZ5L 4oUfsuBCHBZg== WDCIronportException: Internal Received: from unknown (HELO redsun91.ssa.fujisawa.hgst.com) ([10.149.66.6]) by uls-op-cesaip02.wdc.com with ESMTP; 12 Dec 2023 04:38:21 -0800 From: Johannes Thumshirn Date: Tue, 12 Dec 2023 04:38:05 -0800 Subject: [PATCH 07/13] btrfs: reduce scope of data_stripes in btrfs_map_block MIME-Version: 1.0 Message-Id: <20231212-btrfs_map_block-cleanup-v1-7-b2d954d9a55b@wdc.com> References: <20231212-btrfs_map_block-cleanup-v1-0-b2d954d9a55b@wdc.com> In-Reply-To: <20231212-btrfs_map_block-cleanup-v1-0-b2d954d9a55b@wdc.com> To: Chris Mason , Josef Bacik , David Sterba Cc: linux-btrfs@vger.kernel.org, linux-kernel@vger.kernel.org, Johannes Thumshirn X-Mailer: b4 0.12.3 X-Developer-Signature: v=1; a=ed25519-sha256; t=1702384691; l=1989; i=johannes.thumshirn@wdc.com; s=20230613; h=from:subject:message-id; bh=7IitFGc7/IJjyGbmbRVykpWQDNZ+Fz3j+hjcbSopc1E=; b=m4KZIBJGlht6nE4zqHrrx7BstIG8G4cLN/crwdkYixYRslsvpO2Vc38LmvGL3ofu+E3yGlXJQ 06Jf6iwdjM6C2PklkZji0KGEd7Oih8sPYImBrGyVe0epBCfvmyAOGPr X-Developer-Key: i=johannes.thumshirn@wdc.com; a=ed25519; pk=TGmHKs78FdPi+QhrViEvjKIGwReUGCfa+3LEnGoR2KM= X-Spam-Status: No, score=-0.6 required=5.0 tests=DKIM_INVALID,DKIM_SIGNED, HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,SPF_HELO_NONE, SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on pete.vger.email Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (pete.vger.email [0.0.0.0]); Tue, 12 Dec 2023 04:38:59 -0800 (PST) X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1785079782735867346 X-GMAIL-MSGID: 1785079782735867346 Reduce the scope of 'data_stripes' in btrfs_map_block(). While the change allone doesn't make too much sense, it helps us factoring out a helper function for the block mapping of RAID56 I/O. Signed-off-by: Johannes Thumshirn --- fs/btrfs/volumes.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/fs/btrfs/volumes.c b/fs/btrfs/volumes.c index 9090bfc4fe38..bc0988d8bd56 100644 --- a/fs/btrfs/volumes.c +++ b/fs/btrfs/volumes.c @@ -6480,7 +6480,6 @@ int btrfs_map_block(struct btrfs_fs_info *fs_info, enum btrfs_map_op op, struct btrfs_chunk_map *map; struct btrfs_io_geometry io_geom = { }; u64 map_offset; - int data_stripes; int i; int ret = 0; int num_copies; @@ -6500,8 +6499,6 @@ int btrfs_map_block(struct btrfs_fs_info *fs_info, enum btrfs_map_op op, if (IS_ERR(map)) return PTR_ERR(map); - data_stripes = nr_data_stripes(map); - map_offset = logical - map->start; io_geom.raid56_full_stripe_start = (u64)-1; max_len = btrfs_max_io_len(map, op, map_offset, &io_geom.stripe_nr, @@ -6532,6 +6529,8 @@ int btrfs_map_block(struct btrfs_fs_info *fs_info, enum btrfs_map_op op, map_blocks_for_raid10(fs_info, map, op, &io_geom, dev_replace_is_ongoing); } else if (map->type & BTRFS_BLOCK_GROUP_RAID56_MASK) { + int data_stripes = nr_data_stripes(map); + if (op != BTRFS_MAP_READ || io_geom.mirror_num > 1) { /* * Needs full stripe mapping. @@ -6643,7 +6642,8 @@ int btrfs_map_block(struct btrfs_fs_info *fs_info, enum btrfs_map_op op, * modulo, to reduce one modulo call. */ bioc->full_stripe_logical = map->start + - btrfs_stripe_nr_to_offset(io_geom.stripe_nr * data_stripes); + btrfs_stripe_nr_to_offset(io_geom.stripe_nr * + nr_data_stripes(map)); for (int i = 0; i < io_geom.num_stripes; i++) { ret = set_io_stripe(fs_info, op, logical, length, &bioc->stripes[i], map, From patchwork Tue Dec 12 12:38:06 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Johannes Thumshirn X-Patchwork-Id: 177323 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:bcd1:0:b0:403:3b70:6f57 with SMTP id r17csp7692427vqy; Tue, 12 Dec 2023 04:39:10 -0800 (PST) X-Google-Smtp-Source: AGHT+IHo1SsKdl3+sTWzaF96rKLfcB7mYOyFSdsGmH72l7cXXaWJXZqL9AWlKHjU9g0rZ2RomD0e X-Received: by 2002:a17:902:d2cc:b0:1d0:6ffd:9dff with SMTP id n12-20020a170902d2cc00b001d06ffd9dffmr6777028plc.81.1702384750600; Tue, 12 Dec 2023 04:39:10 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1702384750; cv=none; d=google.com; s=arc-20160816; b=TwG/EcouHX63bHgttlNUCOZMDIYVQPlBI4N2B6Swcl4/pg2NDAQHzSPTrYI/sAoACj gCfZHXLi/K6p8slSGjOHTPk1G6EDgBpUoMdarjOq+G/fuhYmSj3NZC4Rj8ZlafQau8UV 23Rm5BrUMbFch5rxvPB/TFfdi3TAUzb7/LxD56mP5sxHEZBE1EjKp5Djk1bdznQ8zhyM OVU5fSbfO0rEMXkiRKN9ythA9yZIWtuc0OSNOEW63XUuG/U6Dn346j5WVQPVDVX6sFfJ AQoo0enSayoPDMFrWqi1d39MNPCCzzpE8vvSMTmv6Lz+aUQwmv4tY1seK83MMwbGTNrx tzdQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:in-reply-to:references:message-id :content-transfer-encoding:mime-version:subject:date:from :wdcironportexception:ironport-sdr:ironport-sdr:dkim-signature; bh=Z0Ubgf4/rbeUlp2cdmZlS9wZsMfcIC1jUg3wTx7zLio=; fh=RkzPy8j9Bgyvxc5aNhoOEUjthII6WQwvTfVAiEIVvUg=; b=KWBXwcoYagQC3Wg/u96r2+hF7qPpI3iqnPzDptRYrPJIjPtTHJH3jQ7ykRCs2A/mwk kVXwgTXd7mWCPwS7EQg7oCmrN8Q5G7G2IXjvq/j0Pu0PxQ0ouGoxEjCu9v+ElKk5WT1w M+yZ0V20GHTaKoYPhIcBnaVb377v5L56Fsn3DMKnc6y/S9SogwmaJLulbdaBN7AIfMIo ia2uMjtGo/dI3mpdcy982XsNHWCvLEjKBlbK95dAJlIP2XL1yJLxfUIUMm1KAUvNFYec r0rC7QZdZ2WtIBEZjwhvu+BqPzgQwdR2M3hh2M54uxSfaEjq5mtBL9Var0D6PZLdSTCZ nO7w== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@wdc.com header.s=dkim.wdc.com header.b=E0mtm3OD; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:3 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=wdc.com Received: from lipwig.vger.email (lipwig.vger.email. [2620:137:e000::3:3]) by mx.google.com with ESMTPS id x2-20020a170902ea8200b001d0be32b0d1si7572118plb.386.2023.12.12.04.39.10 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 12 Dec 2023 04:39:10 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:3 as permitted sender) client-ip=2620:137:e000::3:3; Authentication-Results: mx.google.com; dkim=fail header.i=@wdc.com header.s=dkim.wdc.com header.b=E0mtm3OD; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:3 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=wdc.com Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by lipwig.vger.email (Postfix) with ESMTP id DFD4880545B3; Tue, 12 Dec 2023 04:39:07 -0800 (PST) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.11 at lipwig.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1346703AbjLLMiw (ORCPT + 99 others); Tue, 12 Dec 2023 07:38:52 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:43570 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1346542AbjLLMig (ORCPT ); Tue, 12 Dec 2023 07:38:36 -0500 Received: from esa2.hgst.iphmx.com (esa2.hgst.iphmx.com [68.232.143.124]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 7DD2518A; Tue, 12 Dec 2023 04:38:30 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=wdc.com; i=@wdc.com; q=dns/txt; s=dkim.wdc.com; t=1702384710; x=1733920710; h=from:date:subject:mime-version:content-transfer-encoding: message-id:references:in-reply-to:to:cc; bh=13sSKOdPGCtJkfDz7HQPJxztkCHKHtWtxlS4sYRz4H4=; b=E0mtm3ODGYYYMV8YUegryncaZoWzS4o6t4v9LxRadScZkpdqSjm9x6cg vA1Ek6wO6BCYWJaMRdj3zw2zUeOAo5yUNoSM9ViHXZxrZp0TV0MgG6SrU S3vH4NUVqs0MGgnjC72v3suCpa333uqDt10FpYD1eaSODZl69OliJ7Ca3 b6wyN1a3zkDfb8jXsPpdWZ1U4OKoL/da69PV8E/4GOlpcSK7DlezAsORT 7/RCgbAAShhVdYLT6xVKCMeZt0jfh+bUEM3ry7xUrQFNoPrpzL1Tz6S9Z sBVKZB24NFoEH2y94qaxTXl+t2Ehbn3LIStRgE2SNSxU+xmqT0HLZVLgj g==; X-CSE-ConnectionGUID: va5vw7GKTH2FBlFviEvl2g== X-CSE-MsgGUID: 7MRTnW96QaS6F8qfMtdagA== X-IronPort-AV: E=Sophos;i="6.04,270,1695657600"; d="scan'208";a="4629800" Received: from uls-op-cesaip02.wdc.com (HELO uls-op-cesaep02.wdc.com) ([199.255.45.15]) by ob1.hgst.iphmx.com with ESMTP; 12 Dec 2023 20:38:24 +0800 IronPort-SDR: j0J/dG2cgKpx4DcpuqCRoR9U3+qv9Iyxt69e4py1qaKKfCOEgTOOhEErPFzooqtcZVCEgU/gs9 xt3mSFH/xcyQ== Received: from uls-op-cesaip02.wdc.com ([10.248.3.37]) by uls-op-cesaep02.wdc.com with ESMTP/TLS/ECDHE-RSA-AES128-GCM-SHA256; 12 Dec 2023 03:43:37 -0800 IronPort-SDR: 5scbsRwiXUxhNm5LGPAxCPN18+mYWq7ksdwM55JYQOAmA9fXPdGQOgKwRqgDip5/vxloYNCMhF ETdj34Q+m/kw== WDCIronportException: Internal Received: from unknown (HELO redsun91.ssa.fujisawa.hgst.com) ([10.149.66.6]) by uls-op-cesaip02.wdc.com with ESMTP; 12 Dec 2023 04:38:23 -0800 From: Johannes Thumshirn Date: Tue, 12 Dec 2023 04:38:06 -0800 Subject: [PATCH 08/13] btrfs: factor out block mapping for RAID5/6 MIME-Version: 1.0 Message-Id: <20231212-btrfs_map_block-cleanup-v1-8-b2d954d9a55b@wdc.com> References: <20231212-btrfs_map_block-cleanup-v1-0-b2d954d9a55b@wdc.com> In-Reply-To: <20231212-btrfs_map_block-cleanup-v1-0-b2d954d9a55b@wdc.com> To: Chris Mason , Josef Bacik , David Sterba Cc: linux-btrfs@vger.kernel.org, linux-kernel@vger.kernel.org, Johannes Thumshirn X-Mailer: b4 0.12.3 X-Developer-Signature: v=1; a=ed25519-sha256; t=1702384691; l=4237; i=johannes.thumshirn@wdc.com; s=20230613; h=from:subject:message-id; bh=13sSKOdPGCtJkfDz7HQPJxztkCHKHtWtxlS4sYRz4H4=; b=TDOS5Lt38tJFregGC9nNL23Jv/PCsz8I1IJK3qjSuXJmjp4sHbxkXD8Qf6U/zluSNhuTSShXE g170bvYfm06B9G05ZhEWK0oilO0BXLCZROYDmNQO0fnNI4awFm6dmCK X-Developer-Key: i=johannes.thumshirn@wdc.com; a=ed25519; pk=TGmHKs78FdPi+QhrViEvjKIGwReUGCfa+3LEnGoR2KM= X-Spam-Status: No, score=-0.6 required=5.0 tests=DKIM_INVALID,DKIM_SIGNED, HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,SPF_HELO_NONE, SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lipwig.vger.email Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (lipwig.vger.email [0.0.0.0]); Tue, 12 Dec 2023 04:39:08 -0800 (PST) X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1785079792175423489 X-GMAIL-MSGID: 1785079792175423489 Now that we have a container for the I/O geometry that has all the needed information for the block mappings of RAID5 and RAID6, factor out a helper calculating this information. Signed-off-by: Johannes Thumshirn --- fs/btrfs/volumes.c | 91 +++++++++++++++++++++++++++++------------------------- 1 file changed, 49 insertions(+), 42 deletions(-) diff --git a/fs/btrfs/volumes.c b/fs/btrfs/volumes.c index bc0988d8bd56..fd213bb7d619 100644 --- a/fs/btrfs/volumes.c +++ b/fs/btrfs/volumes.c @@ -6437,6 +6437,54 @@ static void map_blocks_for_raid10(struct btrfs_fs_info *fs_info, io_geom->mirror_num = io_geom->stripe_index - old_stripe_index + 1; } +static void map_blocks_for_raid56(struct btrfs_chunk_map *map, + enum btrfs_map_op op, + struct btrfs_io_geometry *io_geom, + u64 logical, u64 *length) +{ + int data_stripes = nr_data_stripes(map); + + if (op != BTRFS_MAP_READ || io_geom->mirror_num > 1) { + /* + * Needs full stripe mapping. + * + * Push stripe_nr back to the start of the full stripe + * For those cases needing a full stripe, @stripe_nr + * is the full stripe number. + * + * Originally we go raid56_full_stripe_start / full_stripe_len, + * but that can be expensive. Here we just divide + * @stripe_nr with @data_stripes. + */ + io_geom->stripe_nr /= data_stripes; + + /* RAID[56] write or recovery. Return all stripes */ + io_geom->num_stripes = map->num_stripes; + io_geom->max_errors = btrfs_chunk_max_errors(map); + + /* Return the length to the full stripe end */ + *length = min(logical + *length, + io_geom->raid56_full_stripe_start + map->start + + btrfs_stripe_nr_to_offset(data_stripes)) - + logical; + io_geom->stripe_index = 0; + io_geom->stripe_offset = 0; + return; + } + + ASSERT(io_geom->mirror_num <= 1); + /* Just grab the data stripe directly. */ + io_geom->stripe_index = io_geom->stripe_nr % data_stripes; + io_geom->stripe_nr /= data_stripes; + + /* We distribute the parity blocks across stripes */ + io_geom->stripe_index = + (io_geom->stripe_nr + io_geom->stripe_index) % map->num_stripes; + + if (op == BTRFS_MAP_READ && io_geom->mirror_num < 1) + io_geom->mirror_num = 1; +} + /* * Map one logical range to one or more physical ranges. * @@ -6529,48 +6577,7 @@ int btrfs_map_block(struct btrfs_fs_info *fs_info, enum btrfs_map_op op, map_blocks_for_raid10(fs_info, map, op, &io_geom, dev_replace_is_ongoing); } else if (map->type & BTRFS_BLOCK_GROUP_RAID56_MASK) { - int data_stripes = nr_data_stripes(map); - - if (op != BTRFS_MAP_READ || io_geom.mirror_num > 1) { - /* - * Needs full stripe mapping. - * - * Push stripe_nr back to the start of the full stripe - * For those cases needing a full stripe, @stripe_nr - * is the full stripe number. - * - * Originally we go raid56_full_stripe_start / full_stripe_len, - * but that can be expensive. Here we just divide - * @stripe_nr with @data_stripes. - */ - io_geom.stripe_nr /= data_stripes; - - /* RAID[56] write or recovery. Return all stripes */ - io_geom.num_stripes = map->num_stripes; - io_geom.max_errors = btrfs_chunk_max_errors(map); - - /* Return the length to the full stripe end */ - *length = min(logical + *length, - io_geom.raid56_full_stripe_start + - map->start + - btrfs_stripe_nr_to_offset( - data_stripes)) - - logical; - io_geom.stripe_index = 0; - io_geom.stripe_offset = 0; - } else { - ASSERT(io_geom.mirror_num <= 1); - /* Just grab the data stripe directly. */ - io_geom.stripe_index = io_geom.stripe_nr % data_stripes; - io_geom.stripe_nr /= data_stripes; - - /* We distribute the parity blocks across stripes */ - io_geom.stripe_index = - (io_geom.stripe_nr + io_geom.stripe_index) % - map->num_stripes; - if (op == BTRFS_MAP_READ && io_geom.mirror_num < 1) - io_geom.mirror_num = 1; - } + map_blocks_for_raid56(map, op, &io_geom, logical, length); } else { /* * After this, stripe_nr is the number of stripes on this From patchwork Tue Dec 12 12:38:07 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Johannes Thumshirn X-Patchwork-Id: 177325 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:bcd1:0:b0:403:3b70:6f57 with SMTP id r17csp7692568vqy; Tue, 12 Dec 2023 04:39:24 -0800 (PST) X-Google-Smtp-Source: AGHT+IGxhPflynUfsueRaDWm71gklyNHxymyOxIFghvueVQbMJyUibU3DTTbG4ambbpbS2kt0Ut+ X-Received: by 2002:a05:6a20:e116:b0:190:a4d:b5cf with SMTP id kr22-20020a056a20e11600b001900a4db5cfmr3801867pzb.48.1702384764402; Tue, 12 Dec 2023 04:39:24 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1702384764; cv=none; d=google.com; s=arc-20160816; b=kPXdPcwvrRXvlVhhjv+Tv2Z/48yldw816qfIEC40d02B7KiYmIaXR7RdI9G8c2f2X6 dQflVBorT6HDywzg18LZsywK70bu7Hfxo1KDGBzToPbUVJi70szFqjpvT0BAbTr6gbt/ 4pNKar+FZWI/lPc/wLsSFH0fBwDrQAbwFVfe+kXM4ASW/f4Nt7x7qjDUlycZAJYt7Sj6 +41+Adc2xd9dHpT5UuJ26TsdBphYyVkEsjiPS7vgxQ/xgG7U42bSXTNj7f2yWOFRRYUT 6vb0DChHBFqMSnD+BTYegALT69vUFB8mr9VvrpbdeCBpxhjYqR52EPJLs7Yx8B7O4rvR 0Rhw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:in-reply-to:references:message-id :content-transfer-encoding:mime-version:subject:date:from :wdcironportexception:ironport-sdr:ironport-sdr:dkim-signature; bh=/UFQdDYHqymRLLOEqnS1qOAwhy/kw++/ejXHfhK9rrY=; fh=RkzPy8j9Bgyvxc5aNhoOEUjthII6WQwvTfVAiEIVvUg=; b=YzuiVy+g3UuwFpidzt51R+JP4tvjU6D/AUmKTPicmcX9DtOaJXGOwqAJWQ0jGXrwpb 3FTluiPMEmuorrSK5RxoYQBJD0MxRXsvF62Z1EOXyygt1od8XrCPdqv3Dpgx/21Ywj8N /7cebeAhXr0hhh6wfJu4JUxJUs1+hIPnF7O5Qe16TpJYxvFCDBayyy1QZ315fl4rTLua UqcEZyXP+TDBCCbJEwLT0+VAOGDDyPvZ/WaVJvPJZ0qpt07RwVLl26RLEEwIZxS7c6oj tZNkUvUFUq9mLECOvsDlE6qjX2GIOdnfeIICojHpEPle7k5dfaSUuzxmlVC81obboX28 FSGw== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@wdc.com header.s=dkim.wdc.com header.b=QLs0QV67; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:6 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=wdc.com Received: from pete.vger.email (pete.vger.email. [2620:137:e000::3:6]) by mx.google.com with ESMTPS id s2-20020a170902ea0200b001d0a0ee28e0si7948716plg.288.2023.12.12.04.39.23 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 12 Dec 2023 04:39:24 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:6 as permitted sender) client-ip=2620:137:e000::3:6; Authentication-Results: mx.google.com; dkim=fail header.i=@wdc.com header.s=dkim.wdc.com header.b=QLs0QV67; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:6 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=wdc.com Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by pete.vger.email (Postfix) with ESMTP id 639C280D0C75; Tue, 12 Dec 2023 04:39:21 -0800 (PST) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.11 at pete.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1346765AbjLLMiz (ORCPT + 99 others); Tue, 12 Dec 2023 07:38:55 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:38964 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1346676AbjLLMih (ORCPT ); Tue, 12 Dec 2023 07:38:37 -0500 Received: from esa2.hgst.iphmx.com (esa2.hgst.iphmx.com [68.232.143.124]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 71B9B197; Tue, 12 Dec 2023 04:38:31 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=wdc.com; i=@wdc.com; q=dns/txt; s=dkim.wdc.com; t=1702384711; x=1733920711; h=from:date:subject:mime-version:content-transfer-encoding: message-id:references:in-reply-to:to:cc; bh=3JBwlPmlVxcc4Hbr5ovZi090xqLbOi7L4Oq6IXpdP+c=; b=QLs0QV679G5N/ymlyyps5HWJs45hxlJc+R6+akAIHN4bEM4Bi/PoG+DO Z+mrN3rj6u74m8L54wOP/oJhohVdWIijXtKmB1unfSUk8Rl2QmFfSgX7G jMi1u/X/EVY2Y07OSFBcSfBOKjtFcoZg0336R1GeSI3BwlH6fVHg474HG AA0XySnO6hfMu+a/xx7f9N8/c9iaV3nP6TK9phAe9fgbzOecQmVpqX2cn CoEpTzCKxHJs2efz880SoyqCgpbLuqFjxA7XO+i0H5XLu8ErfHCA619EY Ukajrbuo2NhQ7N5q4pvzXlFOYsRtZ0Ctwc+ol6BedE05bMRbhfS0SWYsw A==; X-CSE-ConnectionGUID: WeyuH8m4SLe4nDnwUH0XBA== X-CSE-MsgGUID: skh67uFoSICKLfzJJ3cuzw== X-IronPort-AV: E=Sophos;i="6.04,270,1695657600"; d="scan'208";a="4629801" Received: from uls-op-cesaip02.wdc.com (HELO uls-op-cesaep02.wdc.com) ([199.255.45.15]) by ob1.hgst.iphmx.com with ESMTP; 12 Dec 2023 20:38:25 +0800 IronPort-SDR: hkw1xN8eTru++8Dqoc6P4XNCkZjZrbsdui5kbs3MjMeMkB7v2jqKuvgl4/Ayv+B/ysfQw1y/S2 R+MCymewRzlQ== Received: from uls-op-cesaip02.wdc.com ([10.248.3.37]) by uls-op-cesaep02.wdc.com with ESMTP/TLS/ECDHE-RSA-AES128-GCM-SHA256; 12 Dec 2023 03:43:38 -0800 IronPort-SDR: yKSyTL4RqjgBc7SWF2fYJaRUNDzPRK+sZWGPoy8X41nvAdlplDIhTKBhy5y5ItabOFKvZyVo9t 6QI2j683Vtrw== WDCIronportException: Internal Received: from unknown (HELO redsun91.ssa.fujisawa.hgst.com) ([10.149.66.6]) by uls-op-cesaip02.wdc.com with ESMTP; 12 Dec 2023 04:38:24 -0800 From: Johannes Thumshirn Date: Tue, 12 Dec 2023 04:38:07 -0800 Subject: [PATCH 09/13] btrfs: factor out block mapping for single profiles MIME-Version: 1.0 Message-Id: <20231212-btrfs_map_block-cleanup-v1-9-b2d954d9a55b@wdc.com> References: <20231212-btrfs_map_block-cleanup-v1-0-b2d954d9a55b@wdc.com> In-Reply-To: <20231212-btrfs_map_block-cleanup-v1-0-b2d954d9a55b@wdc.com> To: Chris Mason , Josef Bacik , David Sterba Cc: linux-btrfs@vger.kernel.org, linux-kernel@vger.kernel.org, Johannes Thumshirn X-Mailer: b4 0.12.3 X-Developer-Signature: v=1; a=ed25519-sha256; t=1702384691; l=1483; i=johannes.thumshirn@wdc.com; s=20230613; h=from:subject:message-id; bh=3JBwlPmlVxcc4Hbr5ovZi090xqLbOi7L4Oq6IXpdP+c=; b=r7nRTt3NiVSw2tCG7+pUuEg/CKxGw337avuRqCY47dHeFu/f1OGQZYTu51UFeCF7ybE5cxiJj SacfI6e1ut9AIn6wOV7xbl86esli7DGok75vH3UVFmSj7beg62mv5fx X-Developer-Key: i=johannes.thumshirn@wdc.com; a=ed25519; pk=TGmHKs78FdPi+QhrViEvjKIGwReUGCfa+3LEnGoR2KM= X-Spam-Status: No, score=-0.6 required=5.0 tests=DKIM_INVALID,DKIM_SIGNED, HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,SPF_HELO_NONE, SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on pete.vger.email Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (pete.vger.email [0.0.0.0]); Tue, 12 Dec 2023 04:39:21 -0800 (PST) X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1785079806520660911 X-GMAIL-MSGID: 1785079806520660911 Now that we have a container for the I/O geometry that has all the needed information for the block mappings of SINGLE profiles, factor out a helper calculating this information. Signed-off-by: Johannes Thumshirn --- fs/btrfs/volumes.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/fs/btrfs/volumes.c b/fs/btrfs/volumes.c index fd213bb7d619..e7bd3a25c516 100644 --- a/fs/btrfs/volumes.c +++ b/fs/btrfs/volumes.c @@ -6485,6 +6485,14 @@ static void map_blocks_for_raid56(struct btrfs_chunk_map *map, io_geom->mirror_num = 1; } +static void map_blocks_for_single(struct btrfs_chunk_map *map, + struct btrfs_io_geometry *io_geom) +{ + io_geom->stripe_index = io_geom->stripe_nr % map->num_stripes; + io_geom->stripe_nr /= map->num_stripes; + io_geom->mirror_num = io_geom->stripe_index + 1; +} + /* * Map one logical range to one or more physical ranges. * @@ -6584,9 +6592,7 @@ int btrfs_map_block(struct btrfs_fs_info *fs_info, enum btrfs_map_op op, * device we have to walk to find the data, and stripe_index is * the number of our device in the stripe array */ - io_geom.stripe_index = io_geom.stripe_nr % map->num_stripes; - io_geom.stripe_nr /= map->num_stripes; - io_geom.mirror_num = io_geom.stripe_index + 1; + map_blocks_for_single(map, &io_geom); } if (io_geom.stripe_index >= map->num_stripes) { btrfs_crit(fs_info, From patchwork Tue Dec 12 12:38:08 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Johannes Thumshirn X-Patchwork-Id: 177328 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:bcd1:0:b0:403:3b70:6f57 with SMTP id r17csp7692652vqy; Tue, 12 Dec 2023 04:39:38 -0800 (PST) X-Google-Smtp-Source: AGHT+IFH7xR2rEwHFDrWQomm5JAPVTeoHwJkeDTLgwLm+xgnLgAzxXb0GqwyIdgWG5Tegr7UH64B X-Received: by 2002:a17:903:2307:b0:1d0:6ffd:610d with SMTP id d7-20020a170903230700b001d06ffd610dmr7422897plh.47.1702384777956; Tue, 12 Dec 2023 04:39:37 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1702384777; cv=none; d=google.com; s=arc-20160816; b=NuxBrdFoA5Q79SqZKM4RfFkNKGaWFeWfTJ0HC1pdDOYAQAVmbjik/ZJDZNpyMNz8ex +pjqCL2tZzC4b9Dzvi62JhqiIZ0oqdUwUm7WqxOvHX3EwjwVg1LNU/+NFENUbRr8fQ// AaNmoxVh4f14ATLQNvpU+8UoXzRUGzYff8BQWaXoDbJpJDmrk10AISiHaYXc9BB5rOg9 Cvg2dvsI+PX2oQuYRVMgySyZ8cw00ooH8sZeYwLv8LRpLjDWvISCZ4CefJ/8vpDTnUYw 3ToCXQhEp7DAQUZlCzDzac90k2SzMzEXRTxXH3nTldknG4PxACnwtr51qrAMeQ1Dca8y STcg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:in-reply-to:references:message-id :content-transfer-encoding:mime-version:subject:date:from :wdcironportexception:ironport-sdr:ironport-sdr:dkim-signature; bh=vn6TiKbPMkLigIc+EBWHQjyfFVwtyPhlweVeE09Mq50=; fh=RkzPy8j9Bgyvxc5aNhoOEUjthII6WQwvTfVAiEIVvUg=; b=qg8HBSImVhh5Jsh9/7p6Qhkztmx6+W52/RBOMcLMHYPLjUib0vSnt13nYCc8SSMxOu 9XgydYCxVh2w43Y+E1UjSXrPQj4HW7CKlxYsaP9vTRAFJQiOMijehNvtocydO4qqGr35 8gBh8b8ExPXEHFPFfHyL5cKwfjLxeJki4Bo2JxaM3gw2jl1KjTQXZh1yevrICerLzCkt yo6wpjQv6wg6FcUU8wRmaXDk6Dzj/K2pdwpGbmVBnG0XAqG+idI/uudSj/ov7xXky1JE OE6X23qPLRHPXsPY1UzowzHBKDBs6a45Wq5t5m1z1lwU7mZdRhv33GP/FgljwBrts6eT /mOw== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@wdc.com header.s=dkim.wdc.com header.b=kzVTsrVV; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.36 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=wdc.com Received: from pete.vger.email (pete.vger.email. [23.128.96.36]) by mx.google.com with ESMTPS id ja12-20020a170902efcc00b001cff3cae848si7722391plb.37.2023.12.12.04.39.35 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 12 Dec 2023 04:39:37 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.36 as permitted sender) client-ip=23.128.96.36; Authentication-Results: mx.google.com; dkim=fail header.i=@wdc.com header.s=dkim.wdc.com header.b=kzVTsrVV; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.36 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=wdc.com Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by pete.vger.email (Postfix) with ESMTP id BBD518027B7D; Tue, 12 Dec 2023 04:39:32 -0800 (PST) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.11 at pete.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1346775AbjLLMi7 (ORCPT + 99 others); Tue, 12 Dec 2023 07:38:59 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:39000 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1346710AbjLLMih (ORCPT ); Tue, 12 Dec 2023 07:38:37 -0500 Received: from esa2.hgst.iphmx.com (esa2.hgst.iphmx.com [68.232.143.124]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 3AB3B1AA; Tue, 12 Dec 2023 04:38:36 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=wdc.com; i=@wdc.com; q=dns/txt; s=dkim.wdc.com; t=1702384716; x=1733920716; h=from:date:subject:mime-version:content-transfer-encoding: message-id:references:in-reply-to:to:cc; bh=5N+ew4xV5T7Bg5xRXq4tOKGJ+cFKuS/hdyWQo9PfRK4=; b=kzVTsrVVVOLBT6ujfGKRWLb04CHbFyjyrAhuXjr6D4VQywpuIZUJmXMu OuzAKPEbCGB32iKy/sXP3ec3hm+LwQLrEt6P3Akc7Xu3DfSVZs4pJBzAE 1UHdZ/gFdEkhcyKBmWK0K9ebz9ESr4bTpCpuI9DVW9Z2WjgwWTsOWKYaT AmV7jDtbsXJN8vuuk5ig3j/V63bjKOMKyyvIb5ylt7GoNaAekbA8xYnBl 8bIORoYdzPS76tNvBYA9JF9n1k0JPct7yK9YEnKZtDHRpD9YPsE/JS2iP iL10A+KowFJmP6fzWouBH8XvK1q9RnFfVeGTcfGR/Vd8c3ruOpGsqUuO+ Q==; X-CSE-ConnectionGUID: uVLj9uwRRq2AUSArnRqE7Q== X-CSE-MsgGUID: Kw0t9OlYQUaISAH1jqUHgA== X-IronPort-AV: E=Sophos;i="6.04,270,1695657600"; d="scan'208";a="4629803" Received: from uls-op-cesaip02.wdc.com (HELO uls-op-cesaep02.wdc.com) ([199.255.45.15]) by ob1.hgst.iphmx.com with ESMTP; 12 Dec 2023 20:38:26 +0800 IronPort-SDR: vKkvRlQYyDxiFmPXH4dqCmG/4MPVnkwrK5fSUR/1TpDtDXTRpOuF3C1F4muK2CCgzDTmMBzm7u A8lZs6UINL3Q== Received: from uls-op-cesaip02.wdc.com ([10.248.3.37]) by uls-op-cesaep02.wdc.com with ESMTP/TLS/ECDHE-RSA-AES128-GCM-SHA256; 12 Dec 2023 03:43:40 -0800 IronPort-SDR: 437019ZkLS5lVX+ILTYrOyq/+MvQ1iB1fXqdv7sacM5yvroTKC9tetv5GjVreidiR/1ZJNVY8B TeusU574/icA== WDCIronportException: Internal Received: from unknown (HELO redsun91.ssa.fujisawa.hgst.com) ([10.149.66.6]) by uls-op-cesaip02.wdc.com with ESMTP; 12 Dec 2023 04:38:26 -0800 From: Johannes Thumshirn Date: Tue, 12 Dec 2023 04:38:08 -0800 Subject: [PATCH 10/13] btrfs: untagle if else maze in btrfs_map_block MIME-Version: 1.0 Message-Id: <20231212-btrfs_map_block-cleanup-v1-10-b2d954d9a55b@wdc.com> References: <20231212-btrfs_map_block-cleanup-v1-0-b2d954d9a55b@wdc.com> In-Reply-To: <20231212-btrfs_map_block-cleanup-v1-0-b2d954d9a55b@wdc.com> To: Chris Mason , Josef Bacik , David Sterba Cc: linux-btrfs@vger.kernel.org, linux-kernel@vger.kernel.org, Johannes Thumshirn X-Mailer: b4 0.12.3 X-Developer-Signature: v=1; a=ed25519-sha256; t=1702384691; l=1978; i=johannes.thumshirn@wdc.com; s=20230613; h=from:subject:message-id; bh=5N+ew4xV5T7Bg5xRXq4tOKGJ+cFKuS/hdyWQo9PfRK4=; b=2kMp398nU9E3QkdK1U8I9QCQXm14Ml+zCql16ykYKhLoWPS+u2gLznbChrXeRk1aLFZxP4NCc aCqY/yRLCYRDOrga34Pjc3zOZYRBhwtjHvtfF4KMjTjUbu2yf3xA+EY X-Developer-Key: i=johannes.thumshirn@wdc.com; a=ed25519; pk=TGmHKs78FdPi+QhrViEvjKIGwReUGCfa+3LEnGoR2KM= X-Spam-Status: No, score=-0.6 required=5.0 tests=DKIM_INVALID,DKIM_SIGNED, HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,SPF_HELO_NONE, SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on pete.vger.email Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (pete.vger.email [0.0.0.0]); Tue, 12 Dec 2023 04:39:33 -0800 (PST) X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1785079821176020277 X-GMAIL-MSGID: 1785079821176020277 Signed-off-by: Johannes Thumshirn Reviewed-by: Christoph Hellwig --- fs/btrfs/volumes.c | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/fs/btrfs/volumes.c b/fs/btrfs/volumes.c index e7bd3a25c516..946333c8c331 100644 --- a/fs/btrfs/volumes.c +++ b/fs/btrfs/volumes.c @@ -6574,26 +6574,38 @@ int btrfs_map_block(struct btrfs_fs_info *fs_info, enum btrfs_map_op op, io_geom.num_stripes = 1; io_geom.stripe_index = 0; io_geom.mirror_num = (mirror_num_ret ? *mirror_num_ret : 0); - if (map->type & BTRFS_BLOCK_GROUP_RAID0) { + + switch (map->type & BTRFS_BLOCK_GROUP_PROFILE_MASK) { + case BTRFS_BLOCK_GROUP_RAID0: map_blocks_for_raid0(map, op, &io_geom); - } else if (map->type & BTRFS_BLOCK_GROUP_RAID1_MASK) { + break; + case BTRFS_BLOCK_GROUP_RAID1: + case BTRFS_BLOCK_GROUP_RAID1C3: + case BTRFS_BLOCK_GROUP_RAID1C4: map_blocks_for_raid1(fs_info, map, op, &io_geom, dev_replace_is_ongoing); - } else if (map->type & BTRFS_BLOCK_GROUP_DUP) { + break; + case BTRFS_BLOCK_GROUP_DUP: map_blocks_for_dup(map, op, &io_geom); - } else if (map->type & BTRFS_BLOCK_GROUP_RAID10) { + break; + case BTRFS_BLOCK_GROUP_RAID10: map_blocks_for_raid10(fs_info, map, op, &io_geom, dev_replace_is_ongoing); - } else if (map->type & BTRFS_BLOCK_GROUP_RAID56_MASK) { + break; + case BTRFS_BLOCK_GROUP_RAID5: + case BTRFS_BLOCK_GROUP_RAID6: map_blocks_for_raid56(map, op, &io_geom, logical, length); - } else { + break; + default: /* * After this, stripe_nr is the number of stripes on this * device we have to walk to find the data, and stripe_index is * the number of our device in the stripe array */ map_blocks_for_single(map, &io_geom); + break; } + if (io_geom.stripe_index >= map->num_stripes) { btrfs_crit(fs_info, "stripe index math went horribly wrong, got stripe_index=%u, num_stripes=%u", From patchwork Tue Dec 12 12:38:09 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Johannes Thumshirn X-Patchwork-Id: 177324 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:bcd1:0:b0:403:3b70:6f57 with SMTP id r17csp7692501vqy; Tue, 12 Dec 2023 04:39:17 -0800 (PST) X-Google-Smtp-Source: AGHT+IF6E6tnHxg6Dr7RYOWiupf29OeMvUTGdFcYZZZXtFjhq5n1iMeyuIiM0S+L1y7mcYsEsm8a X-Received: by 2002:a17:902:e885:b0:1ca:7f91:aa5d with SMTP id w5-20020a170902e88500b001ca7f91aa5dmr6710742plg.16.1702384757579; Tue, 12 Dec 2023 04:39:17 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1702384757; cv=none; d=google.com; s=arc-20160816; b=bK2Ecl3ar2m03FS4f7WW7llrFEoQpQNPXzir7B2CfMFWGDhx2DL6Z9NnwYKZsshCL+ PZWCRp1O8Q5j7P0NsuaG+PK0uQHIeLk3Pg2hGHhSaHUayc2eJQ0i4O3dJh3/XhB550LG vxCn8p5eDOz7X0fUBb4wvYYwkcFUbR18O0wfuLhtBP3mzOenQNR9HZ1jq2GMk1v2KnYS y7MVSdt5DvxXaztuI73mnIpB9hZ1hF6goefR/cjgJ++CVPvc8FXeCHbJH+eQrcyOHlJ+ bz6ijgI+3flvx0HcROou9Gn2JSuXyluP7REpJEh8OMH1Phnky/7tZHlV1pNuPKU7Ww/5 9oyw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:in-reply-to:references:message-id :content-transfer-encoding:mime-version:subject:date:from :wdcironportexception:ironport-sdr:ironport-sdr:dkim-signature; bh=At+hls3D6DBQLKNLgMK3qn7xHxqvXh3uB5AMaLua6jM=; fh=RkzPy8j9Bgyvxc5aNhoOEUjthII6WQwvTfVAiEIVvUg=; b=CbAvDppvOQOAiH0/zRjidf0jmQXrudDFWUFdOvgkyHgphkvAkIRu1aGLCldNug7U9W WDh8Vyj0cFho+ZsFrwfMVy/tEJLZPgA98V8x6nQLPVl0TcIyp9zq7h2/R9Qde/rD7bBA drn4AFTnjoRjbYaPksnqhd5RZ3wIiH+ot4n3k3c1g79LudL25rE9iYFN8YZ/EYk+EVzS B4It95bYaT/TzA9B6vUptdvR8jSay1rvuycns1UkR4x2x2i9hxrCTybj16TG5DQdB3vB odzqKIuvD1MuTBVi6fPBSb0bLBwTwHEkz4EK0VVp0G6rOAH29s5EdLJQM245dZE4Atw6 VyqQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@wdc.com header.s=dkim.wdc.com header.b=HpJqw8zq; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:3 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=wdc.com Received: from lipwig.vger.email (lipwig.vger.email. [2620:137:e000::3:3]) by mx.google.com with ESMTPS id q14-20020a170902eb8e00b001d0bdb270a7si7889756plg.259.2023.12.12.04.39.17 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 12 Dec 2023 04:39:17 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:3 as permitted sender) client-ip=2620:137:e000::3:3; Authentication-Results: mx.google.com; dkim=fail header.i=@wdc.com header.s=dkim.wdc.com header.b=HpJqw8zq; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:3 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=wdc.com Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by lipwig.vger.email (Postfix) with ESMTP id 5C312804C577; Tue, 12 Dec 2023 04:39:14 -0800 (PST) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.11 at lipwig.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1346720AbjLLMjD (ORCPT + 99 others); Tue, 12 Dec 2023 07:39:03 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:43600 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1346713AbjLLMii (ORCPT ); Tue, 12 Dec 2023 07:38:38 -0500 Received: from esa2.hgst.iphmx.com (esa2.hgst.iphmx.com [68.232.143.124]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 7FDDB1AE; Tue, 12 Dec 2023 04:38:36 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=wdc.com; i=@wdc.com; q=dns/txt; s=dkim.wdc.com; t=1702384716; x=1733920716; h=from:date:subject:mime-version:content-transfer-encoding: message-id:references:in-reply-to:to:cc; bh=m+k8zZj7fOiwTsk10O7T+w0cafCSoG6d6aneRjaYfXI=; b=HpJqw8zqjpnIcr6+/FtBRwUNWkzc/ONLklWqRpLVv7gvMq75ktQzGZhD XrvAUHcEHZgswvBUWDKBrbHWLMgNYAspFAlD1u2QFL2zllRPkDRBSxRCM +KL4hx3y4KMvQc77sXJgu1EQeU2buOdAsk2nbRoTD8orqfTzzyHFj3pQ6 vUz/zAJg4VATn8dlx5H8BAtYzjhdWCzt4GVCOy7qiVuUcTUHet/OG21og 9VI8eGRuvss/aZSwcckhzEq0sMDxV0+KCy9Sd6ilqYs/g+AzC8ExEjhph 5JNLhyU3JNtfFLiH3f/G+NV1iSC3Mo2gOHDsV7ETtM1YXU6Fwi09zm6GP A==; X-CSE-ConnectionGUID: IOXfBpj9SzmwLK28ikQpeA== X-CSE-MsgGUID: zlpYzwIKTPeDpf7laSGAUg== X-IronPort-AV: E=Sophos;i="6.04,270,1695657600"; d="scan'208";a="4629805" Received: from uls-op-cesaip02.wdc.com (HELO uls-op-cesaep02.wdc.com) ([199.255.45.15]) by ob1.hgst.iphmx.com with ESMTP; 12 Dec 2023 20:38:28 +0800 IronPort-SDR: EEZx+MTXO5/EPfiEE0Oqo3Y+V7UigsN4Syyf7I8P7QAy9DwuxGXUslS55HOyNj4viY/v4jWdYb Pj/lRF0LEBig== Received: from uls-op-cesaip02.wdc.com ([10.248.3.37]) by uls-op-cesaep02.wdc.com with ESMTP/TLS/ECDHE-RSA-AES128-GCM-SHA256; 12 Dec 2023 03:43:41 -0800 IronPort-SDR: fsU/wqkD+KVd+7gZJQZyM/42QDym7jl2WKEY8ZV6rVeYnw/77LWRt4Ax0M273k/kZL5F6hMNBT 2pCl9aEMoPag== WDCIronportException: Internal Received: from unknown (HELO redsun91.ssa.fujisawa.hgst.com) ([10.149.66.6]) by uls-op-cesaip02.wdc.com with ESMTP; 12 Dec 2023 04:38:27 -0800 From: Johannes Thumshirn Date: Tue, 12 Dec 2023 04:38:09 -0800 Subject: [PATCH 11/13] btrfs: open code set_io_stripe for RAID56 MIME-Version: 1.0 Message-Id: <20231212-btrfs_map_block-cleanup-v1-11-b2d954d9a55b@wdc.com> References: <20231212-btrfs_map_block-cleanup-v1-0-b2d954d9a55b@wdc.com> In-Reply-To: <20231212-btrfs_map_block-cleanup-v1-0-b2d954d9a55b@wdc.com> To: Chris Mason , Josef Bacik , David Sterba Cc: linux-btrfs@vger.kernel.org, linux-kernel@vger.kernel.org, Johannes Thumshirn X-Mailer: b4 0.12.3 X-Developer-Signature: v=1; a=ed25519-sha256; t=1702384691; l=1349; i=johannes.thumshirn@wdc.com; s=20230613; h=from:subject:message-id; bh=m+k8zZj7fOiwTsk10O7T+w0cafCSoG6d6aneRjaYfXI=; b=xbO8DGuIlP9LDF+dOqBn9tQlgUQ3uaT19PWrwV0MrDVeQCBR9suWMeo8QrFScmaHU0ztpPxSS q8Vd2PG2TF4Dgo7pmaOOJKF9oElSi9Vsvn0xWedCUaDzEeKjv3OAlu3 X-Developer-Key: i=johannes.thumshirn@wdc.com; a=ed25519; pk=TGmHKs78FdPi+QhrViEvjKIGwReUGCfa+3LEnGoR2KM= X-Spam-Status: No, score=-0.6 required=5.0 tests=DKIM_INVALID,DKIM_SIGNED, HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,SPF_HELO_NONE, SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lipwig.vger.email Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (lipwig.vger.email [0.0.0.0]); Tue, 12 Dec 2023 04:39:14 -0800 (PST) X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1785079799348323467 X-GMAIL-MSGID: 1785079799348323467 Open code set_io_stripe() for RAID56, as it a) uses a different method to calculate the stripe_index and b) doesn't need to go through raid-stripe-tree mapping code. Signed-off-by: Johannes Thumshirn Reviewed-by: Christoph Hellwig Signed-off-by: Christoph Hellwig --- fs/btrfs/volumes.c | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/fs/btrfs/volumes.c b/fs/btrfs/volumes.c index 946333c8c331..7df991a81c4b 100644 --- a/fs/btrfs/volumes.c +++ b/fs/btrfs/volumes.c @@ -6670,13 +6670,16 @@ int btrfs_map_block(struct btrfs_fs_info *fs_info, enum btrfs_map_op op, btrfs_stripe_nr_to_offset(io_geom.stripe_nr * nr_data_stripes(map)); for (int i = 0; i < io_geom.num_stripes; i++) { - ret = set_io_stripe(fs_info, op, logical, length, - &bioc->stripes[i], map, - (i + io_geom.stripe_nr) % io_geom.num_stripes, - io_geom.stripe_offset, - io_geom.stripe_nr); - if (ret < 0) - break; + struct btrfs_io_stripe *dst = &bioc->stripes[i]; + u32 stripe_index; + + stripe_index = + (i + io_geom.stripe_nr) % io_geom.num_stripes; + dst->dev = map->stripes[stripe_index].dev; + dst->physical = + map->stripes[stripe_index].physical + + io_geom.stripe_offset + + btrfs_stripe_nr_to_offset(io_geom.stripe_nr); } } else { /* From patchwork Tue Dec 12 12:38:10 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Johannes Thumshirn X-Patchwork-Id: 177326 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:bcd1:0:b0:403:3b70:6f57 with SMTP id r17csp7692611vqy; Tue, 12 Dec 2023 04:39:29 -0800 (PST) X-Google-Smtp-Source: AGHT+IH6EiT1GmzJQ4Jv69d8wXYjDfET80+F7th25sun5OZuzVBTHQgimPXYfJz88ThYbXElShD0 X-Received: by 2002:a05:6a00:1744:b0:6ce:2731:d5c0 with SMTP id j4-20020a056a00174400b006ce2731d5c0mr3668527pfc.49.1702384768650; Tue, 12 Dec 2023 04:39:28 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1702384768; cv=none; d=google.com; s=arc-20160816; b=ledrBSfVDxK4j3mF0qWEhJHfeesl0ZJEJDg07pXylNeQj6jxcAoqbhQHSCEu9Q2qLm vMkSd0735tIeHUHUC7f9IhUhLaJUq102vALBB8cBNok5d5r+nD2ErwmBeI9P8szlpEkn 8svsOvmW8gS0gfE/hE0o5kgIIe6jlgdLFnmdpTT6l4HoaVaaUDGrqw8vRy/bK3hiG429 Nt18vgBZUpEiSi2RgzWKAxysaDR4H27fdJZOooVeuVBB/cxc+S/1BxITVhFcVgzUWB5o 1P6qaUVIrAkzOAOSvjg1Mjw+c5PRChlMpuufoIkyt0SitJjcIZbxRHe7lVaRrAEr/hVE rYUw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:in-reply-to:references:message-id :content-transfer-encoding:mime-version:subject:date:from :wdcironportexception:ironport-sdr:ironport-sdr:dkim-signature; bh=2JO9uvHMimWGMgkOFHJE6wRyYKDltIPFMj4WRv/6PHA=; fh=RkzPy8j9Bgyvxc5aNhoOEUjthII6WQwvTfVAiEIVvUg=; b=qS8uDltxPdsQxSPUHg9TyEbB6DLti+Y4fypACY13/intsDEu6NcFrzuWHeQ5HzbUaP +uye/kqO3S5Mv9EtZ/BKE7Z9ed8vzoxbvRX97JdkFc3aHnjJynNFEqqEiUc+dAZ+YDxQ +1R0TXHy2q5oEt9aTGa/VAQjDmxBOIpwIh8+pcoGlFRqxpkBhEWVVrbEc33xE8Qhoome t2QNNbFdaZdi6VAGiNVS1/NHSJFLYgi8QfdEbe/vBRM7YSUmQqZzSlbjMV07Kaf9RNXZ v/ckvYfnsXEhmXY8DVI3xcTNHF9CYb9UM6nrTLaU01znl9ooLzHbGQfvpLbxOr3wnqVk Sl/w== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@wdc.com header.s=dkim.wdc.com header.b=fLh+RUuT; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.38 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=wdc.com Received: from fry.vger.email (fry.vger.email. [23.128.96.38]) by mx.google.com with ESMTPS id f18-20020a056a00229200b006ce65a4a67bsi7752149pfe.325.2023.12.12.04.39.28 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 12 Dec 2023 04:39:28 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.38 as permitted sender) client-ip=23.128.96.38; Authentication-Results: mx.google.com; dkim=fail header.i=@wdc.com header.s=dkim.wdc.com header.b=fLh+RUuT; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.38 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=wdc.com Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by fry.vger.email (Postfix) with ESMTP id B337580A18FB; Tue, 12 Dec 2023 04:39:23 -0800 (PST) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.11 at fry.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1346692AbjLLMjL (ORCPT + 99 others); Tue, 12 Dec 2023 07:39:11 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:39088 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1346725AbjLLMij (ORCPT ); Tue, 12 Dec 2023 07:38:39 -0500 Received: from esa2.hgst.iphmx.com (esa2.hgst.iphmx.com [68.232.143.124]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id E6E171BB; Tue, 12 Dec 2023 04:38:37 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=wdc.com; i=@wdc.com; q=dns/txt; s=dkim.wdc.com; t=1702384717; x=1733920717; h=from:date:subject:mime-version:content-transfer-encoding: message-id:references:in-reply-to:to:cc; bh=gaUiVpID3qEMvXDQr81RAhFpDwEigiqNGfWmpFKH2NQ=; b=fLh+RUuTIwU4mFkFqkZumE0x/WXyXngJK3dePnsIcBP7975vRpt3kmAH hP+xNvIVQWrMSBPutnGInzDlVei6HbPZFG5ckVbW7ZF7pK5gmo8B9Dlu6 HJIz19wh15L6CXdQ6hsLle4noIsptlv+Lbka48nFJyFh7aFfqTUOne5fo PRnPbQSXyT0DPG07L0ouOYJNjI3nmippb+aETjCiLkEE12HkTWdoz1Gc9 k/joIMoYdZWKEHX/zGN2ECjcKet6vptPnwUD+3YJRLKKO/5jzgNuwDIbA rcIgw8/3WKvNxCvSfb9qNFONYkSBKyxOtoPp+CjhdfPOlueK6KiRNzGlL w==; X-CSE-ConnectionGUID: UBsURaulR7m/419IDXBUwQ== X-CSE-MsgGUID: NIU47k/7Qkq6VQW4MmuQVA== X-IronPort-AV: E=Sophos;i="6.04,270,1695657600"; d="scan'208";a="4629809" Received: from uls-op-cesaip02.wdc.com (HELO uls-op-cesaep02.wdc.com) ([199.255.45.15]) by ob1.hgst.iphmx.com with ESMTP; 12 Dec 2023 20:38:29 +0800 IronPort-SDR: eDu+MFhi/3vSWcj9l82fhNEPjsUwGNMwjLvhiT1Eog2yG574DLB1YcO1+ZBLvvw+YdSTInEmsH HoAyYzcHQ2Mw== Received: from uls-op-cesaip02.wdc.com ([10.248.3.37]) by uls-op-cesaep02.wdc.com with ESMTP/TLS/ECDHE-RSA-AES128-GCM-SHA256; 12 Dec 2023 03:43:43 -0800 IronPort-SDR: Tc0wOz5i5neycLbDMuj5vFhD/Rrzx2Ol9kgrFhhV3Cd8EHKiOaYy/3ot1sPrMm+QwtfwvkdnUw Xotqf2XxxZCg== WDCIronportException: Internal Received: from unknown (HELO redsun91.ssa.fujisawa.hgst.com) ([10.149.66.6]) by uls-op-cesaip02.wdc.com with ESMTP; 12 Dec 2023 04:38:28 -0800 From: Johannes Thumshirn Date: Tue, 12 Dec 2023 04:38:10 -0800 Subject: [PATCH 12/13] btrfs: pass struct btrfs_io_geometry to set_io_stripe MIME-Version: 1.0 Message-Id: <20231212-btrfs_map_block-cleanup-v1-12-b2d954d9a55b@wdc.com> References: <20231212-btrfs_map_block-cleanup-v1-0-b2d954d9a55b@wdc.com> In-Reply-To: <20231212-btrfs_map_block-cleanup-v1-0-b2d954d9a55b@wdc.com> To: Chris Mason , Josef Bacik , David Sterba Cc: linux-btrfs@vger.kernel.org, linux-kernel@vger.kernel.org, Johannes Thumshirn X-Mailer: b4 0.12.3 X-Developer-Signature: v=1; a=ed25519-sha256; t=1702384691; l=2493; i=johannes.thumshirn@wdc.com; s=20230613; h=from:subject:message-id; bh=gaUiVpID3qEMvXDQr81RAhFpDwEigiqNGfWmpFKH2NQ=; b=aa5BsgAOxVPVF21/gmUmm8xaPTnvJNyoGCbjrpDaCs5K8w1CO0L5u+UYy28uyLz5A2I8o28QU uc6ygA9K52mCWSt9N/t2M2K+htEMzabGk+Hh+5gTV1uMUXGy+rkI3mn X-Developer-Key: i=johannes.thumshirn@wdc.com; a=ed25519; pk=TGmHKs78FdPi+QhrViEvjKIGwReUGCfa+3LEnGoR2KM= X-Spam-Status: No, score=-0.6 required=5.0 tests=DKIM_INVALID,DKIM_SIGNED, HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,SPF_HELO_NONE, SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on fry.vger.email Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (fry.vger.email [0.0.0.0]); Tue, 12 Dec 2023 04:39:24 -0800 (PST) X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1785079811287161774 X-GMAIL-MSGID: 1785079811287161774 Instead of passing three members of 'struct btrfs_io_geometry' into set_io_stripe() pass a pointer to the whole structure and then get the needed members out of btrfs_io_geometry. Signed-off-by: Johannes Thumshirn --- fs/btrfs/volumes.c | 22 ++++++++++------------ 1 file changed, 10 insertions(+), 12 deletions(-) diff --git a/fs/btrfs/volumes.c b/fs/btrfs/volumes.c index 7df991a81c4b..c1fefe34a194 100644 --- a/fs/btrfs/volumes.c +++ b/fs/btrfs/volumes.c @@ -6326,17 +6326,19 @@ static u64 btrfs_max_io_len(struct btrfs_chunk_map *map, enum btrfs_map_op op, static int set_io_stripe(struct btrfs_fs_info *fs_info, enum btrfs_map_op op, u64 logical, u64 *length, struct btrfs_io_stripe *dst, - struct btrfs_chunk_map *map, u32 stripe_index, - u64 stripe_offset, u64 stripe_nr) + struct btrfs_chunk_map *map, + struct btrfs_io_geometry *io_geom) { - dst->dev = map->stripes[stripe_index].dev; + dst->dev = map->stripes[io_geom->stripe_index].dev; if (op == BTRFS_MAP_READ && btrfs_need_stripe_tree_update(fs_info, map->type)) return btrfs_get_raid_extent_offset(fs_info, logical, length, - map->type, stripe_index, dst); + map->type, + io_geom->stripe_index, dst); - dst->physical = map->stripes[stripe_index].physical + - stripe_offset + btrfs_stripe_nr_to_offset(stripe_nr); + dst->physical = map->stripes[io_geom->stripe_index].physical + + io_geom->stripe_offset + + btrfs_stripe_nr_to_offset(io_geom->stripe_nr); return 0; } @@ -6634,8 +6636,7 @@ int btrfs_map_block(struct btrfs_fs_info *fs_info, enum btrfs_map_op op, if (is_single_device_io(fs_info, smap, map, num_alloc_stripes, op, io_geom.mirror_num)) { ret = set_io_stripe(fs_info, op, logical, length, smap, map, - io_geom.stripe_index, io_geom.stripe_offset, - io_geom.stripe_nr); + &io_geom); if (mirror_num_ret) *mirror_num_ret = io_geom.mirror_num; *bioc_ret = NULL; @@ -6688,10 +6689,7 @@ int btrfs_map_block(struct btrfs_fs_info *fs_info, enum btrfs_map_op op, */ for (i = 0; i < io_geom.num_stripes; i++) { ret = set_io_stripe(fs_info, op, logical, length, - &bioc->stripes[i], map, - io_geom.stripe_index, - io_geom.stripe_offset, - io_geom.stripe_nr); + &bioc->stripes[i], map, &io_geom); if (ret < 0) break; io_geom.stripe_index++; From patchwork Tue Dec 12 12:38:11 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Johannes Thumshirn X-Patchwork-Id: 177327 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:bcd1:0:b0:403:3b70:6f57 with SMTP id r17csp7692621vqy; Tue, 12 Dec 2023 04:39:30 -0800 (PST) X-Google-Smtp-Source: AGHT+IHudqwsEnL9WGrUfV6+SvvZODh2k0xr4HFXgc00pqB46Smfz7bUw7w2dT/d749lazAKPtsO X-Received: by 2002:a05:6e02:20c1:b0:35d:6227:4f03 with SMTP id 1-20020a056e0220c100b0035d62274f03mr9443759ilq.7.1702384770301; Tue, 12 Dec 2023 04:39:30 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1702384770; cv=none; d=google.com; s=arc-20160816; b=nXI07ltqRLlgaELIQwiKFMKrULvSWXfK7aeHMEiLIxnwjjx9bkXXNXBTAhZKt2vCFn eCOl+NhA4dEpzDmTSYSOEmRFjXcRI/d6G7BI4S1bpfe8LQfPRCgqGuGrot/We5wD9/Kr MoId/M1IH/OxYGgiOStBSLtqzREGW6JXHtn8z2aExSSw02+awbEcmUEGm0iaifLP/h3+ qSp9WKQhXr5pj0I4NvRk5DVLe65wZ8qsFwPafbAhVE2hjzo3JoTPUA+he+axRPKdWA3h 1g/gl3J7NgaJP9rUlVcemIcfkhOOXrw6ctxvn52udAgMsiAULwipFKHScdtqThTs2k2O Wz5w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:in-reply-to:references:message-id :content-transfer-encoding:mime-version:subject:date:from :wdcironportexception:ironport-sdr:ironport-sdr:dkim-signature; bh=qHecm+dxvI2XKllHe8WDRDBv4BcI4iAido1K2H4VKao=; fh=RkzPy8j9Bgyvxc5aNhoOEUjthII6WQwvTfVAiEIVvUg=; b=OUcwqc8/KN7G8KQ6oeSP945gcUaYvuh//vqQy3MD9u3LfvUo2Q/LERXU/nm+JzMsyq 9zkttWuoWUPQdwFStQkIr/1tKDcEv3BrfsDM44L7t1Hhw40xKBq6EORrpcI0Mky48POg VedgUfcFghoTFy5f4Ne5oCrlLjCQDIAZ/6SeASyzVCwkZWdC7iB3cekxsfadP9RW5atc cX1ta6HMJIhvvmWwJn5eL3XIvUZa7CsiGVcyPAvq4KxRMTCG/F9h9HybHOH2+V2kDcD1 yKaeAFKgWRvgyfpgvjrgp3PE5MX2F5EBDbcdx+vOJteqgAaY/nC1hznwGXGgwX+XJTDd /S3w== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@wdc.com header.s=dkim.wdc.com header.b=f6E0fY25; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:3 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=wdc.com Received: from lipwig.vger.email (lipwig.vger.email. [2620:137:e000::3:3]) by mx.google.com with ESMTPS id by32-20020a056a0205a000b005c66415a758si8029941pgb.468.2023.12.12.04.39.29 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 12 Dec 2023 04:39:30 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:3 as permitted sender) client-ip=2620:137:e000::3:3; Authentication-Results: mx.google.com; dkim=fail header.i=@wdc.com header.s=dkim.wdc.com header.b=f6E0fY25; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:3 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=wdc.com Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by lipwig.vger.email (Postfix) with ESMTP id D4FC4804C51E; Tue, 12 Dec 2023 04:39:26 -0800 (PST) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.11 at lipwig.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1346742AbjLLMjP (ORCPT + 99 others); Tue, 12 Dec 2023 07:39:15 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:39116 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1346689AbjLLMim (ORCPT ); Tue, 12 Dec 2023 07:38:42 -0500 Received: from esa2.hgst.iphmx.com (esa2.hgst.iphmx.com [68.232.143.124]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 9DB83D41; Tue, 12 Dec 2023 04:38:39 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=wdc.com; i=@wdc.com; q=dns/txt; s=dkim.wdc.com; t=1702384719; x=1733920719; h=from:date:subject:mime-version:content-transfer-encoding: message-id:references:in-reply-to:to:cc; bh=1sx5hgMgPsSIl/PcKUCTomxYnHRlrjaft92+/rRZzms=; b=f6E0fY25hsnP2yga+ylQzbCqK/UR6X2Xsb0mnfiiCBSuo97fbGxhQ87+ OxguKuR5afnkNYdo9wXe5VMqSGECNIKNvtFuSpENv37EYncU1MPgvorU5 1YWmGEaQ9/tNH4wSES01LO10XzVtvUp6s0PKq4oy+fBYx+WoArG0RUGar AMJSncZXtvxRX6oOmh6MNVA+MU9PZXn5875GZimBZp6oQB2CCud/vWZ6b Wp0dTRAx4jYevY8OIIrGj/tJFCO3iulRJgfLW+2ltcwrJHpXej+nvbU3j 6SV51u1qLu6P+HhUyGngrJ4Ctmo164++FA1Syf7oEgMCV0w37ab+av9/V A==; X-CSE-ConnectionGUID: /qRWF+KnSwCFVKLRZIxa8g== X-CSE-MsgGUID: bH/lDlXUSBm7uax+SJcjLQ== X-IronPort-AV: E=Sophos;i="6.04,270,1695657600"; d="scan'208";a="4629812" Received: from uls-op-cesaip02.wdc.com (HELO uls-op-cesaep02.wdc.com) ([199.255.45.15]) by ob1.hgst.iphmx.com with ESMTP; 12 Dec 2023 20:38:31 +0800 IronPort-SDR: Zcu8iEFG+rshvP99Jva+7UOWTUW2pfp3Tjhvk9MgZC+WdDKXeOGdqFS1djHiDpDwiJQSzODyVu aPiWG1WmSbWw== Received: from uls-op-cesaip02.wdc.com ([10.248.3.37]) by uls-op-cesaep02.wdc.com with ESMTP/TLS/ECDHE-RSA-AES128-GCM-SHA256; 12 Dec 2023 03:43:44 -0800 IronPort-SDR: IF2uB1LFDxBsYDMIIthw1UW5SVEX6aIqG9iwKBTbl9ammZcgmjnlKLZ89KLkv9sYvZI4S8eqmc gmn75I9LcGRw== WDCIronportException: Internal Received: from unknown (HELO redsun91.ssa.fujisawa.hgst.com) ([10.149.66.6]) by uls-op-cesaip02.wdc.com with ESMTP; 12 Dec 2023 04:38:30 -0800 From: Johannes Thumshirn Date: Tue, 12 Dec 2023 04:38:11 -0800 Subject: [PATCH 13/13] btrfs: pass btrfs_io_geometry into btrfs_max_io_len MIME-Version: 1.0 Message-Id: <20231212-btrfs_map_block-cleanup-v1-13-b2d954d9a55b@wdc.com> References: <20231212-btrfs_map_block-cleanup-v1-0-b2d954d9a55b@wdc.com> In-Reply-To: <20231212-btrfs_map_block-cleanup-v1-0-b2d954d9a55b@wdc.com> To: Chris Mason , Josef Bacik , David Sterba Cc: linux-btrfs@vger.kernel.org, linux-kernel@vger.kernel.org, Johannes Thumshirn X-Mailer: b4 0.12.3 X-Developer-Signature: v=1; a=ed25519-sha256; t=1702384691; l=3139; i=johannes.thumshirn@wdc.com; s=20230613; h=from:subject:message-id; bh=1sx5hgMgPsSIl/PcKUCTomxYnHRlrjaft92+/rRZzms=; b=98BGK4uRkR7z1XT2ETsJTcnrBi4ui/+ejviC/yhcIxHKydQ9dXB3nF8e80OyU079RRKSHXrc2 Id1MqTJEVTND+oxJjoxLazKkYbIjiFrraK+hyESN0v8aoNUkknEiHC+ X-Developer-Key: i=johannes.thumshirn@wdc.com; a=ed25519; pk=TGmHKs78FdPi+QhrViEvjKIGwReUGCfa+3LEnGoR2KM= X-Spam-Status: No, score=-0.6 required=5.0 tests=DKIM_INVALID,DKIM_SIGNED, HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,SPF_HELO_NONE, SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lipwig.vger.email Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (lipwig.vger.email [0.0.0.0]); Tue, 12 Dec 2023 04:39:27 -0800 (PST) X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1785079812757794248 X-GMAIL-MSGID: 1785079812757794248 Instead of passing three individual members of 'struct btrfs_io_geometry' into btrfs_max_io_len(), pass a pointer to btrfs_io_geometry. Signed-off-by: Johannes Thumshirn --- fs/btrfs/volumes.c | 28 +++++++++++++--------------- 1 file changed, 13 insertions(+), 15 deletions(-) diff --git a/fs/btrfs/volumes.c b/fs/btrfs/volumes.c index c1fefe34a194..166750d279ee 100644 --- a/fs/btrfs/volumes.c +++ b/fs/btrfs/volumes.c @@ -6277,16 +6277,15 @@ static void handle_ops_on_dev_replace(enum btrfs_map_op op, } static u64 btrfs_max_io_len(struct btrfs_chunk_map *map, enum btrfs_map_op op, - u64 offset, u32 *stripe_nr, u64 *stripe_offset, - u64 *full_stripe_start) + u64 offset, struct btrfs_io_geometry *io_geom) { /* * Stripe_nr is the stripe where this block falls. stripe_offset is * the offset of this block in its stripe. */ - *stripe_offset = offset & BTRFS_STRIPE_LEN_MASK; - *stripe_nr = offset >> BTRFS_STRIPE_LEN_SHIFT; - ASSERT(*stripe_offset < U32_MAX); + io_geom->stripe_offset = offset & BTRFS_STRIPE_LEN_MASK; + io_geom->stripe_nr = offset >> BTRFS_STRIPE_LEN_SHIFT; + ASSERT(io_geom->stripe_offset < U32_MAX); if (map->type & BTRFS_BLOCK_GROUP_RAID56_MASK) { unsigned long full_stripe_len = @@ -6301,18 +6300,19 @@ static u64 btrfs_max_io_len(struct btrfs_chunk_map *map, enum btrfs_map_op op, * to go rounddown(), not round_down(), as nr_data_stripes is * not ensured to be power of 2. */ - *full_stripe_start = - btrfs_stripe_nr_to_offset( - rounddown(*stripe_nr, nr_data_stripes(map))); + io_geom->raid56_full_stripe_start = btrfs_stripe_nr_to_offset( + rounddown(io_geom->stripe_nr, nr_data_stripes(map))); - ASSERT(*full_stripe_start + full_stripe_len > offset); - ASSERT(*full_stripe_start <= offset); + ASSERT(io_geom->raid56_full_stripe_start + full_stripe_len > + offset); + ASSERT(io_geom->raid56_full_stripe_start <= offset); /* * For writes to RAID56, allow to write a full stripe set, but * no straddling of stripe sets. */ if (op == BTRFS_MAP_WRITE) - return full_stripe_len - (offset - *full_stripe_start); + return full_stripe_len - + (offset - io_geom->raid56_full_stripe_start); } /* @@ -6320,7 +6320,7 @@ static u64 btrfs_max_io_len(struct btrfs_chunk_map *map, enum btrfs_map_op op, * a single disk). */ if (map->type & BTRFS_BLOCK_GROUP_STRIPE_MASK) - return BTRFS_STRIPE_LEN - *stripe_offset; + return BTRFS_STRIPE_LEN - io_geom->stripe_offset; return U64_MAX; } @@ -6559,9 +6559,7 @@ int btrfs_map_block(struct btrfs_fs_info *fs_info, enum btrfs_map_op op, map_offset = logical - map->start; io_geom.raid56_full_stripe_start = (u64)-1; - max_len = btrfs_max_io_len(map, op, map_offset, &io_geom.stripe_nr, - &io_geom.stripe_offset, - &io_geom.raid56_full_stripe_start); + max_len = btrfs_max_io_len(map, op, map_offset, &io_geom); *length = min_t(u64, map->chunk_len - map_offset, max_len); down_read(&dev_replace->rwsem);