On Wed 17-08-16 10:11:02, Ross Zwisler wrote:
> Currently when doing a DAX hole punch with ext4 we fail to do a writeback.
> This is because the logic around filemap_write_and_wait_range() in
> ext4_punch_hole() only looks for dirty page cache pages in the radix tree,
> not for dirty DAX exceptional entries.
> 
> Signed-off-by: Ross Zwisler <[email protected]>

Thanks. The patch looks correct, you can add:

Reviewed-by: Jan Kara <[email protected]>

Although why don't we just simplify the test below to
mapping_tagged(mapping, PAGECACHE_TAG_DIRTY)? After all the mapping should
not have the dirty tag set if there are no pages / no entries?

                                                                Honza

> @@ -3919,7 +3919,9 @@ int ext4_punch_hole(struct inode *inode, loff_t offset, 
> loff_t length)
>        * Write out all dirty pages to avoid race conditions
>        * Then release them.
>        */
> -     if (mapping->nrpages && mapping_tagged(mapping, PAGECACHE_TAG_DIRTY)) {
> +     if (mapping_tagged(mapping, PAGECACHE_TAG_DIRTY) &&
> +         ((!dax_mapping(mapping) && mapping->nrpages) ||
> +          (dax_mapping(mapping) && mapping->nrexceptional))) {
>               ret = filemap_write_and_wait_range(mapping, offset,
>                                                  offset + length - 1);
>               if (ret)
-- 
Jan Kara <[email protected]>
SUSE Labs, CR

Reply via email to