Received: by 2002:a05:6a10:17d3:0:0:0:0 with SMTP id hz19csp627277pxb; Thu, 15 Apr 2021 02:47:42 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwxDZyEcmzT0f2L6rZBb/XvqeCp7a0YPS6I4m7aKgTEwRYX+zmKT8othHWafo4DRTIUznFd X-Received: by 2002:a05:6402:3592:: with SMTP id y18mr3017394edc.360.1618480062097; Thu, 15 Apr 2021 02:47:42 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1618480062; cv=none; d=google.com; s=arc-20160816; b=Pld0S7mo/RU8l3Er0MIGeC9/auNp9ZutRZZ+qeeSdie/7eI66ZUrASLzuMSp6J/mgZ PV2sd2X/qASIE7uTKuG7fVMj5NwpAgkNQhs5JlQIrzM2PNTBf+qgCM1dlzauZjgMKbBV pJEPRV3YbBxOwx86qiTWwwSqBsmt3kAjjgKisEZLVIvMesAaDOPE51BT3ah3YpNGiEyM p/VmBmKFlE/z+9WqaxFo4QJ26utGk2b/3KnjEE0FCPRp8XIrRo83J+Gs0Xky+g/n/Kf0 h6BCuZRsW5mLqKuQsoBtHGRmgKCf4N9+o+qE5JIB3kihe4QG0GayKTx1ve5WpYXLFBvG HiEQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :message-id:date:subject:cc:to:from; bh=l1sQguCvMveeA6xVyht9c29B8e9sZzXvD2XV78Zqz5s=; b=AVfUKcv0f5loUHeBgIv6qbXjeZGCELRVhiVH9XBBu5IUgGyYoT+4NwhsueD2pl+7st /T3e65xUxigKqOiN0sCD0D4gkCg+sg/QXgOy97pgJI8Xw+x/K1HoY2LtgazcZuHaH5y1 m6G1i+xXeEgchJ2mBgzFHwTc5dAe1h80z1hDcq9z3CxqBLMkWO0mHuyIAn5CTcS7ITO5 Qn7nQo3/BMLm8Lw3/GH7MZhCn3UljUAZQFHWBxQuRdoJCS6Haq8VNI4FfcgkyE2oqsYA 2s5beJ8qNPMiQz9vaF0j9JAiwTy1/eUzJqGBhsFX0Vyyju83NAf1aEyjiXzyX88YRYSs rMlg== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=huawei.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id x1si1983595edl.430.2021.04.15.02.47.18; Thu, 15 Apr 2021 02:47:42 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=huawei.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231531AbhDOJoW (ORCPT + 99 others); Thu, 15 Apr 2021 05:44:22 -0400 Received: from szxga07-in.huawei.com ([45.249.212.35]:17340 "EHLO szxga07-in.huawei.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232204AbhDOJoR (ORCPT ); Thu, 15 Apr 2021 05:44:17 -0400 Received: from DGGEMS406-HUB.china.huawei.com (unknown [172.30.72.59]) by szxga07-in.huawei.com (SkyGuard) with ESMTP id 4FLZ9V26V1zB1Gr; Thu, 15 Apr 2021 17:41:34 +0800 (CST) Received: from szvp000203569.huawei.com (10.120.216.130) by DGGEMS406-HUB.china.huawei.com (10.3.19.206) with Microsoft SMTP Server id 14.3.498.0; Thu, 15 Apr 2021 17:43:42 +0800 From: Chao Yu To: , , CC: , , Chao Yu Subject: [PATCH] direct-io: use read lock for DIO_LOCKING flag Date: Thu, 15 Apr 2021 17:43:32 +0800 Message-ID: <20210415094332.37231-1-yuchao0@huawei.com> X-Mailer: git-send-email 2.29.2 MIME-Version: 1.0 Content-Transfer-Encoding: 7BIT Content-Type: text/plain; charset=US-ASCII X-Originating-IP: [10.120.216.130] X-CFilter-Loop: Reflected Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 9902af79c01a ("parallel lookups: actual switch to rwsem") changes inode lock from mutex to rwsem, however, we forgot to adjust lock for DIO_LOCKING flag in do_blockdev_direct_IO(), so let's change to hold read lock to mitigate performance regression in the case of read DIO vs read DIO, meanwhile it still keeps original functionality of avoiding buffered access vs direct access. Signed-off-by: Chao Yu --- fs/direct-io.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/fs/direct-io.c b/fs/direct-io.c index b2e86e739d7a..93ff912f2749 100644 --- a/fs/direct-io.c +++ b/fs/direct-io.c @@ -1166,7 +1166,7 @@ do_blockdev_direct_IO(struct kiocb *iocb, struct inode *inode, dio->flags = flags; if (dio->flags & DIO_LOCKING && iov_iter_rw(iter) == READ) { /* will be released by direct_io_worker */ - inode_lock(inode); + inode_lock_shared(inode); } /* Once we sampled i_size check for reads beyond EOF */ @@ -1316,7 +1316,7 @@ do_blockdev_direct_IO(struct kiocb *iocb, struct inode *inode, * of protecting us from looking up uninitialized blocks. */ if (iov_iter_rw(iter) == READ && (dio->flags & DIO_LOCKING)) - inode_unlock(dio->inode); + inode_unlock_shared(dio->inode); /* * The only time we want to leave bios in flight is when a successful @@ -1341,7 +1341,7 @@ do_blockdev_direct_IO(struct kiocb *iocb, struct inode *inode, fail_dio: if (dio->flags & DIO_LOCKING && iov_iter_rw(iter) == READ) - inode_unlock(inode); + inode_unlock_shared(inode); kmem_cache_free(dio_cache, dio); return retval; -- 2.29.2