Skip to content

Commit f768685

Browse files
committed
erofs: refine erofs_iomap_begin()
- Avoid calling erofs_map_dev() for unmapped extents; - Assign `iomap->addr` for inline extents too (since they have physical location). Signed-off-by: Gao Xiang <[email protected]> Link: https://lore.kernel.org/r/[email protected]
1 parent df50848 commit f768685

File tree

1 file changed

+13
-14
lines changed

1 file changed

+13
-14
lines changed

fs/erofs/data.c

Lines changed: 13 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -269,6 +269,16 @@ static int erofs_iomap_begin(struct inode *inode, loff_t offset, loff_t length,
269269
if (ret < 0)
270270
return ret;
271271

272+
iomap->offset = map.m_la;
273+
iomap->length = map.m_llen;
274+
iomap->flags = 0;
275+
iomap->private = NULL;
276+
if (!(map.m_flags & EROFS_MAP_MAPPED)) {
277+
iomap->type = IOMAP_HOLE;
278+
iomap->addr = IOMAP_NULL_ADDR;
279+
return 0;
280+
}
281+
272282
mdev = (struct erofs_map_dev) {
273283
.m_deviceid = map.m_deviceid,
274284
.m_pa = map.m_pa,
@@ -277,22 +287,14 @@ static int erofs_iomap_begin(struct inode *inode, loff_t offset, loff_t length,
277287
if (ret)
278288
return ret;
279289

280-
iomap->offset = map.m_la;
281290
if (flags & IOMAP_DAX)
282291
iomap->dax_dev = mdev.m_dif->dax_dev;
283292
else
284293
iomap->bdev = mdev.m_bdev;
285-
iomap->length = map.m_llen;
286-
iomap->flags = 0;
287-
iomap->private = NULL;
288294

289-
if (!(map.m_flags & EROFS_MAP_MAPPED)) {
290-
iomap->type = IOMAP_HOLE;
291-
iomap->addr = IOMAP_NULL_ADDR;
292-
if (!iomap->length)
293-
iomap->length = length;
294-
return 0;
295-
}
295+
iomap->addr = mdev.m_dif->fsoff + mdev.m_pa;
296+
if (flags & IOMAP_DAX)
297+
iomap->addr += mdev.m_dif->dax_part_off;
296298

297299
if (map.m_flags & EROFS_MAP_META) {
298300
void *ptr;
@@ -306,9 +308,6 @@ static int erofs_iomap_begin(struct inode *inode, loff_t offset, loff_t length,
306308
iomap->private = buf.base;
307309
} else {
308310
iomap->type = IOMAP_MAPPED;
309-
iomap->addr = mdev.m_dif->fsoff + mdev.m_pa;
310-
if (flags & IOMAP_DAX)
311-
iomap->addr += mdev.m_dif->dax_part_off;
312311
}
313312
return 0;
314313
}

0 commit comments

Comments
 (0)