diff options
| author | Wenjie Qi <qwjhust@gmail.com> | 2026-08-10 21:38:32 +0800 |
|---|---|---|
| committer | Jaegeuk Kim <jaegeuk@kernel.org> | 2026-08-21 23:42:34 +0000 |
| commit | a2c73a7a677afdaa8b16d775188f9ef5cfbfd8b2 (patch) | |
| tree | bd2b06d59b9bf40f14dfedd45f243c206929bf8f | |
| parent | 11d56d7a8e60d7ee4969b56403da700745aea1af (diff) | |
f2fs: return symlink writeback errors
F2FS writes long symlink data with page_symlink() and then flushes the
symlink mapping to reduce the chance of exposing a broken symlink.
That flush result is currently ignored. If the writeback fails, symlink()
still returns success even though the symlink is not durable and the same
operation can already surface -EIO through syncfs().
Return the writeback error to userspace and skip the dirsync flush once the
symlink data flush has failed.
Fixes: d0cae97cb600 ("f2fs: flush symlink path to avoid broken symlink after POR")
Cc: stable@kernel.org
Signed-off-by: Wenjie Qi <qiwenjie@xiaomi.com>
Reviewed-by: Chao Yu <chao@kernel.org>
Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
| -rw-r--r-- | fs/f2fs/namei.c | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/fs/f2fs/namei.c b/fs/f2fs/namei.c index b9b15c5d28de..a0e902895dd3 100644 --- a/fs/f2fs/namei.c +++ b/fs/f2fs/namei.c @@ -715,15 +715,16 @@ err_out: * performance regression. */ if (!err) { - filemap_write_and_wait_range(inode->i_mapping, 0, - disk_link.len - 1); + err = filemap_write_and_wait_range(inode->i_mapping, 0, + disk_link.len - 1); - if (IS_DIRSYNC(dir)) + if (!err && IS_DIRSYNC(dir)) f2fs_sync_fs(sbi->sb, 1); - } else { - f2fs_unlink(dir, dentry); } + if (err) + f2fs_unlink(dir, dentry); + f2fs_balance_fs(sbi, true); goto out_free_encrypted_link; |
