From patchwork Tue Mar 25 08:06:45 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Chao Yu X-Patchwork-Id: 14028211 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from lists.sourceforge.net (lists.sourceforge.net [216.105.38.7]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 10331C35FFC for ; Tue, 25 Mar 2025 08:07:04 +0000 (UTC) Received: from [127.0.0.1] (helo=sfs-ml-2.v29.lw.sourceforge.com) by sfs-ml-2.v29.lw.sourceforge.com with esmtp (Exim 4.95) (envelope-from ) id 1twzJO-0007QK-U7; Tue, 25 Mar 2025 08:07:03 +0000 Received: from [172.30.29.66] (helo=mx.sourceforge.net) by sfs-ml-2.v29.lw.sourceforge.com with esmtps (TLS1.2) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.95) (envelope-from ) id 1twzJN-0007Q2-7S for linux-f2fs-devel@lists.sourceforge.net; Tue, 25 Mar 2025 08:07:02 +0000 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=sourceforge.net; s=x; h=Content-Transfer-Encoding:MIME-Version:Message-ID: Date:Subject:Cc:To:From:Sender:Reply-To:Content-Type:Content-ID: Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc :Resent-Message-ID:In-Reply-To:References:List-Id:List-Help:List-Unsubscribe: List-Subscribe:List-Post:List-Owner:List-Archive; bh=GYy0xYpQnwYbXqB956CLMkDGYcC9L0FVshgjwjVbsIc=; b=iFxTkTF8RTGo+zZ0YFLoy2t3WP eMKzcqYQ9LpV+gjqRgPp/oTECt7KhqkbofZ+2r2ygnrANhE/jsxRa51gUAAUwnnMZyLaGoWHnxjzL FFhRLUAx7Eje8Q+HtBq3Em4GIy+Sq1lqe3pUdDvQG0a1N1R+okjh3yFrITu09mAOQMYY=; DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=sf.net; s=x ; h=Content-Transfer-Encoding:MIME-Version:Message-ID:Date:Subject:Cc:To:From :Sender:Reply-To:Content-Type:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:In-Reply-To: References:List-Id:List-Help:List-Unsubscribe:List-Subscribe:List-Post: List-Owner:List-Archive; bh=GYy0xYpQnwYbXqB956CLMkDGYcC9L0FVshgjwjVbsIc=; b=h HbwycPUq7SWB3itf5ERF1GHuHIQL7Ad/HNCAcvnFhh0Me1yn3FRXiZWqrKuCdR7Qh+Vy1cMwxjiPX eNpq9BFzELsAjFBL+4WfpVXrfCmT6Scl/re3bolUWa9sITjnQQxUOvLlH9ou6YfKqmG3ulHyN8Uuh Ge1Ght5QrKNrp+w4=; Received: from dfw.source.kernel.org ([139.178.84.217]) by sfi-mx-2.v28.lw.sourceforge.com with esmtps (TLS1.2:ECDHE-RSA-AES256-GCM-SHA384:256) (Exim 4.95) id 1twzJN-0000tf-4P for linux-f2fs-devel@lists.sourceforge.net; Tue, 25 Mar 2025 08:07:01 +0000 Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by dfw.source.kernel.org (Postfix) with ESMTP id C3CA25C46C0; Tue, 25 Mar 2025 08:04:38 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 62576C4CEE4; Tue, 25 Mar 2025 08:06:54 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1742890015; bh=d1/jH92hinFbeqB+glZ2Uw1fPSGgDPmQEFNpJCOf8JY=; h=From:To:Cc:Subject:Date:From; b=O0OlD6aaJhUCv1SQ835KWyeuPRRXoytUKVSY79g1wore4dFkCnCV8AvFZp0zyFAlp VpjZUJL1hoXUXq6nYebTgbGST+z3zYtGNj6Y2L6fkRItn3M74lxxI2x+RqT9XGIjlQ 26yKYDgkUokrqPFRkXyxrGbDQDhKNEzTH29B+WN8o5uLbNKpRxBbizDSZCKdJN9M9F 1pgTMd67peHn8gekSMgbYXi9pjR/kjhejYsuzsyiw6KEl3DLYBfP02iw6BKpLXi4/w r8yZOHgmY/GqrOuJC6qa81n+QTt1HFBn2mJSZoe/FAcgg/H5EItVJ6gBNlNdh8zBKR hv+TIyUei7I9w== To: jaegeuk@kernel.org Date: Tue, 25 Mar 2025 16:06:45 +0800 Message-ID: <20250325080646.3291947-1-chao@kernel.org> X-Mailer: git-send-email 2.49.0.395.g12beb8f557-goog MIME-Version: 1.0 X-Headers-End: 1twzJN-0000tf-4P Subject: [f2fs-dev] [PATCH v2 1/2] f2fs: zone: fix to calculate first_zoned_segno correctly X-BeenThere: linux-f2fs-devel@lists.sourceforge.net X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Chao Yu via Linux-f2fs-devel From: Chao Yu Reply-To: Chao Yu Cc: Daeho Jeong , linux-kernel@vger.kernel.org, linux-f2fs-devel@lists.sourceforge.net Errors-To: linux-f2fs-devel-bounces@lists.sourceforge.net A zoned device can has both conventional zones and sequential zones, so we should not treat first segment of zoned device as first_zoned_segno, instead, we need to check zone type for each zone during traversing zoned device to find first_zoned_segno. Otherwise, for below case, first_zoned_segno will be 0, which could be wrong. create_null_blk 512 2 1024 1024 mkfs.f2fs -m /dev/nullb0 Fixes: 9703d69d9d15 ("f2fs: support file pinning for zoned devices") Cc: Daeho Jeong Signed-off-by: Chao Yu Reviewed-by: Daeho Jeong --- v2: - traverse w/ zone unit in get_first_zoned_segno() fs/f2fs/f2fs.h | 18 +++++++++++++----- fs/f2fs/segment.c | 2 +- fs/f2fs/super.c | 37 +++++++++++++++++++++++++++++++++---- 3 files changed, 47 insertions(+), 10 deletions(-) diff --git a/fs/f2fs/f2fs.h b/fs/f2fs/f2fs.h index ca884e39a5ff..3dea037faa55 100644 --- a/fs/f2fs/f2fs.h +++ b/fs/f2fs/f2fs.h @@ -4630,12 +4630,16 @@ F2FS_FEATURE_FUNCS(readonly, RO); F2FS_FEATURE_FUNCS(device_alias, DEVICE_ALIAS); #ifdef CONFIG_BLK_DEV_ZONED -static inline bool f2fs_blkz_is_seq(struct f2fs_sb_info *sbi, int devi, - block_t blkaddr) +static inline bool f2fs_zone_is_seq(struct f2fs_sb_info *sbi, int devi, + unsigned int zone) { - unsigned int zno = blkaddr / sbi->blocks_per_blkz; + return test_bit(zone, FDEV(devi).blkz_seq); +} - return test_bit(zno, FDEV(devi).blkz_seq); +static inline bool f2fs_blkz_is_seq(struct f2fs_sb_info *sbi, int devi, + block_t blkaddr) +{ + return f2fs_zone_is_seq(sbi, devi, blkaddr / sbi->blocks_per_blkz); } #endif @@ -4711,9 +4715,13 @@ static inline bool f2fs_valid_pinned_area(struct f2fs_sb_info *sbi, block_t blkaddr) { if (f2fs_sb_has_blkzoned(sbi)) { +#ifdef CONFIG_BLK_DEV_ZONED int devi = f2fs_target_device_index(sbi, blkaddr); - return !bdev_is_zoned(FDEV(devi).bdev); + return !f2fs_blkz_is_seq(sbi, devi, blkaddr); +#else + return true; +#endif } return true; } diff --git a/fs/f2fs/segment.c b/fs/f2fs/segment.c index 396ef71f41e3..dc360b4b0569 100644 --- a/fs/f2fs/segment.c +++ b/fs/f2fs/segment.c @@ -3311,7 +3311,7 @@ int f2fs_allocate_pinning_section(struct f2fs_sb_info *sbi) if (f2fs_sb_has_blkzoned(sbi) && err == -EAGAIN && gc_required) { f2fs_down_write(&sbi->gc_lock); - err = f2fs_gc_range(sbi, 0, GET_SEGNO(sbi, FDEV(0).end_blk), + err = f2fs_gc_range(sbi, 0, sbi->first_zoned_segno - 1, true, ZONED_PIN_SEC_REQUIRED_COUNT); f2fs_up_write(&sbi->gc_lock); diff --git a/fs/f2fs/super.c b/fs/f2fs/super.c index 011925ee54f8..9a42a1323f42 100644 --- a/fs/f2fs/super.c +++ b/fs/f2fs/super.c @@ -4307,12 +4307,33 @@ static void f2fs_record_error_work(struct work_struct *work) static inline unsigned int get_first_zoned_segno(struct f2fs_sb_info *sbi) { +#ifdef CONFIG_BLK_DEV_ZONED + unsigned int zoneno, total_zones; int devi; - for (devi = 0; devi < sbi->s_ndevs; devi++) - if (bdev_is_zoned(FDEV(devi).bdev)) - return GET_SEGNO(sbi, FDEV(devi).start_blk); - return 0; + if (!f2fs_sb_has_blkzoned(sbi)) + return NULL_SEGNO; + + for (devi = 0; devi < sbi->s_ndevs; devi++) { + if (!bdev_is_zoned(FDEV(devi).bdev)) + continue; + + total_zones = GET_ZONE_FROM_SEG(sbi, FDEV(devi).total_segments); + + for (zoneno = 0; zoneno < total_zones; zoneno++) { + unsigned int segs, blks; + + if (!f2fs_zone_is_seq(sbi, devi, zoneno)) + continue; + + segs = GET_SEG_FROM_SEC(sbi, + zoneno * sbi->secs_per_zone); + blks = SEGS_TO_BLKS(sbi, segs); + return GET_SEGNO(sbi, FDEV(devi).start_blk + blks); + } + } +#endif + return NULL_SEGNO; } static int f2fs_scan_devices(struct f2fs_sb_info *sbi) @@ -4349,6 +4370,14 @@ static int f2fs_scan_devices(struct f2fs_sb_info *sbi) #endif for (i = 0; i < max_devices; i++) { + if (max_devices == 1) { + FDEV(i).total_segments = + le32_to_cpu(raw_super->segment_count_main); + FDEV(i).start_blk = 0; + FDEV(i).end_blk = FDEV(i).total_segments * + BLKS_PER_SEG(sbi); + } + if (i == 0) FDEV(0).bdev_file = sbi->sb->s_bdev_file; else if (!RDEV(i).path[0]) From patchwork Tue Mar 25 08:06:46 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Chao Yu X-Patchwork-Id: 14028212 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from lists.sourceforge.net (lists.sourceforge.net [216.105.38.7]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 087E5C35FFC for ; Tue, 25 Mar 2025 08:07:21 +0000 (UTC) Received: from [127.0.0.1] (helo=sfs-ml-1.v29.lw.sourceforge.com) by sfs-ml-1.v29.lw.sourceforge.com with esmtp (Exim 4.95) (envelope-from ) id 1twzJh-0003dC-4J; Tue, 25 Mar 2025 08:07:21 +0000 Received: from [172.30.29.66] (helo=mx.sourceforge.net) by sfs-ml-1.v29.lw.sourceforge.com with esmtps (TLS1.2) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.95) (envelope-from ) id 1twzJd-0003bC-2p for linux-f2fs-devel@lists.sourceforge.net; Tue, 25 Mar 2025 08:07:17 +0000 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=sourceforge.net; s=x; h=Content-Transfer-Encoding:MIME-Version:References: In-Reply-To:Message-ID:Date:Subject:Cc:To:From:Sender:Reply-To:Content-Type: Content-ID:Content-Description:Resent-Date:Resent-From:Resent-Sender: Resent-To:Resent-Cc:Resent-Message-ID:List-Id:List-Help:List-Unsubscribe: List-Subscribe:List-Post:List-Owner:List-Archive; bh=Dx4/Gw9Z9yuS8Oa+70nqcIA/zMbW0N+RxMx5oPZTCec=; b=JnWJFlqq44ah5SO54ZlajxMSCE F2LvmbgC5kJ+CvxyuoFKyXrkZf3O6SyY0B5TTvKm0fcYN9V4kk7SLkQqfL+S5q+CEIALsm1hGvk7p OZz5/7pnQKVcEHJnqBwbv8NrcFkACkh2ppxWf66zxXtHdy8/mAcWyh6Qb7RUE2QnKH74=; DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=sf.net; s=x ; h=Content-Transfer-Encoding:MIME-Version:References:In-Reply-To:Message-ID: Date:Subject:Cc:To:From:Sender:Reply-To:Content-Type:Content-ID: Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc :Resent-Message-ID:List-Id:List-Help:List-Unsubscribe:List-Subscribe: List-Post:List-Owner:List-Archive; bh=Dx4/Gw9Z9yuS8Oa+70nqcIA/zMbW0N+RxMx5oPZTCec=; b=G2NP0RONy7SEcVapM8mdXIi4/1 BURTRr9SlfnvvZrQtmBk6FiD5ulb/TDehk340pWE/tsf0/bQCCVX6LHGJuvgH16UzciexpoSbR1WZ eJ//b3etVVL+Sf4/PqML9tfzrdbhPxNpxBsV1S4ffK94MpsrY83ufS6pXS5F0Yq829nc=; Received: from tor.source.kernel.org ([172.105.4.254]) by sfi-mx-2.v28.lw.sourceforge.com with esmtps (TLS1.2:ECDHE-RSA-AES256-GCM-SHA384:256) (Exim 4.95) id 1twzJO-0000uC-US for linux-f2fs-devel@lists.sourceforge.net; Tue, 25 Mar 2025 08:07:13 +0000 Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by tor.source.kernel.org (Postfix) with ESMTP id 3BCBB6158D; Tue, 25 Mar 2025 08:06:53 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id D78C5C4CEEF; Tue, 25 Mar 2025 08:06:55 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1742890017; bh=aK4cVtkeCzV7Vtkp8T5BWdByXypevspHRuz/pAuSwYI=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=oAiLQstlI4Sb3/grA+mB67yXAM8b7Hxv/qSQG0qoCFUffhSwOTqxkt2g2CSLj1lYa FTtgwSEcAGDuCxJrnjygWpLPM48jA026JD2TvzMK1Lv42ixb2B3c4p/BJc8swWRCIE 0YRi3kCd8iHuyea8Xpf+NQc1nrFWKIim2iBXgnJ92kKjoc0kXjZvuIO0TFgB841qqH iubAJUIT5/6Ywj188fKtk3Yd4Z0Woz4AMEib11XiwuFv817j59pecV7lKl/YmTgFES X6pKXs1bwPhui1H3J0e3+8DljOElw4p+m9M4fIV466mpnLl9Klz6EfpMtaHgbTM3PV 4WvDEcnqJj4dA== To: jaegeuk@kernel.org Date: Tue, 25 Mar 2025 16:06:46 +0800 Message-ID: <20250325080646.3291947-2-chao@kernel.org> X-Mailer: git-send-email 2.49.0.395.g12beb8f557-goog In-Reply-To: <20250325080646.3291947-1-chao@kernel.org> References: <20250325080646.3291947-1-chao@kernel.org> MIME-Version: 1.0 X-Headers-End: 1twzJO-0000uC-US Subject: [f2fs-dev] [PATCH v2 2/2] f2fs: zone: fix to avoid inconsistence in between SIT and SSA X-BeenThere: linux-f2fs-devel@lists.sourceforge.net X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Chao Yu via Linux-f2fs-devel From: Chao Yu Reply-To: Chao Yu Cc: Daeho Jeong , linux-kernel@vger.kernel.org, linux-f2fs-devel@lists.sourceforge.net Errors-To: linux-f2fs-devel-bounces@lists.sourceforge.net w/ below testcase, it will cause inconsistence in between SIT and SSA. create_null_blk 512 2 1024 1024 mkfs.f2fs -m /dev/nullb0 mount /dev/nullb0 /mnt/f2fs/ touch /mnt/f2fs/file f2fs_io pinfile set /mnt/f2fs/file fallocate -l 4GiB /mnt/f2fs/file F2FS-fs (nullb0): Inconsistent segment (0) type [1, 0] in SSA and SIT CPU: 5 UID: 0 PID: 2398 Comm: fallocate Tainted: G O 6.13.0-rc1 #84 Tainted: [O]=OOT_MODULE Hardware name: innotek GmbH VirtualBox/VirtualBox, BIOS VirtualBox 12/01/2006 Call Trace: dump_stack_lvl+0xb3/0xd0 dump_stack+0x14/0x20 f2fs_handle_critical_error+0x18c/0x220 [f2fs] f2fs_stop_checkpoint+0x38/0x50 [f2fs] do_garbage_collect+0x674/0x6e0 [f2fs] f2fs_gc_range+0x12b/0x230 [f2fs] f2fs_allocate_pinning_section+0x5c/0x150 [f2fs] f2fs_expand_inode_data+0x1cc/0x3c0 [f2fs] f2fs_fallocate+0x3c3/0x410 [f2fs] vfs_fallocate+0x15f/0x4b0 __x64_sys_fallocate+0x4a/0x80 x64_sys_call+0x15e8/0x1b80 do_syscall_64+0x68/0x130 entry_SYSCALL_64_after_hwframe+0x67/0x6f RIP: 0033:0x7f9dba5197ca F2FS-fs (nullb0): Stopped filesystem due to reason: 4 The reason is f2fs_gc_range() may try to migrate block in curseg, however, its SSA block is not uptodate due to the last summary block data is still in cache of curseg. In this patch, we add a condition in f2fs_gc_range() to check whether section is opened or not, and skip block migration for opened section. Fixes: 9703d69d9d15 ("f2fs: support file pinning for zoned devices") Reviewed-by: Daeho Jeong Cc: Daeho Jeong Signed-off-by: Chao Yu --- v2: - add rvb tag from Daeho fs/f2fs/gc.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/fs/f2fs/gc.c b/fs/f2fs/gc.c index 2b8f9239bede..8b5a55b72264 100644 --- a/fs/f2fs/gc.c +++ b/fs/f2fs/gc.c @@ -2066,6 +2066,9 @@ int f2fs_gc_range(struct f2fs_sb_info *sbi, .iroot = RADIX_TREE_INIT(gc_list.iroot, GFP_NOFS), }; + if (IS_CURSEC(sbi, GET_SEC_FROM_SEG(sbi, segno))) + continue; + do_garbage_collect(sbi, segno, &gc_list, FG_GC, true, false); put_gc_inode(&gc_list);