diff options
author | Christoph Hellwig <hch@lst.de> | 2022-11-28 10:15:22 +0100 |
---|---|---|
committer | Jaegeuk Kim <jaegeuk@kernel.org> | 2023-01-06 15:13:36 -0800 |
commit | 817c968b79d02588370e3d1dc5e5961cfd57d2b1 (patch) | |
tree | d26da1c6b45acc620089cf1b32c3ea22e8f9141b /fs/f2fs | |
parent | 0094e98bd1477a6b7d97c25b47b19a7317c35279 (diff) | |
download | linux-817c968b79d02588370e3d1dc5e5961cfd57d2b1.tar.gz linux-817c968b79d02588370e3d1dc5e5961cfd57d2b1.tar.bz2 linux-817c968b79d02588370e3d1dc5e5961cfd57d2b1.zip |
f2fs: factor out a f2fs_map_no_dnode
Factor out a helper to return a hole when no dnode was found.
Signed-off-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Chao Yu <chao@kernel.org>
Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
Diffstat (limited to 'fs/f2fs')
-rw-r--r-- | fs/f2fs/data.c | 47 |
1 files changed, 24 insertions, 23 deletions
diff --git a/fs/f2fs/data.c b/fs/f2fs/data.c index cb77f64e521e..2f05d6f75083 100644 --- a/fs/f2fs/data.c +++ b/fs/f2fs/data.c @@ -1472,6 +1472,28 @@ int f2fs_get_block_locked(struct dnode_of_data *dn, pgoff_t index) return err; } +static int f2fs_map_no_dnode(struct inode *inode, + struct f2fs_map_blocks *map, struct dnode_of_data *dn, + pgoff_t pgoff) +{ + struct f2fs_sb_info *sbi = F2FS_I_SB(inode); + + /* + * There is one exceptional case that read_node_page() may return + * -ENOENT due to filesystem has been shutdown or cp_error, return + * -EIO in that case. + */ + if (map->m_may_create && + (is_sbi_flag_set(sbi, SBI_IS_SHUTDOWN) || f2fs_cp_error(sbi))) + return -EIO; + + if (map->m_next_pgofs) + *map->m_next_pgofs = f2fs_get_next_page_offset(dn, pgoff); + if (map->m_next_extent) + *map->m_next_extent = f2fs_get_next_page_offset(dn, pgoff); + return 0; +} + static bool f2fs_map_blocks_cached(struct inode *inode, struct f2fs_map_blocks *map, int flag) { @@ -1553,29 +1575,8 @@ next_dnode: if (err) { if (flag == F2FS_GET_BLOCK_BMAP) map->m_pblk = 0; - - if (err == -ENOENT) { - /* - * There is one exceptional case that read_node_page() - * may return -ENOENT due to filesystem has been - * shutdown or cp_error, so force to convert error - * number to EIO for such case. - */ - if (map->m_may_create && - (is_sbi_flag_set(sbi, SBI_IS_SHUTDOWN) || - f2fs_cp_error(sbi))) { - err = -EIO; - goto unlock_out; - } - - err = 0; - if (map->m_next_pgofs) - *map->m_next_pgofs = - f2fs_get_next_page_offset(&dn, pgofs); - if (map->m_next_extent) - *map->m_next_extent = - f2fs_get_next_page_offset(&dn, pgofs); - } + if (err == -ENOENT) + err = f2fs_map_no_dnode(inode, map, &dn, pgofs); goto unlock_out; } |