Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 181403
b: refs/heads/master
c: 73c77e2
h: refs/heads/master
i:
  181401: 359513c
  181399: 1bc9a69
v: v3
  • Loading branch information
James Bottomley authored and James Bottomley committed Feb 5, 2010
1 parent bd53434 commit 977cc6a
Show file tree
Hide file tree
Showing 2 changed files with 30 additions and 2 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: c9334f6067dbe0380141fc75b122e0a533878838
refs/heads/master: 73c77e2ccc14413c232c3e0b3aa43a0c4b72ec70
30 changes: 29 additions & 1 deletion trunk/fs/xfs/linux-2.6/xfs_buf.c
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,27 @@ struct workqueue_struct *xfsconvertd_workqueue;
#define xfs_buf_deallocate(bp) \
kmem_zone_free(xfs_buf_zone, (bp));

static inline int
xfs_buf_is_vmapped(
struct xfs_buf *bp)
{
/*
* Return true if the buffer is vmapped.
*
* The XBF_MAPPED flag is set if the buffer should be mapped, but the
* code is clever enough to know it doesn't have to map a single page,
* so the check has to be both for XBF_MAPPED and bp->b_page_count > 1.
*/
return (bp->b_flags & XBF_MAPPED) && bp->b_page_count > 1;
}

static inline int
xfs_buf_vmap_len(
struct xfs_buf *bp)
{
return (bp->b_page_count * PAGE_SIZE) - bp->b_offset;
}

/*
* Page Region interfaces.
*
Expand Down Expand Up @@ -314,7 +335,7 @@ xfs_buf_free(
if (bp->b_flags & (_XBF_PAGE_CACHE|_XBF_PAGES)) {
uint i;

if ((bp->b_flags & XBF_MAPPED) && (bp->b_page_count > 1))
if (xfs_buf_is_vmapped(bp))
free_address(bp->b_addr - bp->b_offset);

for (i = 0; i < bp->b_page_count; i++) {
Expand Down Expand Up @@ -1107,6 +1128,9 @@ xfs_buf_bio_end_io(

xfs_buf_ioerror(bp, -error);

if (!error && xfs_buf_is_vmapped(bp) && (bp->b_flags & XBF_READ))
invalidate_kernel_vmap_range(bp->b_addr, xfs_buf_vmap_len(bp));

do {
struct page *page = bvec->bv_page;

Expand Down Expand Up @@ -1216,6 +1240,10 @@ _xfs_buf_ioapply(

submit_io:
if (likely(bio->bi_size)) {
if (xfs_buf_is_vmapped(bp)) {
flush_kernel_vmap_range(bp->b_addr,
xfs_buf_vmap_len(bp));
}
submit_bio(rw, bio);
if (size)
goto next_chunk;
Expand Down

0 comments on commit 977cc6a

Please sign in to comment.