summaryrefslogtreecommitdiff
path: root/drivers
diff options
context:
space:
mode:
authorDave Chinner <dchinner@redhat.com>2011-03-26 01:16:45 +0300
committerDave Chinner <david@fromorbit.com>2011-03-26 01:16:45 +0300
commit0e6e847ffe37436e331c132639f9f872febce82e (patch)
treeeb440ef910af695eafef787e12badc64fac0f8fe /drivers
parent704b2907c2d47ceb187c0e25a6bbc2174b198f2f (diff)
downloadlinux-0e6e847ffe37436e331c132639f9f872febce82e.tar.xz
xfs: stop using the page cache to back the buffer cache
Now that the buffer cache has it's own LRU, we do not need to use the page cache to provide persistent caching and reclaim infrastructure. Convert the buffer cache to use alloc_pages() instead of the page cache. This will remove all the overhead of page cache management from setup and teardown of the buffers, as well as needing to mark pages accessed as we find buffers in the buffer cache. By avoiding the page cache, we also remove the need to keep state in the page_private(page) field for persistant storage across buffer free/buffer rebuild and so all that code can be removed. This also fixes the long-standing problem of not having enough bits in the page_private field to track all the state needed for a 512 sector/64k page setup. It also removes the need for page locking during reads as the pages are unique to the buffer and nobody else will be attempting to access them. Finally, it removes the buftarg address space lock as a point of global contention on workloads that allocate and free buffers quickly such as when creating or removing large numbers of inodes in parallel. This remove the 16TB limit on filesystem size on 32 bit machines as the page index (32 bit) is no longer used for lookups of metadata buffers - the buffer cache is now solely indexed by disk address which is stored in a 64 bit field in the buffer. Signed-off-by: Dave Chinner <dchinner@redhat.com> Reviewed-by: Alex Elder <aelder@sgi.com>
Diffstat (limited to 'drivers')
0 files changed, 0 insertions, 0 deletions