Re: [RFC][PATCH 1/3] radix priority search tree - objrmap complexity fix

Christoph Hellwig
2004-04-06T05:16:46Z

On Tue, Apr 06, 2004 at 06:22:22AM +0200, Andrea Arcangeli wrote:
> What really happens is that you get errors with my tree because xfs in
> some unlikely case is messing with set_bit on the page->private of slab
> pages of order > 0.

Yes, that case would be a filesystem with blocksize < PAGE_SIZE and a buffer
with a size of > PAGE_SIZE && < MAX_SLAB_SIZE.

Can you try the patch below (testing it now, but I'm pretty sure it'll fix it)
instead of all the kmalloc changes?:

--- linux-2.5/fs/xfs/linux/xfs_buf.c 2004-04-02 20:10:56.000000000 +0200
+++ linux-2.6.5-aa3/fs/xfs/linux/xfs_buf.c 2004-04-06 09:13:05.275317568 +0200
@@ -448,7 +448,8 @@ _pagebuf_lookup_pages(
if (flags & PBF_READ)
pb->pb_locked = 1;
good_pages--;
- } else if (!PagePrivate(page)) {
+ } else if ((pb->pb_flags & _PBF_PAGECACHE) &&
+ !PagePrivate(page)) {
unsigned long i, range;

/*
@@ -1289,7 +1290,8 @@ bio_end_io_pagebuf(
SetPageError(page);
} else if (blocksize == PAGE_CACHE_SIZE) {
SetPageUptodate(page);
- } else if (!PagePrivate(page)) {
+ } else if ((pb->pb_flags & _PBF_PAGECACHE) &&
+ !PagePrivate(page)) {
unsigned int j, range;

ASSERT(blocksize < PAGE_CACHE_SIZE);