mirror of
https://github.com/torvalds/linux.git
synced 2025-12-07 20:06:24 +00:00
erofs: unify meta buffers in z_erofs_fill_inode()
There is no need to keep additional local metabufs since we already
have one in `struct erofs_map_blocks`.
This was actually a leftover when applying meta buffers to zmap
operations, see commit 09c543798c ("erofs: use meta buffers for
zmap operations").
Signed-off-by: Gao Xiang <hsiangkao@linux.alibaba.com>
Link: https://lore.kernel.org/r/20250716064152.3537457-1-hsiangkao@linux.alibaba.com
This commit is contained in:
@@ -620,13 +620,12 @@ static int z_erofs_map_blocks_ext(struct inode *inode,
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int z_erofs_fill_inode_lazy(struct inode *inode)
|
||||
static int z_erofs_fill_inode(struct inode *inode, struct erofs_map_blocks *map)
|
||||
{
|
||||
struct erofs_inode *const vi = EROFS_I(inode);
|
||||
struct super_block *const sb = inode->i_sb;
|
||||
int err, headnr;
|
||||
erofs_off_t pos;
|
||||
struct erofs_buf buf = __EROFS_BUF_INITIALIZER;
|
||||
struct z_erofs_map_header *h;
|
||||
|
||||
if (test_bit(EROFS_I_Z_INITED_BIT, &vi->flags)) {
|
||||
@@ -646,7 +645,7 @@ static int z_erofs_fill_inode_lazy(struct inode *inode)
|
||||
goto out_unlock;
|
||||
|
||||
pos = ALIGN(erofs_iloc(inode) + vi->inode_isize + vi->xattr_isize, 8);
|
||||
h = erofs_read_metabuf(&buf, sb, pos);
|
||||
h = erofs_read_metabuf(&map->buf, sb, pos);
|
||||
if (IS_ERR(h)) {
|
||||
err = PTR_ERR(h);
|
||||
goto out_unlock;
|
||||
@@ -684,7 +683,7 @@ static int z_erofs_fill_inode_lazy(struct inode *inode)
|
||||
erofs_err(sb, "unknown HEAD%u format %u for nid %llu, please upgrade kernel",
|
||||
headnr + 1, vi->z_algorithmtype[headnr], vi->nid);
|
||||
err = -EOPNOTSUPP;
|
||||
goto out_put_metabuf;
|
||||
goto out_unlock;
|
||||
}
|
||||
|
||||
if (!erofs_sb_has_big_pcluster(EROFS_SB(sb)) &&
|
||||
@@ -693,7 +692,7 @@ static int z_erofs_fill_inode_lazy(struct inode *inode)
|
||||
erofs_err(sb, "per-inode big pcluster without sb feature for nid %llu",
|
||||
vi->nid);
|
||||
err = -EFSCORRUPTED;
|
||||
goto out_put_metabuf;
|
||||
goto out_unlock;
|
||||
}
|
||||
if (vi->datalayout == EROFS_INODE_COMPRESSED_COMPACT &&
|
||||
!(vi->z_advise & Z_EROFS_ADVISE_BIG_PCLUSTER_1) ^
|
||||
@@ -701,27 +700,25 @@ static int z_erofs_fill_inode_lazy(struct inode *inode)
|
||||
erofs_err(sb, "big pcluster head1/2 of compact indexes should be consistent for nid %llu",
|
||||
vi->nid);
|
||||
err = -EFSCORRUPTED;
|
||||
goto out_put_metabuf;
|
||||
goto out_unlock;
|
||||
}
|
||||
|
||||
if (vi->z_idata_size ||
|
||||
(vi->z_advise & Z_EROFS_ADVISE_FRAGMENT_PCLUSTER)) {
|
||||
struct erofs_map_blocks map = {
|
||||
struct erofs_map_blocks tm = {
|
||||
.buf = __EROFS_BUF_INITIALIZER
|
||||
};
|
||||
|
||||
err = z_erofs_map_blocks_fo(inode, &map,
|
||||
err = z_erofs_map_blocks_fo(inode, &tm,
|
||||
EROFS_GET_BLOCKS_FINDTAIL);
|
||||
erofs_put_metabuf(&map.buf);
|
||||
erofs_put_metabuf(&tm.buf);
|
||||
if (err < 0)
|
||||
goto out_put_metabuf;
|
||||
goto out_unlock;
|
||||
}
|
||||
done:
|
||||
/* paired with smp_mb() at the beginning of the function */
|
||||
smp_mb();
|
||||
set_bit(EROFS_I_Z_INITED_BIT, &vi->flags);
|
||||
out_put_metabuf:
|
||||
erofs_put_metabuf(&buf);
|
||||
out_unlock:
|
||||
clear_and_wake_up_bit(EROFS_I_BL_Z_BIT, &vi->flags);
|
||||
return err;
|
||||
@@ -739,7 +736,7 @@ int z_erofs_map_blocks_iter(struct inode *inode, struct erofs_map_blocks *map,
|
||||
map->m_la = inode->i_size;
|
||||
map->m_flags = 0;
|
||||
} else {
|
||||
err = z_erofs_fill_inode_lazy(inode);
|
||||
err = z_erofs_fill_inode(inode, map);
|
||||
if (!err) {
|
||||
if (vi->datalayout == EROFS_INODE_COMPRESSED_FULL &&
|
||||
(vi->z_advise & Z_EROFS_ADVISE_EXTENTS))
|
||||
|
||||
Reference in New Issue
Block a user