From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id 1061DD1AD50 for ; Wed, 16 Oct 2024 12:34:53 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 71B6A6B009C; Wed, 16 Oct 2024 08:34:53 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 6CB106B009E; Wed, 16 Oct 2024 08:34:53 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 593366B009F; Wed, 16 Oct 2024 08:34:53 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0010.hostedemail.com [216.40.44.10]) by kanga.kvack.org (Postfix) with ESMTP id 39D486B009C for ; Wed, 16 Oct 2024 08:34:53 -0400 (EDT) Received: from smtpin23.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay09.hostedemail.com (Postfix) with ESMTP id 53F00801BF for ; Wed, 16 Oct 2024 12:34:44 +0000 (UTC) X-FDA: 82679409372.23.DDCF946 Received: from szxga06-in.huawei.com (szxga06-in.huawei.com [45.249.212.32]) by imf10.hostedemail.com (Postfix) with ESMTP id EBCFDC0003 for ; Wed, 16 Oct 2024 12:34:45 +0000 (UTC) Authentication-Results: imf10.hostedemail.com; dkim=none; spf=pass (imf10.hostedemail.com: domain of wangkefeng.wang@huawei.com designates 45.249.212.32 as permitted sender) smtp.mailfrom=wangkefeng.wang@huawei.com; dmarc=pass (policy=quarantine) header.from=huawei.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1729082017; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=aCmrZuJ7bjhjVdnKz1WVfz5jgFrLEQ9R0LyRqMIDIqA=; b=vT5ZHztACXyKrBX7zRiqVDKdf74Ar/18mRIBbvUo5IJpwwaqB7V7Wyo7dS9dDOc6qHihy/ RQTXKqNawWP8O2LEY8cTcyIu5pUXMnsU7K6jEuhLLixLXjh9EvaXVoW3LHbs/9SL/nHiye 9aIPxpyMstkg+IlfFVPNRz83R082gSY= ARC-Authentication-Results: i=1; imf10.hostedemail.com; dkim=none; spf=pass (imf10.hostedemail.com: domain of wangkefeng.wang@huawei.com designates 45.249.212.32 as permitted sender) smtp.mailfrom=wangkefeng.wang@huawei.com; dmarc=pass (policy=quarantine) header.from=huawei.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1729082017; a=rsa-sha256; cv=none; b=R4Aa1Pi1TuE0Q4LLlIOxlzN0RxxAAto4yQjFn4MZdCj11bGZPuPTbrmPSs6qQmeTYlS4Cf shzO1tO1kM1m+qnDoBuL81fJyUumwhOnmOHaYZosy/picB6rp2Rybfgzz1db95Aoa358nr J6voqBNL0GgTz2wxG0b1Bk5VavXYsWA= Received: from mail.maildlp.com (unknown [172.19.88.214]) by szxga06-in.huawei.com (SkyGuard) with ESMTP id 4XT9Qg4gMtz1xxBG; Wed, 16 Oct 2024 20:34:51 +0800 (CST) Received: from dggpemf100008.china.huawei.com (unknown [7.185.36.138]) by mail.maildlp.com (Postfix) with ESMTPS id C176D1A016C; Wed, 16 Oct 2024 20:34:45 +0800 (CST) Received: from [10.174.177.243] (10.174.177.243) by dggpemf100008.china.huawei.com (7.185.36.138) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.11; Wed, 16 Oct 2024 20:34:45 +0800 Message-ID: <584e60dd-8a3b-46d5-87ec-aa7032d3a572@huawei.com> Date: Wed, 16 Oct 2024 20:34:44 +0800 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH 1/2] mm: shmem: update iocb->ki_pos directly to simplify tmpfs read logic To: Baolin Wang , , CC: , , , References: Content-Language: en-US From: Kefeng Wang In-Reply-To: Content-Type: text/plain; charset="UTF-8"; format=flowed Content-Transfer-Encoding: 7bit X-Originating-IP: [10.174.177.243] X-ClientProxiedBy: dggems704-chm.china.huawei.com (10.3.19.181) To dggpemf100008.china.huawei.com (7.185.36.138) X-Rspamd-Server: rspam03 X-Rspam-User: X-Rspamd-Queue-Id: EBCFDC0003 X-Stat-Signature: ffpufa38d3qsn1nnf9i38b5x9h7xaibh X-HE-Tag: 1729082085-997910 X-HE-Meta: U2FsdGVkX193ZdnljwoB2O8QCSQsNqnVJl+TcuTdw582qILH17PrqKIwPLcDytworWQ+RsLosVGLGwyxvupfeM9BJ77EL3007Jez9Si88QhrEC6wA6FvOCDV4naVUAotCDyZr+BR659WfjrSMx6uxU0tt0H/8mvM4pYPDVUdr+kpzK18e6FfpaXVugkxP78K1uTXWIqLuc2RV1GEyO2lUGp3fWGq8aG3vDBS5ulSymQ7Jl2QYYco2j1zlf0FxEjCyu9j5+IeMQKUw7xSdBNS0yUlqMFigDcZI8Hnk18YLLtqOcY8aCRvvGKkVCM51y/U8HfxRjIPee3jcYuCWv5MOat4HRO15V7E/L8sTS/l7wJigWtJdNyHuWTapbXesLzH4ksl0HUDMIU+QsotMNq6D8yYhQqw/Hr0BXhmQllx+UEiZWhdFRfU3JnNZ3IGOmdOPCODcTATzhEJIQGK/uOqxYPZ7Z+N25j0vl9yBm2HO8Eg0vMSff+pnN5h5C8AcuCTnwjW+iUvz6Py5M4qBLnrJcy2pUoV2QQa92qvJJpt4QvyvShoCJJXODvZgFZxhk8sCDRo9Z1ko5Xt4ewUp/44mebfXMMNZvEZEnwztbMLH4pScRHuzeBXhSSYyW/fPoP06CaEax0HFd1iKEgj2xdHV6/QDpsGGCkHfQeNzBG0rjcQD43iRXbQsfYvyy+xZKWP9yY42Z8pbz6kYVdfpwQom8qGlLXqlIpX5A0/uE0EglbJWE3tVsG/yoAHD5aKFv/ppJ+mVaTCBMVMQ2ozT0Qfsr6+rAmZsi7tfIf7ScEGzZk4cr844OjFWpn1viqFvMGzS0Zat5a2dA9DGKcrsl263DRhJMrBIWwqnxMTJt0RGHzf0UhuT0nlHRlyDG7SGKl6h440cyjSdV6GotKE2tDeTIGqbcDhURoldo8Ey2oXHHOkO3nWnHgDJwMo7oL+ODVfiHck0Nc+WcmUqcWUA6B H3TwQJ2d FG23Mak7Yxb8pAFZYUaildd5JTmcTO9nloLp4S9UELNJRj82fEcME4tAD6oyZUJ9KRXm7Q26Qkq72/rsH2Ch2+nW6R0Ffc7XmJjz+2jQgcpHfXhJaS5rZ+2SI5YRH1HNR7OTwPKLSA9/R6Ul9BUA1/HvO13PYUECyuk77GGDme9Gqs9xzwYwbU+bFfOVms5vI+ZzkgnEtmi0XHirqseU+j4HxV5XFn3gv1EKl7RS5JJckExc= X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: On 2024/10/16 18:09, Baolin Wang wrote: > Use iocb->ki_pos to check if the read bytes exceeds the file size and to > calculate the bytes to be read can help simplify the code logic. Meanwhile, > this is also a preparation for improving tmpfs large folios read performace > in the following patch. > > Signed-off-by: Baolin Wang > --- > mm/shmem.c | 36 ++++++++++++------------------------ > 1 file changed, 12 insertions(+), 24 deletions(-) > > diff --git a/mm/shmem.c b/mm/shmem.c > index 66eae800ffab..edab02a26aac 100644 > --- a/mm/shmem.c > +++ b/mm/shmem.c > @@ -3106,26 +3106,18 @@ static ssize_t shmem_file_read_iter(struct kiocb *iocb, struct iov_iter *to) > unsigned long offset; > int error = 0; > ssize_t retval = 0; > - loff_t *ppos = &iocb->ki_pos; > > - index = *ppos >> PAGE_SHIFT; > - offset = *ppos & ~PAGE_MASK; > + index = iocb->ki_pos >> PAGE_SHIFT; index calculate could be moved before shmem_get_folio(), then... > + offset = iocb->ki_pos & ~PAGE_MASK; > > for (;;) { > struct folio *folio = NULL; > struct page *page = NULL; > - pgoff_t end_index; > unsigned long nr, ret; > - loff_t i_size = i_size_read(inode); > + loff_t end_offset, i_size = i_size_read(inode); > > - end_index = i_size >> PAGE_SHIFT; > - if (index > end_index) > + if (unlikely(iocb->ki_pos >= i_size)) > break; > - if (index == end_index) { > - nr = i_size & ~PAGE_MASK; > - if (nr <= offset) > - break; > - } > > error = shmem_get_folio(inode, index, 0, &folio, SGP_READ); > if (error) { > @@ -3148,18 +3140,14 @@ static ssize_t shmem_file_read_iter(struct kiocb *iocb, struct iov_iter *to) > * We must evaluate after, since reads (unlike writes) > * are called without i_rwsem protection against truncate > */ > - nr = PAGE_SIZE; > i_size = i_size_read(inode); > - end_index = i_size >> PAGE_SHIFT; > - if (index == end_index) { > - nr = i_size & ~PAGE_MASK; > - if (nr <= offset) { > - if (folio) > - folio_put(folio); > - break; > - } > + if (unlikely(iocb->ki_pos >= i_size)) { > + if (folio) > + folio_put(folio); > + break; > } > - nr -= offset; > + end_offset = min_t(loff_t, i_size, iocb->ki_pos + to->count); > + nr = min_t(loff_t, end_offset - iocb->ki_pos, PAGE_SIZE - offset); > > if (folio) { > /* > @@ -3199,8 +3187,9 @@ static ssize_t shmem_file_read_iter(struct kiocb *iocb, struct iov_iter *to) > > retval += ret; > offset += ret; > - index += offset >> PAGE_SHIFT; > offset &= ~PAGE_MASK; > + iocb->ki_pos += ret; > + index = iocb->ki_pos >> PAGE_SHIFT; remove this line. > > if (!iov_iter_count(to)) > break; > @@ -3211,7 +3200,6 @@ static ssize_t shmem_file_read_iter(struct kiocb *iocb, struct iov_iter *to) > cond_resched(); > } > > - *ppos = ((loff_t) index << PAGE_SHIFT) + offset; > file_accessed(file); > return retval ? retval : error; > }