Skip to content

Commit

Permalink
iomap: switch iomap_bmap to use iomap_iter
Browse files Browse the repository at this point in the history
Rewrite the ->bmap implementation based on iomap_iter.

Signed-off-by: Christoph Hellwig <[email protected]>
[djwong: restructure the loop to make its behavior a little clearer]
Reviewed-by: Darrick J. Wong <[email protected]>
Signed-off-by: Darrick J. Wong <[email protected]>
Reviewed-by: Dave Chinner <[email protected]>
  • Loading branch information
Christoph Hellwig authored and Darrick J. Wong committed Aug 17, 2021
1 parent 7892386 commit 6d8a128
Showing 1 changed file with 13 additions and 18 deletions.
31 changes: 13 additions & 18 deletions fs/iomap/fiemap.c
Original file line number Diff line number Diff line change
Expand Up @@ -92,37 +92,32 @@ int iomap_fiemap(struct inode *inode, struct fiemap_extent_info *fi,
}
EXPORT_SYMBOL_GPL(iomap_fiemap);

static loff_t
iomap_bmap_actor(struct inode *inode, loff_t pos, loff_t length,
void *data, struct iomap *iomap, struct iomap *srcmap)
{
sector_t *bno = data, addr;

if (iomap->type == IOMAP_MAPPED) {
addr = (pos - iomap->offset + iomap->addr) >> inode->i_blkbits;
*bno = addr;
}
return 0;
}

/* legacy ->bmap interface. 0 is the error return (!) */
sector_t
iomap_bmap(struct address_space *mapping, sector_t bno,
const struct iomap_ops *ops)
{
struct inode *inode = mapping->host;
loff_t pos = bno << inode->i_blkbits;
unsigned blocksize = i_blocksize(inode);
struct iomap_iter iter = {
.inode = mapping->host,
.pos = (loff_t)bno << mapping->host->i_blkbits,
.len = i_blocksize(mapping->host),
.flags = IOMAP_REPORT,
};
const unsigned int blkshift = mapping->host->i_blkbits - SECTOR_SHIFT;
int ret;

if (filemap_write_and_wait(mapping))
return 0;

bno = 0;
ret = iomap_apply(inode, pos, blocksize, 0, ops, &bno,
iomap_bmap_actor);
while ((ret = iomap_iter(&iter, ops)) > 0) {
if (iter.iomap.type == IOMAP_MAPPED)
bno = iomap_sector(&iter.iomap, iter.pos) >> blkshift;
/* leave iter.processed unset to abort loop */
}
if (ret)
return 0;

return bno;
}
EXPORT_SYMBOL_GPL(iomap_bmap);

0 comments on commit 6d8a128

Please sign in to comment.