From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id DFCA0238C2A for ; Wed, 19 Aug 2026 01:56:04 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787104566; cv=none; b=PynsiBrKRMEWV4oJ9Haqnz30m8P6PptuZryDk6VkH4PYJEe6kHZCIRLLN+cVbom9L5inkBD9CWeUj0lxxIvO4r38mE4vnzWxcIXrHnEFv1j+rzLh/pK9nv8dvEcPs9Dapz2LPws0eDCgckiHl2Aw32Uocsapn5FobqjhggDXcu4= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787104566; c=relaxed/simple; bh=K2AEVYfHmvH7YAFCV6SLQ/cy2SD8ZVpuArb++mahI2g=; h=Message-ID:Date:MIME-Version:Cc:Subject:To:References:From: In-Reply-To:Content-Type; b=thG58a62E0URYcfgiF7k0t/kTQsG4d0VV13J4LUj87o3Issu1na6H6IUWJ7yQx3HTO1jRwn/GEzWopMxn2mo/WhGXS8jL9uFNLnTXJjIx7PQfJTzcv/hftUt1DBpNr5tuc+ye5X190d0SBsdrU3ijD6ZVYTNMVh29xUhFwB1jFQ= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=P/tsCXXb; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="P/tsCXXb" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 8623B1F000E9; Wed, 19 Aug 2026 01:56:03 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1787104564; bh=vNdNDPovsZb3v1itBtf61PsshCxrSN/GzcDvtjBPKJQ=; h=Date:Cc:Subject:To:References:From:In-Reply-To; b=P/tsCXXbzX0a/LhA8TBEVPiKezZUp/ZwFnQV7EudWyxjMVEbGaXPgCxF46eTQcDLw DQ0MxNryorcszkKMFCR6Bc4R24iJvJlNsZW/bBzpMjk5pgvLQVGy+JFDV6C+sDP+PE BwwgQ8nSik6Bqyq3z98lBrAVoUxtCp8lUicRXHCXYNmdVv6K9k5sc0/dJSh17ZAHVq tnchA9chnbqboELWfMuA4lUdvDQKkXibC7qyscLQl8dcmsufKiFpzG29VTukLOjf7F I6TxLVS9Hq2gEHpD+oqAiu7Te2hGcqzuERBC+VOcDUKYw/qzGlktNdzoFD6+XM7bhN 3hmPgNZyDNWlQ== Message-ID: Date: Wed, 19 Aug 2026 09:56:02 +0800 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Cc: chao@kernel.org, Daeho Jeong Subject: Re: [f2fs-dev] [PATCH] f2fs: fix to migrate all curseg types during free_segment_range To: Daeho Jeong , linux-kernel@vger.kernel.org, linux-f2fs-devel@lists.sourceforge.net, kernel-team@android.com References: <20260818170018.3132110-1-daeho43@gmail.com> Content-Language: en-US From: Chao Yu In-Reply-To: <20260818170018.3132110-1-daeho43@gmail.com> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit On 8/19/26 01:00, Daeho Jeong wrote: > From: Daeho Jeong > > In free_segment_range(), the curseg evacuation loop only iterates up to > NR_CURSEG_PERSIST_TYPE (0..5), missing non-persistent in-memory curseg > types such as CURSEG_COLD_DATA_PINNED and CURSEG_ALL_DATA_ATGC. > > Even though these in-memory curseg types are not saved in the on-disk > checkpoint header, they still occupy active physical segments at runtime. > If an active in-memory curseg happens to be allocated within the segment > range being truncated during filesystem shrink, failing to evacuate it > will cause subsequent writes to the curseg attempting out-of-bounds I/O > on the truncated storage range. > > Fix this by expanding the curseg evacuation loop upper bound to > NR_CURSEG_TYPE to ensure all active curseg types are safely migrated > out of the target range. > Need fixes and Cc stable line. > Signed-off-by: Daeho Jeong > Signed-off-by: Sunmin Jeong > --- > fs/f2fs/gc.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/fs/f2fs/gc.c b/fs/f2fs/gc.c > index ffaa7ba76a1b..192b16ac02f8 100644 > --- a/fs/f2fs/gc.c > +++ b/fs/f2fs/gc.c > @@ -2222,7 +2222,7 @@ static int free_segment_range(struct f2fs_sb_info *sbi, > mutex_unlock(&DIRTY_I(sbi)->seglist_lock); > > /* Move out cursegs from the target range */ > - for (type = CURSEG_HOT_DATA; type < NR_CURSEG_PERSIST_TYPE; type++) { > + for (type = CURSEG_HOT_DATA; type < NR_CURSEG_TYPE; type++) { > err = f2fs_allocate_segment_for_resize(sbi, type, start, end); > if (err) > goto out;