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 E54122E739D for ; Mon, 3 Aug 2026 08:31:50 +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=1785745912; cv=none; b=TGYXlmPBSSi2t22W4EF9xJgWIfkwUdeE8nyIs3k5OBqhRmZ2oepIRY43NQaSGPow72WUuQpAXLJg5mJ6ZEMGgoL69cesXknHpSQ/VvL96HDN6AWjHF5CxS1/ecwDupde7d5tKKu/oD5veR0lVAYmaQqX7KX4doneWxB1zlQ0+JQ= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785745912; c=relaxed/simple; bh=oA5Uefng1uYeisRznCJdjBAE/ZsRnIeOz71Jt3JDzUo=; h=Message-ID:Date:MIME-Version:Cc:Subject:To:References:From: In-Reply-To:Content-Type; b=PPRhUo7xIVFAhmJHVjuU0TactiGGT6vzt0txzGTuLHQDwh21nTA1m3PaZjNSkfAuI51i9ODThI5c9G0zlafl17AMb8TGB2AUbDdID7mjHfzrkZbpnr0d5pBajkYtcTsajK0SHYVHKUFD1Fc1GwZSqnsWxyh3/1+R2dSfmekPz84= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=LGexNPbB; 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="LGexNPbB" Received: by smtp.kernel.org (Postfix) with ESMTPSA id F017E1F000E9; Mon, 3 Aug 2026 08:31:48 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1785745910; bh=DPiARhLzgbV1ijWyMAdiUKUG4TwdCKGwgqVX1k8T/ok=; h=Date:Cc:Subject:To:References:From:In-Reply-To; b=LGexNPbBQXnSBoG4+anPlM8bf0Tc/Ja4Hec70fLlz4tQUPEFzHjp+ghTwu4Arwc4T 9Cutu6LQhZWk4wiHBvCuLRI+eSmMSxJaeT2GHNH+8saYMAN6fkpmZhJKX1DowewjTU UrDSzqjGq4WjyqkkysNYfnGgis9695xfUbi2wV9Va3wwaGsb6VarcXYd+WUqq05P0J XfNpHDkDmlve7kEJrhhW5lyxg3AQS9+zGEd/UvroAjbNR34KfVj3BfJsSWTB9TqCKg khwm9TY6kefXyOCcdIEVkpnx+fh8qOcRq9V9tu97Z47GjSh17EVfPfahTAwgm1twn+ F1sjtOvflKXJg== Message-ID: Date: Mon, 3 Aug 2026 16:31:46 +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, linux-f2fs-devel@lists.sourceforge.net, linux-kernel@vger.kernel.org, qiwenjie@xiaomi.com, stable@kernel.org Subject: Re: [PATCH] f2fs: avoid stale FI_COMPRESS_RELEASED on release failure To: Wenjie Qi , jaegeuk@kernel.org References: <20260724135026.500859-1-qiwenjie@xiaomi.com> Content-Language: en-US From: Chao Yu In-Reply-To: <20260724135026.500859-1-qiwenjie@xiaomi.com> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit On 7/24/26 21:50, Wenjie Qi wrote: > F2FS_IOC_RELEASE_COMPRESS_BLOCKS sets FI_COMPRESS_RELEASED before walking > data nodes. If release_compress_blocks() fails before freeing any reserved > block, the inode keeps the flag while i_compr_blocks is still non-zero. > > Then F2FS_IOC_RESERVE_COMPRESS_BLOCKS returns success with zero reserved > blocks, and regular writes keep failing with -EPERM. > > Set the flag only after the ioctl succeeds, or after it has actually > released some blocks. This preserves the existing partial-release error > handling and leaves a failed zero-release attempt unchanged. > > Fixes: ef8d563f184e ("f2fs: introduce F2FS_IOC_RELEASE_COMPRESS_BLOCKS") > Cc: stable@kernel.org > Signed-off-by: Wenjie Qi > --- > QEMU fault-injection test with FAULT_BLKADDR_VALIDITY: > - before: release failed with -EFSCORRUPTED, reserve returned 0 blocks, > and pwrite kept failing with -EPERM after remount. > - after: release still failed, reserve returned -EINVAL, and pwrite succeeded. > - normal release/reserve still released and reserved 192 blocks. > > fs/f2fs/file.c | 10 ++++++---- > 1 file changed, 6 insertions(+), 4 deletions(-) > > diff --git a/fs/f2fs/file.c b/fs/f2fs/file.c > index c54897a25981..dca1722f92b3 100644 > --- a/fs/f2fs/file.c > +++ b/fs/f2fs/file.c > @@ -3916,10 +3916,6 @@ static int f2fs_release_compress_blocks(struct file *filp, unsigned long arg) > goto out; > } > > - set_inode_flag(inode, FI_COMPRESS_RELEASED); > - inode_set_ctime_current(inode); > - f2fs_mark_inode_dirty_sync(inode, true); > - > f2fs_down_write(&fi->i_gc_rwsem[WRITE]); > filemap_invalidate_lock(inode->i_mapping); > > @@ -3963,6 +3959,12 @@ static int f2fs_release_compress_blocks(struct file *filp, unsigned long arg) > > filemap_invalidate_unlock(inode->i_mapping); > f2fs_up_write(&fi->i_gc_rwsem[WRITE]); > + > + if (ret >= 0 || released_blocks) { We will set FI_COMPRESS_RELEASED if ret < 0 and released_blocks > 0? Thanks, > + set_inode_flag(inode, FI_COMPRESS_RELEASED); > + inode_set_ctime_current(inode); > + f2fs_mark_inode_dirty_sync(inode, true); > + } > out: > if (released_blocks) > f2fs_update_time(sbi, REQ_TIME);