@@ -79,7 +79,7 @@ static inline int
xfs_buf_vmap_len(
struct xfs_buf *bp)
{
- return (bp->b_page_count * PAGE_SIZE) - bp->b_offset;
+ return (bp->b_page_count * PAGE_SIZE);
}
/*
@@ -329,8 +329,7 @@ xfs_buf_free(
uint i;
if (xfs_buf_is_vmapped(bp))
- vm_unmap_ram(bp->b_addr - bp->b_offset,
- bp->b_page_count);
+ vm_unmap_ram(bp->b_addr, bp->b_page_count);
for (i = 0; i < bp->b_page_count; i++) {
struct page *page = bp->b_pages[i];
@@ -386,7 +385,7 @@ xfs_buf_alloc_pages(
uint flags)
{
size_t size;
- size_t nbytes, offset;
+ size_t nbytes;
gfp_t gfp_mask = xb_to_gfp(flags);
unsigned short page_count, i;
xfs_off_t start, end;
@@ -407,7 +406,6 @@ xfs_buf_alloc_pages(
if (unlikely(error))
return error;
- offset = bp->b_offset;
bp->b_flags |= _XBF_PAGES;
for (i = 0; i < bp->b_page_count; i++) {
@@ -441,10 +439,9 @@ xfs_buf_alloc_pages(
XFS_STATS_INC(bp->b_mount, xb_page_found);
- nbytes = min_t(size_t, size, PAGE_SIZE - offset);
+ nbytes = min_t(size_t, size, PAGE_SIZE);
size -= nbytes;
bp->b_pages[i] = page;
- offset = 0;
}
return 0;
@@ -466,7 +463,7 @@ _xfs_buf_map_pages(
ASSERT(bp->b_flags & _XBF_PAGES);
if (bp->b_page_count == 1) {
/* A single page buffer is always mappable */
- bp->b_addr = page_address(bp->b_pages[0]) + bp->b_offset;
+ bp->b_addr = page_address(bp->b_pages[0]);
} else if (flags & XBF_UNMAPPED) {
bp->b_addr = NULL;
} else {
@@ -493,7 +490,6 @@ _xfs_buf_map_pages(
if (!bp->b_addr)
return -ENOMEM;
- bp->b_addr += bp->b_offset;
}
return 0;
@@ -1726,7 +1722,6 @@ xfs_buf_offset(
if (bp->b_addr)
return bp->b_addr + offset;
- offset += bp->b_offset;
page = bp->b_pages[offset >> PAGE_SHIFT];
return page_address(page) + (offset & (PAGE_SIZE-1));
}
@@ -167,7 +167,8 @@ struct xfs_buf {
atomic_t b_pin_count; /* pin count */
atomic_t b_io_remaining; /* #outstanding I/O requests */
unsigned int b_page_count; /* size of page array */
- unsigned int b_offset; /* page offset in first page */
+ unsigned int b_offset; /* page offset in first page,
+ only used for SLAB buffers */
int b_error; /* error code on I/O */
/*
->b_offset can only be non-zero for SLAB backed buffers, so remove all code dealing with it for page backed buffers. Signed-off-by: Christoph Hellwig <hch@lst.de> --- fs/xfs/xfs_buf.c | 15 +++++---------- fs/xfs/xfs_buf.h | 3 ++- 2 files changed, 7 insertions(+), 11 deletions(-)