From: Sasha Levin <sashal@kernel.org>
To: patches@lists.linux.dev, stable@vger.kernel.org
Cc: Jaegeuk Kim <jaegeuk@kernel.org>, Chao Yu <chao@kernel.org>,
Sasha Levin <sashal@kernel.org>,
linux-f2fs-devel@lists.sourceforge.net
Subject: [PATCH AUTOSEL 6.16-6.6] f2fs: check the generic conditions first
Date: Fri, 8 Aug 2025 13:41:42 -0400 [thread overview]
Message-ID: <20250808174146.1272242-2-sashal@kernel.org> (raw)
In-Reply-To: <20250808174146.1272242-1-sashal@kernel.org>
From: Jaegeuk Kim <jaegeuk@kernel.org>
[ Upstream commit e23ab8028de0d92df5921a570f5212c0370db3b5 ]
Let's return errors caught by the generic checks. This fixes generic/494 where
it expects to see EBUSY by setattr_prepare instead of EINVAL by f2fs for active
swapfile.
Reviewed-by: Chao Yu <chao@kernel.org>
Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
LLM Generated explanations, may be completely bogus:
**Backport Status: YES**
This commit should be backported to stable kernel trees for the
following reasons:
## Bug Fix Analysis
1. **Fixes a real bug affecting users**: The commit fixes incorrect
error code handling for swapfiles. When attempting to modify an
active swapfile, f2fs was returning `-EINVAL` instead of the correct
`-EBUSY` error code. This breaks userspace expectations and causes
test failures in `generic/494`.
2. **Small and contained fix**: The change is minimal - it simply
reorders the error checking sequence in `f2fs_setattr()` to call
generic checks (`setattr_prepare`, `fscrypt_prepare_setattr`,
`fsverity_prepare_setattr`) before f2fs-specific checks. The code
movement involves only 12 lines being relocated within the same
function.
## Technical Details
The commit moves three generic preparation calls from lines 1055-1065
(after f2fs-specific checks) to lines 1055-1065 (before f2fs-specific
checks). This ensures that:
- `setattr_prepare()` gets called first, which contains the
`IS_SWAPFILE()` check that returns `-ETXTBSY` (which gets translated
to `-EBUSY`)
- The generic VFS layer error codes are returned consistently with other
filesystems
- F2fs-specific validation (like compression, pinned file checks) only
happens after generic validation passes
## Risk Assessment
1. **Minimal regression risk**: The change only reorders existing checks
without adding new logic or modifying the checks themselves. All the
same validation still occurs, just in a different order.
2. **Follows stable tree rules**: This is a clear bugfix that:
- Fixes incorrect error reporting to userspace
- Makes f2fs behavior consistent with VFS expectations
- Fixes a specific test case (`generic/494`) that validates correct
swapfile handling
- Has no feature additions or architectural changes
3. **Limited scope**: The change is confined to a single function in the
f2fs subsystem and doesn't affect any other kernel components.
4. **Already reviewed**: The commit has been reviewed by a subsystem
maintainer (Chao Yu) and merged by the f2fs maintainer (Jaegeuk Kim).
The incorrect error code could potentially confuse userspace
applications that rely on specific error codes to determine why an
operation failed. Returning `-EINVAL` (invalid argument) instead of
`-EBUSY` (resource busy) for an active swapfile is semantically
incorrect and breaks POSIX compliance expectations.
fs/f2fs/file.c | 24 ++++++++++++------------
1 file changed, 12 insertions(+), 12 deletions(-)
diff --git a/fs/f2fs/file.c b/fs/f2fs/file.c
index 696131e655ed..bb3fd6a8416f 100644
--- a/fs/f2fs/file.c
+++ b/fs/f2fs/file.c
@@ -1047,6 +1047,18 @@ int f2fs_setattr(struct mnt_idmap *idmap, struct dentry *dentry,
if (unlikely(f2fs_cp_error(F2FS_I_SB(inode))))
return -EIO;
+ err = setattr_prepare(idmap, dentry, attr);
+ if (err)
+ return err;
+
+ err = fscrypt_prepare_setattr(dentry, attr);
+ if (err)
+ return err;
+
+ err = fsverity_prepare_setattr(dentry, attr);
+ if (err)
+ return err;
+
if (unlikely(IS_IMMUTABLE(inode)))
return -EPERM;
@@ -1065,18 +1077,6 @@ int f2fs_setattr(struct mnt_idmap *idmap, struct dentry *dentry,
return -EINVAL;
}
- err = setattr_prepare(idmap, dentry, attr);
- if (err)
- return err;
-
- err = fscrypt_prepare_setattr(dentry, attr);
- if (err)
- return err;
-
- err = fsverity_prepare_setattr(dentry, attr);
- if (err)
- return err;
-
if (is_quota_modification(idmap, inode, attr)) {
err = f2fs_dquot_initialize(inode);
if (err)
--
2.39.5
next prev parent reply other threads:[~2025-08-08 17:41 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-08-08 17:41 [PATCH AUTOSEL 6.16-6.6] exfat: add cluster chain loop check for dir Sasha Levin
2025-08-08 17:41 ` Sasha Levin [this message]
2025-08-08 17:41 ` [PATCH AUTOSEL 6.16-5.10] i2c: Force DLL0945 touchpad i2c freq to 100khz Sasha Levin
2025-08-08 17:41 ` [PATCH AUTOSEL 6.16-6.12] printk: nbcon: Allow reacquire during panic Sasha Levin
2025-08-08 17:41 ` [PATCH AUTOSEL 6.16] f2fs: handle nat.blkaddr corruption in f2fs_get_node_info() Sasha Levin
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20250808174146.1272242-2-sashal@kernel.org \
--to=sashal@kernel.org \
--cc=chao@kernel.org \
--cc=jaegeuk@kernel.org \
--cc=linux-f2fs-devel@lists.sourceforge.net \
--cc=patches@lists.linux.dev \
--cc=stable@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox