From patchwork Wed Oct 19 14:19:43 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Kani, Toshi" X-Patchwork-Id: 9384727 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id 9CDA660487 for ; Wed, 19 Oct 2016 16:10:37 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 8FB4828437 for ; Wed, 19 Oct 2016 16:10:37 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 840D528AC1; Wed, 19 Oct 2016 16:10:37 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.9 required=2.0 tests=BAYES_00,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id F2FA828437 for ; Wed, 19 Oct 2016 16:10:36 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S941875AbcJSQKC (ORCPT ); Wed, 19 Oct 2016 12:10:02 -0400 Received: from g2t2352.austin.hpe.com ([15.233.44.25]:19905 "EHLO g2t2352.austin.hpe.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S938801AbcJSOVb (ORCPT ); Wed, 19 Oct 2016 10:21:31 -0400 Received: from g2t2360.austin.hpecorp.net (g2t2360.austin.hpecorp.net [16.196.225.135]) by g2t2352.austin.hpe.com (Postfix) with ESMTP id 7817342; Wed, 19 Oct 2016 14:21:29 +0000 (UTC) Received: from misato.fc.hp.com (misato.fc.hp.com [16.78.168.61]) by g2t2360.austin.hpecorp.net (Postfix) with ESMTP id B564E3B; Wed, 19 Oct 2016 14:21:28 +0000 (UTC) From: Toshi Kani To: akpm@linux-foundation.org, dan.j.williams@intel.com Cc: david@fromorbit.com, viro@zeniv.linux.org.uk, ross.zwisler@linux.intel.com, linux-nvdimm@lists.01.org, linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org, Toshi Kani Subject: [PATCH v3 1/2] DAX: enable iostat for read/write Date: Wed, 19 Oct 2016 08:19:43 -0600 Message-Id: <1476886784-24644-2-git-send-email-toshi.kani@hpe.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1476886784-24644-1-git-send-email-toshi.kani@hpe.com> References: <1476886784-24644-1-git-send-email-toshi.kani@hpe.com> Sender: linux-fsdevel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-fsdevel@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP DAX IO path does not support iostat, but its metadata IO path does. Therefore, iostat shows metadata IO statistics only, which has been confusing to users. Add iostat support to the DAX read/write path. Note, iostat still does not support the DAX mmap path as it allows user applications to access directly. Signed-off-by: Toshi Kani Cc: Andrew Morton Cc: Dan Williams Cc: Alexander Viro Cc: Dave Chinner Cc: Ross Zwisler --- fs/dax.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+) -- To unsubscribe from this list: send the line "unsubscribe linux-fsdevel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html diff --git a/fs/dax.c b/fs/dax.c index 014defd..2646969 100644 --- a/fs/dax.c +++ b/fs/dax.c @@ -265,9 +265,12 @@ ssize_t dax_do_io(struct kiocb *iocb, struct inode *inode, ssize_t retval = -EINVAL; loff_t pos = iocb->ki_pos; loff_t end = pos + iov_iter_count(iter); + struct gendisk *disk; + unsigned long start = 0; memset(&bh, 0, sizeof(bh)); bh.b_bdev = inode->i_sb->s_bdev; + disk = bh.b_bdev->bd_disk; if ((flags & DIO_LOCKING) && iov_iter_rw(iter) == READ) inode_lock(inode); @@ -276,8 +279,20 @@ ssize_t dax_do_io(struct kiocb *iocb, struct inode *inode, if (!(flags & DIO_SKIP_DIO_COUNT)) inode_dio_begin(inode); + if (blk_queue_io_stat(disk->queue)) { + int sec = iov_iter_count(iter) >> 9; + + start = jiffies; + generic_start_io_acct(iov_iter_rw(iter), + (!sec) ? 1 : sec, &disk->part0); + } + retval = dax_io(inode, iter, pos, end, get_block, &bh); + if (start) + generic_end_io_acct(iov_iter_rw(iter), + &disk->part0, start); + if ((flags & DIO_LOCKING) && iov_iter_rw(iter) == READ) inode_unlock(inode);