[PATCH 2/9] erofs-utils: lib: convert erofs_read_metabuf() to erofs_bread() for xattr
Gao Xiang
hsiangkao at linux.alibaba.com
Thu Dec 25 05:31:24 AEDT 2025
Source kernel commit: 9c39ec0cff4e9373ab238120ca45a50c703dbb4e
Signed-off-by: Gao Xiang <hsiangkao at linux.alibaba.com>
---
lib/xattr.c | 31 ++++++++++++++++---------------
1 file changed, 16 insertions(+), 15 deletions(-)
diff --git a/lib/xattr.c b/lib/xattr.c
index 4ef27d446bb8..9e329ff77bf8 100644
--- a/lib/xattr.c
+++ b/lib/xattr.c
@@ -1099,7 +1099,7 @@ struct xattr_iter {
unsigned int ofs;
};
-static int init_inode_xattrs(struct erofs_inode *vi)
+static int erofs_init_inode_xattrs(struct erofs_inode *vi)
{
struct erofs_sb_info *sbi = vi->sbi;
struct xattr_iter it;
@@ -1133,11 +1133,12 @@ static int init_inode_xattrs(struct erofs_inode *vi)
}
it.buf = __EROFS_BUF_INITIALIZER;
+ erofs_init_metabuf(&it.buf, sbi, false);
it.blkaddr = erofs_blknr(sbi, erofs_iloc(vi) + vi->inode_isize);
it.ofs = erofs_blkoff(sbi, erofs_iloc(vi) + vi->inode_isize);
/* read in shared xattr array (non-atomic, see kmalloc below) */
- it.kaddr = erofs_read_metabuf(&it.buf, sbi, erofs_pos(sbi, it.blkaddr), false);
+ it.kaddr = erofs_bread(&it.buf, erofs_pos(sbi, it.blkaddr), true);
if (IS_ERR(it.kaddr))
return PTR_ERR(it.kaddr);
@@ -1158,8 +1159,8 @@ static int init_inode_xattrs(struct erofs_inode *vi)
/* cannot be unaligned */
DBG_BUGON(it.ofs != erofs_blksiz(sbi));
- it.kaddr = erofs_read_metabuf(&it.buf, sbi,
- erofs_pos(sbi, ++it.blkaddr), false);
+ it.kaddr = erofs_bread(&it.buf,
+ erofs_pos(sbi, ++it.blkaddr), true);
if (IS_ERR(it.kaddr)) {
free(vi->xattr_shared_xattrs);
vi->xattr_shared_xattrs = NULL;
@@ -1200,8 +1201,7 @@ static inline int xattr_iter_fixup(struct xattr_iter *it)
return 0;
it->blkaddr += erofs_blknr(sbi, it->ofs);
- it->kaddr = erofs_read_metabuf(&it->buf, sbi,
- erofs_pos(sbi, it->blkaddr), false);
+ it->kaddr = erofs_bread(&it->buf, erofs_pos(sbi, it->blkaddr), true);
if (IS_ERR(it->kaddr))
return PTR_ERR(it->kaddr);
it->ofs = erofs_blkoff(sbi, it->ofs);
@@ -1225,8 +1225,7 @@ static int inline_xattr_iter_begin(struct xattr_iter *it,
it->blkaddr = erofs_blknr(sbi, erofs_iloc(vi) + inline_xattr_ofs);
it->ofs = erofs_blkoff(sbi, erofs_iloc(vi) + inline_xattr_ofs);
- it->kaddr = erofs_read_metabuf(&it->buf, sbi,
- erofs_pos(sbi, it->blkaddr), false);
+ it->kaddr = erofs_bread(&it->buf, erofs_pos(sbi, it->blkaddr), true);
if (IS_ERR(it->kaddr))
return PTR_ERR(it->kaddr);
return vi->xattr_isize - xattr_header_sz;
@@ -1450,8 +1449,8 @@ static int shared_getxattr(struct erofs_inode *vi, struct getxattr_iter *it)
xattrblock_addr(vi, vi->xattr_shared_xattrs[i]);
it->it.ofs = xattrblock_offset(vi, vi->xattr_shared_xattrs[i]);
- it->it.kaddr = erofs_read_metabuf(&it->it.buf, sbi,
- erofs_pos(sbi, blkaddr), false);
+ it->it.kaddr = erofs_bread(&it->it.buf,
+ erofs_pos(sbi, blkaddr), true);
if (IS_ERR(it->it.kaddr))
return PTR_ERR(it->it.kaddr);
it->it.blkaddr = blkaddr;
@@ -1474,20 +1473,21 @@ int erofs_getxattr(struct erofs_inode *vi, const char *name, char *buffer,
if (!name)
return -EINVAL;
- ret = init_inode_xattrs(vi);
+ ret = erofs_init_inode_xattrs(vi);
if (ret)
return ret;
if (!erofs_xattr_prefix_matches(name, &prefix, &prefixlen))
return -ENODATA;
- it.it.sbi = vi->sbi;
it.index = prefix;
it.name = name + prefixlen;
it.len = strlen(it.name);
if (it.len > EROFS_NAME_LEN)
return -ERANGE;
+ it.it.sbi = vi->sbi;
it.it.buf = __EROFS_BUF_INITIALIZER;
+ erofs_init_metabuf(&it.it.buf, it.it.sbi, false);
it.buffer = buffer;
it.buffer_size = buffer_size;
@@ -1605,8 +1605,8 @@ static int shared_listxattr(struct erofs_inode *vi, struct listxattr_iter *it)
xattrblock_addr(vi, vi->xattr_shared_xattrs[i]);
it->it.ofs = xattrblock_offset(vi, vi->xattr_shared_xattrs[i]);
- it->it.kaddr = erofs_read_metabuf(&it->it.buf, sbi,
- erofs_pos(sbi, blkaddr), false);
+ it->it.kaddr = erofs_bread(&it->it.buf,
+ erofs_pos(sbi, blkaddr), true);
if (IS_ERR(it->it.kaddr))
return PTR_ERR(it->it.kaddr);
it->it.blkaddr = blkaddr;
@@ -1624,7 +1624,7 @@ int erofs_listxattr(struct erofs_inode *vi, char *buffer, size_t buffer_size)
int ret;
struct listxattr_iter it;
- ret = init_inode_xattrs(vi);
+ ret = erofs_init_inode_xattrs(vi);
if (ret == -ENOATTR)
return 0;
if (ret)
@@ -1632,6 +1632,7 @@ int erofs_listxattr(struct erofs_inode *vi, char *buffer, size_t buffer_size)
it.it.sbi = vi->sbi;
it.it.buf = __EROFS_BUF_INITIALIZER;
+ erofs_init_metabuf(&it.it.buf, it.it.sbi, false);
it.buffer = buffer;
it.buffer_size = buffer_size;
it.buffer_ofs = 0;
--
2.43.5
More information about the Linux-erofs
mailing list