Skip to content

Commit 076d965

Browse files
Al Virohsiangkao
authored andcommitted
erofs: don't align offset for erofs_read_metabuf() (simple cases)
Most of the callers of erofs_read_metabuf() have the following form: block = erofs_blknr(sb, offset); off = erofs_blkoff(sb, offset); p = erofs_read_metabuf(...., erofs_pos(sb, block), ...); if (IS_ERR(p)) return PTR_ERR(p); q = p + off; // no further uses of p, block or off. The value passed to erofs_read_metabuf() is offset rounded down to block size, i.e. offset - off. Passing offset as-is would increase the return value by off in case of success and keep the return value unchanged in in case of error. In other words, the same could be achieved by q = erofs_read_metabuf(...., offset, ...); if (IS_ERR(q)) return PTR_ERR(q); This commit convert these simple cases. Signed-off-by: Al Viro <[email protected]> Link: https://lore.kernel.org/r/20240425195915.GD1031757@ZenIV Signed-off-by: Gao Xiang <[email protected]>
1 parent e098154 commit 076d965

File tree

4 files changed

+14
-25
lines changed

4 files changed

+14
-25
lines changed

fs/erofs/data.c

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -152,7 +152,7 @@ int erofs_map_blocks(struct inode *inode, struct erofs_map_blocks *map)
152152
pos = ALIGN(erofs_iloc(inode) + vi->inode_isize +
153153
vi->xattr_isize, unit) + unit * chunknr;
154154

155-
kaddr = erofs_read_metabuf(&buf, sb, erofs_pos(sb, erofs_blknr(sb, pos)), EROFS_KMAP);
155+
kaddr = erofs_read_metabuf(&buf, sb, pos, EROFS_KMAP);
156156
if (IS_ERR(kaddr)) {
157157
err = PTR_ERR(kaddr);
158158
goto out;
@@ -163,7 +163,7 @@ int erofs_map_blocks(struct inode *inode, struct erofs_map_blocks *map)
163163

164164
/* handle block map */
165165
if (!(vi->chunkformat & EROFS_CHUNK_FORMAT_INDEXES)) {
166-
__le32 *blkaddr = kaddr + erofs_blkoff(sb, pos);
166+
__le32 *blkaddr = kaddr;
167167

168168
if (le32_to_cpu(*blkaddr) == EROFS_NULL_ADDR) {
169169
map->m_flags = 0;
@@ -174,7 +174,7 @@ int erofs_map_blocks(struct inode *inode, struct erofs_map_blocks *map)
174174
goto out_unlock;
175175
}
176176
/* parse chunk indexes */
177-
idx = kaddr + erofs_blkoff(sb, pos);
177+
idx = kaddr;
178178
switch (le32_to_cpu(idx->blkaddr)) {
179179
case EROFS_NULL_ADDR:
180180
map->m_flags = 0;
@@ -294,11 +294,10 @@ static int erofs_iomap_begin(struct inode *inode, loff_t offset, loff_t length,
294294
struct erofs_buf buf = __EROFS_BUF_INITIALIZER;
295295

296296
iomap->type = IOMAP_INLINE;
297-
ptr = erofs_read_metabuf(&buf, sb,
298-
erofs_pos(sb, erofs_blknr(sb, mdev.m_pa)), EROFS_KMAP);
297+
ptr = erofs_read_metabuf(&buf, sb, mdev.m_pa, EROFS_KMAP);
299298
if (IS_ERR(ptr))
300299
return PTR_ERR(ptr);
301-
iomap->inline_data = ptr + erofs_blkoff(sb, mdev.m_pa);
300+
iomap->inline_data = ptr;
302301
iomap->private = buf.base;
303302
} else {
304303
iomap->type = IOMAP_MAPPED;

fs/erofs/fscache.c

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -273,21 +273,15 @@ static int erofs_fscache_data_read_slice(struct erofs_fscache_rq *req)
273273
if (map.m_flags & EROFS_MAP_META) {
274274
struct erofs_buf buf = __EROFS_BUF_INITIALIZER;
275275
struct iov_iter iter;
276-
erofs_blk_t blknr;
277-
size_t offset, size;
276+
size_t size = map.m_llen;
278277
void *src;
279278

280-
/* For tail packing layout, the offset may be non-zero. */
281-
offset = erofs_blkoff(sb, map.m_pa);
282-
blknr = erofs_blknr(sb, map.m_pa);
283-
size = map.m_llen;
284-
285-
src = erofs_read_metabuf(&buf, sb, erofs_pos(sb, blknr), EROFS_KMAP);
279+
src = erofs_read_metabuf(&buf, sb, map.m_pa, EROFS_KMAP);
286280
if (IS_ERR(src))
287281
return PTR_ERR(src);
288282

289283
iov_iter_xarray(&iter, ITER_DEST, &mapping->i_pages, pos, PAGE_SIZE);
290-
if (copy_to_iter(src + offset, size, &iter) != size) {
284+
if (copy_to_iter(src, size, &iter) != size) {
291285
erofs_put_metabuf(&buf);
292286
return -EFAULT;
293287
}

fs/erofs/super.c

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -178,12 +178,10 @@ static int erofs_init_device(struct erofs_buf *buf, struct super_block *sb,
178178
struct erofs_fscache *fscache;
179179
struct erofs_deviceslot *dis;
180180
struct file *bdev_file;
181-
void *ptr;
182181

183-
ptr = erofs_read_metabuf(buf, sb, erofs_pos(sb, erofs_blknr(sb, *pos)), EROFS_KMAP);
184-
if (IS_ERR(ptr))
185-
return PTR_ERR(ptr);
186-
dis = ptr + erofs_blkoff(sb, *pos);
182+
dis = erofs_read_metabuf(buf, sb, *pos, EROFS_KMAP);
183+
if (IS_ERR(dis))
184+
return PTR_ERR(dis);
187185

188186
if (!sbi->devs->flatdev && !dif->path) {
189187
if (!dis->tag[0]) {

fs/erofs/zmap.c

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -570,7 +570,6 @@ static int z_erofs_fill_inode_lazy(struct inode *inode)
570570
int err, headnr;
571571
erofs_off_t pos;
572572
struct erofs_buf buf = __EROFS_BUF_INITIALIZER;
573-
void *kaddr;
574573
struct z_erofs_map_header *h;
575574

576575
if (test_bit(EROFS_I_Z_INITED_BIT, &vi->flags)) {
@@ -590,13 +589,12 @@ static int z_erofs_fill_inode_lazy(struct inode *inode)
590589
goto out_unlock;
591590

592591
pos = ALIGN(erofs_iloc(inode) + vi->inode_isize + vi->xattr_isize, 8);
593-
kaddr = erofs_read_metabuf(&buf, sb, erofs_pos(sb, erofs_blknr(sb, pos)), EROFS_KMAP);
594-
if (IS_ERR(kaddr)) {
595-
err = PTR_ERR(kaddr);
592+
h = erofs_read_metabuf(&buf, sb, pos, EROFS_KMAP);
593+
if (IS_ERR(h)) {
594+
err = PTR_ERR(h);
596595
goto out_unlock;
597596
}
598597

599-
h = kaddr + erofs_blkoff(sb, pos);
600598
/*
601599
* if the highest bit of the 8-byte map header is set, the whole file
602600
* is stored in the packed inode. The rest bits keeps z_fragmentoff.

0 commit comments

Comments
 (0)