diff options
| author | mason.zhang <masonzhang.linuxer@gmail.com> | 2025-07-31 23:19:17 +0800 |
|---|---|---|
| committer | Jaegeuk Kim <jaegeuk@kernel.org> | 2025-08-11 17:03:27 +0000 |
| commit | 76bb6a72bc1daa3d973395349f366231768f8877 (patch) | |
| tree | a8b7b7d34c86265aa500c7761cb099d83fd02f23 | |
| parent | f2fs: fix condition in __allow_reserved_blocks() (diff) | |
| download | linux-76bb6a72bc1daa3d973395349f366231768f8877.tar.gz linux-76bb6a72bc1daa3d973395349f366231768f8877.zip | |
f2fs: add error checking in do_write_page()
Otherwise, the filesystem may unaware of potential file corruption.
Signed-off-by: mason.zhang <masonzhang.linuxer@gmail.com>
Reviewed-by: Chao Yu <chao@kernel.org>
Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
| -rw-r--r-- | fs/f2fs/segment.c | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/fs/f2fs/segment.c b/fs/f2fs/segment.c index cc82d42ef14c..04b0a3c1804d 100644 --- a/fs/f2fs/segment.c +++ b/fs/f2fs/segment.c @@ -3936,12 +3936,18 @@ static void do_write_page(struct f2fs_summary *sum, struct f2fs_io_info *fio) int seg_type = log_type_to_seg_type(type); bool keep_order = (f2fs_lfs_mode(fio->sbi) && seg_type == CURSEG_COLD_DATA); + int err; if (keep_order) f2fs_down_read(&fio->sbi->io_order_lock); - if (f2fs_allocate_data_block(fio->sbi, folio, fio->old_blkaddr, - &fio->new_blkaddr, sum, type, fio)) { + err = f2fs_allocate_data_block(fio->sbi, folio, fio->old_blkaddr, + &fio->new_blkaddr, sum, type, fio); + if (unlikely(err)) { + f2fs_err_ratelimited(fio->sbi, + "%s Failed to allocate data block, ino:%u, index:%lu, type:%d, old_blkaddr:0x%x, new_blkaddr:0x%x, err:%d", + __func__, fio->ino, folio->index, type, + fio->old_blkaddr, fio->new_blkaddr, err); if (fscrypt_inode_uses_fs_layer_crypto(folio->mapping->host)) fscrypt_finalize_bounce_page(&fio->encrypted_page); folio_end_writeback(folio); |
