• Dan Williams's avatar
    filesystem-dax: Introduce dax_lock_mapping_entry() · c2a7d2a1
    Dan Williams authored
    In preparation for implementing support for memory poison (media error)
    handling via dax mappings, implement a lock_page() equivalent. Poison
    error handling requires rmap and needs guarantees that the page->mapping
    association is maintained / valid (inode not freed) for the duration of
    the lookup.
    
    In the device-dax case it is sufficient to simply hold a dev_pagemap
    reference. In the filesystem-dax case we need to use the entry lock.
    
    Export the entry lock via dax_lock_mapping_entry() that uses
    rcu_read_lock() to protect against the inode being freed, and
    revalidates the page->mapping association under xa_lock().
    
    Cc: Christoph Hellwig <hch@lst.de>
    Cc: Matthew Wilcox <willy@infradead.org>
    Cc: Ross Zwisler <ross.zwisler@linux.intel.com>
    Cc: Jan Kara <jack@suse.cz>
    Signed-off-by: default avatarDan Williams <dan.j.williams@intel.com>
    Signed-off-by: default avatarDave Jiang <dave.jiang@intel.com>
    c2a7d2a1
dax.c 49.1 KB