lkml.org 
[lkml]   [2018]   [Jun]   [16]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v14 20/74] page cache: Rearrange address_space
    Date
    Change i_pages from a radix_tree_root to an xarray, convert the
    documentation into kernel-doc format and change the order of the elements
    to pack them better on 64-bit systems.

    Signed-off-by: Matthew Wilcox <willy@infradead.org>
    ---
    include/linux/fs.h | 46 +++++++++++++++++++++++++++++++---------------
    1 file changed, 31 insertions(+), 15 deletions(-)

    diff --git a/include/linux/fs.h b/include/linux/fs.h
    index 8c1c56584e08..f1716ce5ff6f 100644
    --- a/include/linux/fs.h
    +++ b/include/linux/fs.h
    @@ -396,24 +396,40 @@ int pagecache_write_end(struct file *, struct address_space *mapping,
    loff_t pos, unsigned len, unsigned copied,
    struct page *page, void *fsdata);

    +/**
    + * struct address_space - Contents of a cacheable, mappable object.
    + * @host: Owner, either the inode or the block_device.
    + * @i_pages: Cached pages.
    + * @gfp_mask: Memory allocation flags to use for allocating pages.
    + * @i_mmap_writable: Number of VM_SHARED mappings.
    + * @i_mmap: Tree of private and shared mappings.
    + * @i_mmap_rwsem: Protects @i_mmap and @i_mmap_writable.
    + * @nrpages: Number of page entries, protected by the i_pages lock.
    + * @nrexceptional: Shadow or DAX entries, protected by the i_pages lock.
    + * @writeback_index: Writeback starts here.
    + * @a_ops: Methods.
    + * @flags: Error bits and flags (AS_*).
    + * @wb_err: The most recent error which has occurred.
    + * @private_lock: For use by the owner of the address_space.
    + * @private_list: For use by the owner of the address_space.
    + * @private_data: For use by the owner of the address_space.
    + */
    struct address_space {
    - struct inode *host; /* owner: inode, block_device */
    - struct radix_tree_root i_pages; /* cached pages */
    - atomic_t i_mmap_writable;/* count VM_SHARED mappings */
    - struct rb_root_cached i_mmap; /* tree of private and shared mappings */
    - struct rw_semaphore i_mmap_rwsem; /* protect tree, count, list */
    - /* Protected by the i_pages lock */
    - unsigned long nrpages; /* number of total pages */
    - /* number of shadow or DAX exceptional entries */
    + struct inode *host;
    + struct xarray i_pages;
    + gfp_t gfp_mask;
    + atomic_t i_mmap_writable;
    + struct rb_root_cached i_mmap;
    + struct rw_semaphore i_mmap_rwsem;
    + unsigned long nrpages;
    unsigned long nrexceptional;
    - pgoff_t writeback_index;/* writeback starts here */
    - const struct address_space_operations *a_ops; /* methods */
    - unsigned long flags; /* error bits */
    - spinlock_t private_lock; /* for use by the address_space */
    - gfp_t gfp_mask; /* implicit gfp mask for allocations */
    - struct list_head private_list; /* for use by the address_space */
    - void *private_data; /* ditto */
    + pgoff_t writeback_index;
    + const struct address_space_operations *a_ops;
    + unsigned long flags;
    errseq_t wb_err;
    + spinlock_t private_lock;
    + struct list_head private_list;
    + void *private_data;
    } __attribute__((aligned(sizeof(long)))) __randomize_layout;
    /*
    * On most architectures that alignment is already the case; but
    --
    2.17.1
    \
     
     \ /
      Last update: 2018-06-17 04:20    [W:4.387 / U:0.244 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site