• Dave Chinner's avatar
    xfs: stop using the page cache to back the buffer cache · 0e6e847f
    Dave Chinner authored
    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: default avatarDave Chinner <dchinner@redhat.com>
    Reviewed-by: default avatarAlex Elder <aelder@sgi.com>
    0e6e847f
xfs_buf.c 42.3 KB