Report the iomap_offset and iomap_bsize fields of struct xfs_iomap
in terms of fsblocks instead of in terms of bytes. Shift the byte
conversions into the callers temporarily, but they will disappear
or get cleaned up later.
Signed-off-by: Christoph Hellwig <hch@xxxxxx>
Index: xfs/fs/xfs/linux-2.6/xfs_aops.c
===================================================================
--- xfs.orig/fs/xfs/linux-2.6/xfs_aops.c 2010-04-27 17:07:53.000000000
+0200
+++ xfs/fs/xfs/linux-2.6/xfs_aops.c 2010-04-27 17:13:15.434005637 +0200
@@ -319,11 +319,16 @@ xfs_map_blocks(
STATIC int
xfs_iomap_valid(
+ struct inode *inode,
xfs_iomap_t *iomapp,
loff_t offset)
{
- return offset >= iomapp->iomap_offset &&
- offset < iomapp->iomap_offset + iomapp->iomap_bsize;
+ struct xfs_mount *mp = XFS_I(inode)->i_mount;
+ xfs_off_t iomap_offset = XFS_FSB_TO_B(mp,
iomapp->iomap_offset);
+ xfs_off_t iomap_bsize = XFS_FSB_TO_B(mp,
iomapp->iomap_bsize);
+
+ return offset >= iomap_offset &&
+ offset < iomap_offset + iomap_bsize;
}
/*
@@ -560,11 +565,13 @@ xfs_map_buffer(
xfs_off_t offset)
{
sector_t bn;
+ struct xfs_mount *m = XFS_I(inode)->i_mount;
+ xfs_off_t iomap_offset = XFS_FSB_TO_B(m,
mp->iomap_offset);
ASSERT(mp->iomap_bn != IOMAP_DADDR_NULL);
bn = (mp->iomap_bn >> (inode->i_blkbits - BBSHIFT)) +
- ((offset - mp->iomap_offset) >> inode->i_blkbits);
+ ((offset - iomap_offset) >> inode->i_blkbits);
ASSERT(bn || XFS_IS_REALTIME_INODE(XFS_I(inode)));
@@ -805,7 +812,7 @@ xfs_convert_page(
else
type = IOMAP_DELAY;
- if (!xfs_iomap_valid(mp, offset)) {
+ if (!xfs_iomap_valid(inode, mp, offset)) {
done = 1;
continue;
}
@@ -1115,7 +1122,7 @@ xfs_page_state_convert(
}
if (iomap_valid)
- iomap_valid = xfs_iomap_valid(&iomap, offset);
+ iomap_valid = xfs_iomap_valid(inode, &iomap, offset);
/*
* First case, map an unwritten extent and prepare for
@@ -1170,7 +1177,7 @@ xfs_page_state_convert(
&iomap, flags);
if (err)
goto error;
- iomap_valid = xfs_iomap_valid(&iomap, offset);
+ iomap_valid = xfs_iomap_valid(inode, &iomap,
offset);
}
if (iomap_valid) {
xfs_map_at_offset(inode, bh, &iomap, offset);
@@ -1200,7 +1207,7 @@ xfs_page_state_convert(
&iomap, flags);
if (err)
goto error;
- iomap_valid = xfs_iomap_valid(&iomap, offset);
+ iomap_valid = xfs_iomap_valid(inode, &iomap,
offset);
}
/*
@@ -1240,7 +1247,11 @@ xfs_page_state_convert(
xfs_start_page_writeback(page, 1, count);
if (ioend && iomap_valid) {
- offset = (iomap.iomap_offset + iomap.iomap_bsize - 1) >>
+ struct xfs_mount *m = XFS_I(inode)->i_mount;
+ xfs_off_t iomap_offset = XFS_FSB_TO_B(m,
iomap.iomap_offset);
+ xfs_off_t iomap_bsize = XFS_FSB_TO_B(m,
iomap.iomap_bsize);
+
+ offset = (iomap_offset + iomap_bsize - 1) >>
PAGE_CACHE_SHIFT;
tlast = min_t(pgoff_t, offset, last_index);
xfs_cluster_write(inode, page->index + 1, &iomap, &ioend,
@@ -1511,11 +1522,14 @@ __xfs_get_blocks(
}
if (direct || size > (1 << inode->i_blkbits)) {
- xfs_off_t iomap_delta = offset - iomap.iomap_offset;
+ struct xfs_mount *mp = XFS_I(inode)->i_mount;
+ xfs_off_t iomap_offset = XFS_FSB_TO_B(mp,
iomap.iomap_offset);
+ xfs_off_t iomap_delta = offset - iomap_offset;
+ xfs_off_t iomap_bsize = XFS_FSB_TO_B(mp,
iomap.iomap_bsize);
- ASSERT(iomap.iomap_bsize - iomap_delta > 0);
+ ASSERT(iomap_bsize - iomap_delta > 0);
offset = min_t(xfs_off_t,
- iomap.iomap_bsize - iomap_delta, size);
+ iomap_bsize - iomap_delta, size);
bh_result->b_size = (ssize_t)min_t(xfs_off_t, LONG_MAX, offset);
}
Index: xfs/fs/xfs/xfs_iomap.c
===================================================================
--- xfs.orig/fs/xfs/xfs_iomap.c 2010-04-27 17:08:03.000000000 +0200
+++ xfs/fs/xfs/xfs_iomap.c 2010-04-27 17:12:58.858068081 +0200
@@ -64,11 +64,10 @@ xfs_imap_to_bmap(
int imaps, /* Number of imap entries */
int flags)
{
- xfs_mount_t *mp = ip->i_mount;
xfs_fsblock_t start_block;
- iomapp->iomap_offset = XFS_FSB_TO_B(mp, imap->br_startoff);
- iomapp->iomap_bsize = XFS_FSB_TO_B(mp, imap->br_blockcount);
+ iomapp->iomap_offset = imap->br_startoff;
+ iomapp->iomap_bsize = imap->br_blockcount;
iomapp->iomap_flags = flags;
start_block = imap->br_startblock;
|