]> git.baikalelectronics.ru Git - kernel.git/commit
dax: Avoid page invalidation races and unnecessary radix tree traversals
authorJan Kara <jack@suse.cz>
Wed, 10 Aug 2016 15:10:28 +0000 (17:10 +0200)
committerDan Williams <dan.j.williams@intel.com>
Tue, 27 Dec 2016 04:29:24 +0000 (20:29 -0800)
commit9c003c1aa5741057f88a23f0ad185a122a822b23
tree52e8c6f6bea775cb623cfca46012b91657b7dc47
parent3e2119ae44ae0eb4e7bd336f58cf0451dfc814fe
dax: Avoid page invalidation races and unnecessary radix tree traversals

Currently dax_iomap_rw() takes care of invalidating page tables and
evicting hole pages from the radix tree when write(2) to the file
happens. This invalidation is only necessary when there is some block
allocation resulting from write(2). Furthermore in current place the
invalidation is racy wrt page fault instantiating a hole page just after
we have invalidated it.

So perform the page invalidation inside dax_iomap_actor() where we can
do it only when really necessary and after blocks have been allocated so
nobody will be instantiating new hole pages anymore.

Reviewed-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Ross Zwisler <ross.zwisler@linux.intel.com>
Signed-off-by: Jan Kara <jack@suse.cz>
Signed-off-by: Dan Williams <dan.j.williams@intel.com>
fs/dax.c