From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jens Axboe Subject: [PATCH 2/3] btrfs: pass in DIO_SKIP_DIO_COUNT to do_blockdev_direct_IO() Date: Wed, 15 Apr 2015 16:01:37 -0600 Message-ID: <1429135298-17153-3-git-send-email-axboe@fb.com> References: <1429135298-17153-1-git-send-email-axboe@fb.com> Mime-Version: 1.0 Content-Type: text/plain Cc: Jens Axboe , Chris Mason To: , Return-path: Received: from mx0b-00082601.pphosted.com ([67.231.153.30]:34273 "EHLO mx0a-00082601.pphosted.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1754549AbbDOWBp (ORCPT ); Wed, 15 Apr 2015 18:01:45 -0400 In-Reply-To: <1429135298-17153-1-git-send-email-axboe@fb.com> Sender: linux-fsdevel-owner@vger.kernel.org List-ID: btrfs_direct_IO() already holds the inode i_dio_count elevated, so pass in that do_blockdev_direct_IO() does not need to. If we end up dropping the inode dio count before calling this function, then we drop the flag as well. Cc: Chris Mason Signed-off-by: Jens Axboe --- fs/btrfs/inode.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c index 6fe341a66ed8..3ecac37f10e0 100644 --- a/fs/btrfs/inode.c +++ b/fs/btrfs/inode.c @@ -8121,8 +8121,7 @@ static ssize_t btrfs_direct_IO(int rw, struct kiocb *iocb, struct inode *inode = file->f_mapping->host; u64 outstanding_extents = 0; size_t count = 0; - int flags = 0; - bool wakeup = true; + int flags = DIO_SKIP_DIO_COUNT; bool relock = false; ssize_t ret; @@ -8170,8 +8169,11 @@ static ssize_t btrfs_direct_IO(int rw, struct kiocb *iocb, } else if (test_bit(BTRFS_INODE_READDIO_NEED_LOCK, &BTRFS_I(inode)->runtime_flags)) { inode_dio_dec(inode); + /* + * we know need i_dio_count inc/dec, the below overwrites + * the skip inc/dec flag. + */ flags = DIO_LOCKING | DIO_SKIP_HOLES; - wakeup = false; } ret = __blockdev_direct_IO(rw, iocb, inode, @@ -8187,7 +8189,7 @@ static ssize_t btrfs_direct_IO(int rw, struct kiocb *iocb, count - (size_t)ret); } out: - if (wakeup) + if (flags & DIO_SKIP_DIO_COUNT) inode_dio_dec(inode); if (relock) mutex_lock(&inode->i_mutex); -- 1.9.1