Commit 948ecdb4 authored by Nathan Scott's avatar Nathan Scott Committed by Tim Shimmin

[XFS] Be more defensive with page flags (error/private) for metadata

buffers.

SGI-PV: 955302
SGI-Modid: xfs-linux-melb:xfs-kern:26801a
Signed-off-by: default avatarNathan Scott <nathans@sgi.com>
Signed-off-by: default avatarTim Shimmin <tes@sgi.com>
parent efb8ad7e
...@@ -318,8 +318,12 @@ xfs_buf_free( ...@@ -318,8 +318,12 @@ xfs_buf_free(
if ((bp->b_flags & XBF_MAPPED) && (bp->b_page_count > 1)) if ((bp->b_flags & XBF_MAPPED) && (bp->b_page_count > 1))
free_address(bp->b_addr - bp->b_offset); free_address(bp->b_addr - bp->b_offset);
for (i = 0; i < bp->b_page_count; i++) for (i = 0; i < bp->b_page_count; i++) {
page_cache_release(bp->b_pages[i]); struct page *page = bp->b_pages[i];
ASSERT(!PagePrivate(page));
page_cache_release(page);
}
_xfs_buf_free_pages(bp); _xfs_buf_free_pages(bp);
} else if (bp->b_flags & _XBF_KMEM_ALLOC) { } else if (bp->b_flags & _XBF_KMEM_ALLOC) {
/* /*
...@@ -400,6 +404,7 @@ _xfs_buf_lookup_pages( ...@@ -400,6 +404,7 @@ _xfs_buf_lookup_pages(
nbytes = min_t(size_t, size, PAGE_CACHE_SIZE - offset); nbytes = min_t(size_t, size, PAGE_CACHE_SIZE - offset);
size -= nbytes; size -= nbytes;
ASSERT(!PagePrivate(page));
if (!PageUptodate(page)) { if (!PageUptodate(page)) {
page_count--; page_count--;
if (blocksize >= PAGE_CACHE_SIZE) { if (blocksize >= PAGE_CACHE_SIZE) {
...@@ -1117,10 +1122,10 @@ xfs_buf_bio_end_io( ...@@ -1117,10 +1122,10 @@ xfs_buf_bio_end_io(
do { do {
struct page *page = bvec->bv_page; struct page *page = bvec->bv_page;
ASSERT(!PagePrivate(page));
if (unlikely(bp->b_error)) { if (unlikely(bp->b_error)) {
if (bp->b_flags & XBF_READ) if (bp->b_flags & XBF_READ)
ClearPageUptodate(page); ClearPageUptodate(page);
SetPageError(page);
} else if (blocksize >= PAGE_CACHE_SIZE) { } else if (blocksize >= PAGE_CACHE_SIZE) {
SetPageUptodate(page); SetPageUptodate(page);
} else if (!PagePrivate(page) && } else if (!PagePrivate(page) &&
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment