From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752829AbcHQRUB (ORCPT ); Wed, 17 Aug 2016 13:20:01 -0400 Received: from mx2.suse.de ([195.135.220.15]:37334 "EHLO mx2.suse.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751839AbcHQRUA (ORCPT ); Wed, 17 Aug 2016 13:20:00 -0400 Date: Wed, 17 Aug 2016 19:19:55 +0200 From: Jan Kara To: Ross Zwisler Cc: linux-kernel@vger.kernel.org, "Theodore Ts'o" , Andreas Dilger , Dan Williams , Jan Kara , linux-ext4@vger.kernel.org, linux-nvdimm@ml01.01.org Subject: Re: [PATCH] ext4: allow DAX writeback for hole punch Message-ID: <20160817171955.GA30893@quack2.suse.cz> References: <20160817161102.2185-1-ross.zwisler@linux.intel.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20160817161102.2185-1-ross.zwisler@linux.intel.com> User-Agent: Mutt/1.5.24 (2015-08-30) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 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 Thanks. The patch looks correct, you can add: Reviewed-by: Jan Kara 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 SUSE Labs, CR