From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1756816AbbDOWCi (ORCPT ); Wed, 15 Apr 2015 18:02:38 -0400 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 From: Jens Axboe To: , CC: Jens Axboe , Chris Mason 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> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1429135298-17153-1-git-send-email-axboe@fb.com> References: <1429135298-17153-1-git-send-email-axboe@fb.com> MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [192.168.54.13] X-Proofpoint-Spam-Reason: safe X-FB-Internal: Safe X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10432:5.13.68,1.0.33,0.0.0000 definitions=2015-04-15_07:2015-04-15,2015-04-15,1970-01-01 signatures=0 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 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