Received: by 10.213.65.68 with SMTP id h4csp3423589imn; Tue, 3 Apr 2018 04:51:31 -0700 (PDT) X-Google-Smtp-Source: AIpwx4/Z2dPFwLnYgl3PUQPHk779ekhQBDpc7TDNtn6zCIffZXTirIcKzCUcCLDe0mgi9/Zsfekh X-Received: by 2002:a17:902:9a88:: with SMTP id w8-v6mr13769119plp.29.1522756291363; Tue, 03 Apr 2018 04:51:31 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1522756291; cv=none; d=google.com; s=arc-20160816; b=Y+Y1Ld9cD+cua+0GCrHNSzaA+99ghR5dA7LKJXMPs6cENTSR53Whezz38Nw/U/idPA XsHt6T1LAZRLI8PPTyBhcOF3IhuNBTcdo2wQ6kdhZQhev4Kq69ghSpOdlOubRpSVIi7x rnnEMrKKM7J+B0/04RYPJV9mApd85SY2Hj2HEdvhnvkVXVfNqJ55IDoe5T+cpiWcqg6t L4JsCShyRn5uNLJ5+N5BARAmDt6enyAU8Va9R+M4Xv+BAS5n66LT+h3p2oUHyH/Cbyjo h9aswkZb7lYgsqvjvWhGK9cRdclld5qzuvTzgQA6vhSqmGXnOj0wjsXuMoII5Jsq3aw6 jWJg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:user-agent:in-reply-to :content-disposition:mime-version:references:message-id:subject:cc :to:from:date:arc-authentication-results; bh=5oZsax0wGQSFfEvYwb8sQlvYJCOfNkiHA+IJo9P7YbM=; b=Dg6ba3TaLQp4BYmvEJtrheJ6Xn+N0RETEglwpY/Lda4nnNY/rK1ryjCyROvLYCyUUj DZCWba+8mt9c0HLmEyASqHQWL0x9hUMIxIJmj9fpefM6piwjpDWyhofu18k2On2WFTts hJu0gixm9mKHT9Q/wzG9K6HQF/VJnnthYtAfopVJGnTgxeiDm1v028NWfYhJXd2zLoZR BJnMvC+Hn+hxU2H7iAPvfVMYNBBa5uEG0qI4pzCkfuAIkoh6fef1N4jDtAz2tr3KyHVP Ai1LXs8SbiAyiZAELr6pW5zoEyxsCg68N8f+0qSZ6luS5kCUNP1P55dq0QMMPCcyaPrr mRiw== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id k18si1814339pgt.341.2018.04.03.04.51.16; Tue, 03 Apr 2018 04:51:31 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932097AbeDCLuJ (ORCPT + 99 others); Tue, 3 Apr 2018 07:50:09 -0400 Received: from mx2.suse.de ([195.135.220.15]:59578 "EHLO mx2.suse.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932066AbeDCLuH (ORCPT ); Tue, 3 Apr 2018 07:50:07 -0400 X-Virus-Scanned: by amavisd-new at test-mx.suse.de Received: from relay1.suse.de (charybdis-ext.suse.de [195.135.220.254]) by mx2.suse.de (Postfix) with ESMTP id EB8AFAEFA; Tue, 3 Apr 2018 11:50:04 +0000 (UTC) Received: by quack2.suse.cz (Postfix, from userid 1000) id 2B9FA1E0A1B; Tue, 3 Apr 2018 13:50:03 +0200 (CEST) Date: Tue, 3 Apr 2018 13:50:03 +0200 From: Jan Kara To: Dan Williams Cc: linux-nvdimm@lists.01.org, Theodore Ts'o , Andreas Dilger , linux-ext4@vger.kernel.org, Jan Kara , david@fromorbit.com, hch@lst.de, linux-fsdevel@vger.kernel.org, linux-xfs@vger.kernel.org, linux-kernel@vger.kernel.org, snitzer@redhat.com Subject: Re: [PATCH v8 05/18] ext4, dax: introduce ext4_dax_aops Message-ID: <20180403115003.qfbedsjtxwirqkh6@quack2.suse.cz> References: <152246892890.36038.18436540150980653229.stgit@dwillia2-desk3.amr.corp.intel.com> <152246895649.36038.5391043415273091960.stgit@dwillia2-desk3.amr.corp.intel.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <152246895649.36038.5391043415273091960.stgit@dwillia2-desk3.amr.corp.intel.com> User-Agent: NeoMutt/20170421 (1.8.2) Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Fri 30-03-18 21:02:36, Dan Williams wrote: > In preparation for the dax implementation to start associating dax pages > to inodes via page->mapping, we need to provide a 'struct > address_space_operations' instance for dax. Otherwise, direct-I/O > triggers incorrect page cache assumptions and warnings. > > Cc: "Theodore Ts'o" > Cc: Andreas Dilger > Cc: linux-ext4@vger.kernel.org > Cc: Jan Kara > Signed-off-by: Dan Williams Looks good. You can add: Reviewed-by: Jan Kara Honza > --- > fs/ext4/inode.c | 42 +++++++++++++++++++++++++++++++----------- > 1 file changed, 31 insertions(+), 11 deletions(-) > > diff --git a/fs/ext4/inode.c b/fs/ext4/inode.c > index c94780075b04..249a97b19181 100644 > --- a/fs/ext4/inode.c > +++ b/fs/ext4/inode.c > @@ -2725,12 +2725,6 @@ static int ext4_writepages(struct address_space *mapping, > percpu_down_read(&sbi->s_journal_flag_rwsem); > trace_ext4_writepages(inode, wbc); > > - if (dax_mapping(mapping)) { > - ret = dax_writeback_mapping_range(mapping, inode->i_sb->s_bdev, > - wbc); > - goto out_writepages; > - } > - > /* > * No pages to write? This is mainly a kludge to avoid starting > * a transaction for special inodes like journal inode on last iput() > @@ -2955,6 +2949,27 @@ static int ext4_writepages(struct address_space *mapping, > return ret; > } > > +static int ext4_dax_writepages(struct address_space *mapping, > + struct writeback_control *wbc) > +{ > + int ret; > + long nr_to_write = wbc->nr_to_write; > + struct inode *inode = mapping->host; > + struct ext4_sb_info *sbi = EXT4_SB(mapping->host->i_sb); > + > + if (unlikely(ext4_forced_shutdown(EXT4_SB(inode->i_sb)))) > + return -EIO; > + > + percpu_down_read(&sbi->s_journal_flag_rwsem); > + trace_ext4_writepages(inode, wbc); > + > + ret = dax_writeback_mapping_range(mapping, inode->i_sb->s_bdev, wbc); > + trace_ext4_writepages_result(inode, wbc, ret, > + nr_to_write - wbc->nr_to_write); > + percpu_up_read(&sbi->s_journal_flag_rwsem); > + return ret; > +} > + > static int ext4_nonda_switch(struct super_block *sb) > { > s64 free_clusters, dirty_clusters; > @@ -3857,10 +3872,6 @@ static ssize_t ext4_direct_IO(struct kiocb *iocb, struct iov_iter *iter) > if (ext4_has_inline_data(inode)) > return 0; > > - /* DAX uses iomap path now */ > - if (WARN_ON_ONCE(IS_DAX(inode))) > - return 0; > - > trace_ext4_direct_IO_enter(inode, offset, count, iov_iter_rw(iter)); > if (iov_iter_rw(iter) == READ) > ret = ext4_direct_IO_read(iocb, iter); > @@ -3946,6 +3957,13 @@ static const struct address_space_operations ext4_da_aops = { > .error_remove_page = generic_error_remove_page, > }; > > +static const struct address_space_operations ext4_dax_aops = { > + .writepages = ext4_dax_writepages, > + .direct_IO = noop_direct_IO, > + .set_page_dirty = noop_set_page_dirty, > + .invalidatepage = noop_invalidatepage, > +}; > + > void ext4_set_aops(struct inode *inode) > { > switch (ext4_inode_journal_mode(inode)) { > @@ -3958,7 +3976,9 @@ void ext4_set_aops(struct inode *inode) > default: > BUG(); > } > - if (test_opt(inode->i_sb, DELALLOC)) > + if (IS_DAX(inode)) > + inode->i_mapping->a_ops = &ext4_dax_aops; > + else if (test_opt(inode->i_sb, DELALLOC)) > inode->i_mapping->a_ops = &ext4_da_aops; > else > inode->i_mapping->a_ops = &ext4_aops; > -- Jan Kara SUSE Labs, CR