From patchwork Sat Oct 31 08:59:52 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Christoph Hellwig X-Patchwork-Id: 11871173 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 3B482697 for ; Sat, 31 Oct 2020 09:04:32 +0000 (UTC) Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.kernel.org (Postfix) with ESMTP id ADBAD2076E for ; Sat, 31 Oct 2020 09:04:31 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (2048-bit key) header.d=infradead.org header.i=@infradead.org header.b="rPE+iUoU" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org ADBAD2076E Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=lst.de Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=owner-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix) id EAB3F6B0036; Sat, 31 Oct 2020 05:04:30 -0400 (EDT) Delivered-To: linux-mm-outgoing@kvack.org Received: by kanga.kvack.org (Postfix, from userid 40) id E83636B005C; Sat, 31 Oct 2020 05:04:30 -0400 (EDT) X-Original-To: int-list-linux-mm@kvack.org X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id D23CD6B005D; Sat, 31 Oct 2020 05:04:30 -0400 (EDT) X-Original-To: linux-mm@kvack.org X-Delivered-To: linux-mm@kvack.org Received: from forelay.hostedemail.com (smtprelay0026.hostedemail.com [216.40.44.26]) by kanga.kvack.org (Postfix) with ESMTP id A56A96B0036 for ; Sat, 31 Oct 2020 05:04:30 -0400 (EDT) Received: from smtpin19.hostedemail.com (10.5.19.251.rfc1918.com [10.5.19.251]) by forelay01.hostedemail.com (Postfix) with ESMTP id 4D172180AD806 for ; Sat, 31 Oct 2020 09:04:30 +0000 (UTC) X-FDA: 77431634700.19.plane50_4404bdb2729d Received: from filter.hostedemail.com (10.5.16.251.rfc1918.com [10.5.16.251]) by smtpin19.hostedemail.com (Postfix) with ESMTP id 303991AD1B2 for ; Sat, 31 Oct 2020 09:04:30 +0000 (UTC) X-Spam-Summary: 1,0,0,8831ba0849aef241,d41d8cd98f00b204,batv+e1c4655336593cdcfc57+6278+infradead.org+hch@casper.srs.infradead.org,,RULES_HIT:41:69:355:379:541:800:960:973:988:989:1260:1311:1314:1345:1359:1437:1515:1535:1543:1711:1730:1747:1777:1792:1981:2194:2199:2393:2553:2559:2562:2693:2914:3138:3139:3140:3141:3142:3355:3865:3866:3867:3868:3870:3871:3872:3874:4250:4321:5007:6261:6653:8957:9592:10004:11026:11473:11658:11914:12043:12114:12160:12291:12294:12296:12297:12438:12517:12519:12555:12683:12895:13184:13229:13894:14096:14181:14394:14721:21080:21222:21451:21627:21990:30012:30054:30070:30090,0,RBL:90.155.50.34:@casper.srs.infradead.org:.lbl8.mailshell.net-62.8.15.100 64.201.201.201;04yf4jfp1rc11e5ppwx6sdqy54t1bopz9sexgne5zfnd8kzm4w8tcd5nebbttsu.n8zuyuz6ybnm8g87fb4w45kcrs56bzd3npsmcdu6noi4amns1rzt7yib5h4x9y3.c-lbl8.mailshell.net-223.238.255.100,CacheIP:none,Bayesian:0.5,0.5,0.5,Netcheck:none,DomainCache:0,MSF:not bulk,SPF:fn,MSBL:0,DNSBL:neutral,Custom_rules:0:0:0,LFtime:6 9,LUA_SU X-HE-Tag: plane50_4404bdb2729d X-Filterd-Recvd-Size: 5444 Received: from casper.infradead.org (casper.infradead.org [90.155.50.34]) by imf18.hostedemail.com (Postfix) with ESMTP for ; Sat, 31 Oct 2020 09:04:29 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=casper.20170209; h=Content-Transfer-Encoding:MIME-Version: References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From:Sender:Reply-To: Content-Type:Content-ID:Content-Description; bh=dg723lnpWwNTxY9ABCjUoTAWt08WeAMzn07QoHNZtdY=; b=rPE+iUoURvcX2caUdfem5LlykZ kyPM2JEYriA1DLC1gDnZmLc/R1XPQmrgQ+ZXDMbyG49cWcPfAkpxyPvEf/X1V4ZyGvDyUJcZS1S3J rm5DyhcN3+f6xhU3ywxEOlJjPX31jywIOCenUm/jwtd+mTi1gkKR8M11TtdixRpjkD9wBwU8EPrYi nOiIZAQ9Il5fEyhvUta8zvVqx+EkZyCFlZlB4K4Ffjks9w3LyDe9s+xqVMRUt42XuBpaXa4CVO48j nu0/eicU/avxbITINhBURcvaPiKOy3xugRiYFIajQv+/PQFSv7/Owqn7ElN/4Tj+ES4HS5NSUaZMO SANv1kSw==; Received: from 089144193201.atnat0002.highway.a1.net ([89.144.193.201] helo=localhost) by casper.infradead.org with esmtpsa (Exim 4.92.3 #3 (Red Hat Linux)) id 1kYmoD-00075v-NF; Sat, 31 Oct 2020 09:04:26 +0000 From: Christoph Hellwig To: Andrew Morton Cc: Kent Overstreet , Matthew Wilcox , linux-mm@kvack.org, linux-fsdevel@vger.kernel.org Subject: [PATCH 01/13] mm: simplify generic_file_buffered_read_readpage Date: Sat, 31 Oct 2020 09:59:52 +0100 Message-Id: <20201031090004.452516-2-hch@lst.de> X-Mailer: git-send-email 2.28.0 In-Reply-To: <20201031090004.452516-1-hch@lst.de> References: <20201031090004.452516-1-hch@lst.de> MIME-Version: 1.0 X-SRS-Rewrite: SMTP reverse-path rewritten from by casper.infradead.org. See http://www.infradead.org/rpr.html 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: Stop passing pointless arguments, and return an int instead of a page struct that contains either the passed in page, an ERR_PTR or NULL and use goto labels to share common code. Also rename the function to filemap_readpage as it is a fairly generic wrapper around ->readpage that isn't really specific to generic_file_buffered_read. Signed-off-by: Christoph Hellwig --- mm/filemap.c | 66 ++++++++++++++++++++++++++++------------------------ 1 file changed, 36 insertions(+), 30 deletions(-) diff --git a/mm/filemap.c b/mm/filemap.c index d90614f501daa5..2e997890cc81c2 100644 --- a/mm/filemap.c +++ b/mm/filemap.c @@ -2168,59 +2168,53 @@ static int lock_page_for_iocb(struct kiocb *iocb, struct page *page) return lock_page_killable(page); } -static struct page * -generic_file_buffered_read_readpage(struct kiocb *iocb, - struct file *filp, - struct address_space *mapping, - struct page *page) +static int filemap_readpage(struct kiocb *iocb, struct page *page) { - struct file_ra_state *ra = &filp->f_ra; - int error; + struct file *file = iocb->ki_filp; + int error = -EAGAIN; if (iocb->ki_flags & (IOCB_NOIO | IOCB_NOWAIT)) { unlock_page(page); - put_page(page); - return ERR_PTR(-EAGAIN); + goto out_put_page; } /* - * A previous I/O error may have been due to temporary - * failures, eg. multipath errors. - * PG_error will be set again if readpage fails. + * A previous I/O error may have been due to temporary failures, e.g. + * multipath errors. PG_error will be set again if readpage fails. */ ClearPageError(page); /* Start the actual read. The read will unlock the page. */ - error = mapping->a_ops->readpage(filp, page); - - if (unlikely(error)) { - put_page(page); - return error != AOP_TRUNCATED_PAGE ? ERR_PTR(error) : NULL; - } + error = file->f_mapping->a_ops->readpage(file, page); + if (unlikely(error)) + goto out_put_page; if (!PageUptodate(page)) { error = lock_page_for_iocb(iocb, page); - if (unlikely(error)) { - put_page(page); - return ERR_PTR(error); - } + if (unlikely(error)) + goto out_put_page; + if (!PageUptodate(page)) { if (page->mapping == NULL) { /* * invalidate_mapping_pages got it */ unlock_page(page); - put_page(page); - return NULL; + error = AOP_TRUNCATED_PAGE; + goto out_put_page; } unlock_page(page); - shrink_readahead_size_eio(ra); - put_page(page); - return ERR_PTR(-EIO); + shrink_readahead_size_eio(&file->f_ra); + error = -EIO; + goto out_put_page; } + unlock_page(page); } + return 0; - return page; +out_put_page: + put_page(page); + return error; } static struct page * @@ -2291,7 +2285,13 @@ generic_file_buffered_read_pagenotuptodate(struct kiocb *iocb, return page; } - return generic_file_buffered_read_readpage(iocb, filp, mapping, page); + error = filemap_readpage(iocb, page); + if (error) { + if (error == AOP_TRUNCATED_PAGE) + return NULL; + return ERR_PTR(error); + } + return page; } static struct page * @@ -2322,7 +2322,13 @@ generic_file_buffered_read_no_cached_page(struct kiocb *iocb, return error != -EEXIST ? ERR_PTR(error) : NULL; } - return generic_file_buffered_read_readpage(iocb, filp, mapping, page); + error = filemap_readpage(iocb, page); + if (error) { + if (error == AOP_TRUNCATED_PAGE) + return NULL; + return ERR_PTR(error); + } + return page; } static int generic_file_buffered_read_get_pages(struct kiocb *iocb, From patchwork Sat Oct 31 08:59:53 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Christoph Hellwig X-Patchwork-Id: 11871181 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id E413C697 for ; Sat, 31 Oct 2020 09:06:43 +0000 (UTC) Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.kernel.org (Postfix) with ESMTP id 932F42076D for ; Sat, 31 Oct 2020 09:06:43 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (2048-bit key) header.d=infradead.org header.i=@infradead.org header.b="b5SHlqYU" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 932F42076D Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=lst.de Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=owner-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix) id BBEFB6B0036; Sat, 31 Oct 2020 05:06:42 -0400 (EDT) Delivered-To: linux-mm-outgoing@kvack.org Received: by kanga.kvack.org (Postfix, from userid 40) id B70046B005C; Sat, 31 Oct 2020 05:06:42 -0400 (EDT) X-Original-To: int-list-linux-mm@kvack.org X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id A5F346B005D; Sat, 31 Oct 2020 05:06:42 -0400 (EDT) X-Original-To: linux-mm@kvack.org X-Delivered-To: linux-mm@kvack.org Received: from forelay.hostedemail.com (smtprelay0038.hostedemail.com [216.40.44.38]) by kanga.kvack.org (Postfix) with ESMTP id 78AFD6B0036 for ; Sat, 31 Oct 2020 05:06:42 -0400 (EDT) Received: from smtpin04.hostedemail.com (10.5.19.251.rfc1918.com [10.5.19.251]) by forelay02.hostedemail.com (Postfix) with ESMTP id 28E2433CD for ; Sat, 31 Oct 2020 09:06:42 +0000 (UTC) X-FDA: 77431640244.04.force25_2e04c162729d Received: from filter.hostedemail.com (10.5.16.251.rfc1918.com [10.5.16.251]) by smtpin04.hostedemail.com (Postfix) with ESMTP id 1149C8005050 for ; Sat, 31 Oct 2020 09:06:42 +0000 (UTC) X-Spam-Summary: 1,0,0,c91f49cda0b258fd,d41d8cd98f00b204,batv+e1c4655336593cdcfc57+6278+infradead.org+hch@casper.srs.infradead.org,,RULES_HIT:41:69:355:379:541:800:960:973:988:989:1260:1311:1314:1345:1359:1437:1515:1535:1543:1711:1730:1747:1777:1792:2194:2199:2307:2393:2559:2562:2901:3138:3139:3140:3141:3142:3355:3865:3866:3867:3868:3870:3872:3874:4250:5007:6261:6653:7904:8957:10004:11026:11473:11658:11914:11984:12043:12114:12160:12291:12294:12296:12297:12438:12517:12519:12555:12683:12895:13894:14110:14181:14394:14721:21080:21222:21324:21451:21627:21990:30012:30054,0,RBL:90.155.50.34:@casper.srs.infradead.org:.lbl8.mailshell.net-64.201.201.201 62.8.15.100;04yrg5z9z5j99rcnefkobzohwibtkop61hq6ra76r65w1xao4hho5rw5u4bz64z.47xyrmn1jzh75xkbsbiccsgcu46isaga9sj5irqctxh9hey7atj7ose6h94yzok.g-lbl8.mailshell.net-223.238.255.100,CacheIP:none,Bayesian:0.5,0.5,0.5,Netcheck:none,DomainCache:0,MSF:not bulk,SPF:fn,MSBL:0,DNSBL:neutral,Custom_rules:0:0:0,LFtime:66,LUA_SUMMARY:none X-HE-Tag: force25_2e04c162729d X-Filterd-Recvd-Size: 5377 Received: from casper.infradead.org (casper.infradead.org [90.155.50.34]) by imf02.hostedemail.com (Postfix) with ESMTP for ; Sat, 31 Oct 2020 09:06:39 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=casper.20170209; h=Content-Transfer-Encoding:MIME-Version: References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From:Sender:Reply-To: Content-Type:Content-ID:Content-Description; bh=UhjBocD9yV7vleGZemMhqxRkxBzWAvsA1Wt9SDILgQE=; b=b5SHlqYU5G3+SmN+u5SR0LlG8C BTFqhQLOoRnZHy3KYgfOy97MJKbm9ykalT3/zTPvErfjA1NrftfvBF6sFepKFVZiPDK4a1yol+S6I mlwhwKvwKQ47jL1yT2M85T6ulDw3WiQ+unelr+p3NUGNwcy080uMoNcJ0B/NjQ9QmRlkmMuIETcnz kPQ+rP+1tV+DzLWdWw3dzLU3rFYAfhzM0LbjeSPTkVXwGpgJAHA8QVqJ4EznWsKPzwKz1G6gKNqyi xDn0bf42iyU54YL+QsZccEpvmU3QoHSncLRgVeoe1uODpiwhVeMijaIaK2QB4YuZFvAfd2DpmibvZ /TntT/GA==; Received: from 089144193201.atnat0002.highway.a1.net ([89.144.193.201] helo=localhost) by casper.infradead.org with esmtpsa (Exim 4.92.3 #3 (Red Hat Linux)) id 1kYmqK-0007Fl-R6; Sat, 31 Oct 2020 09:06:37 +0000 From: Christoph Hellwig To: Andrew Morton Cc: Kent Overstreet , Matthew Wilcox , linux-mm@kvack.org, linux-fsdevel@vger.kernel.org Subject: [PATCH 02/13] mm: simplify generic_file_buffered_read_pagenotuptodate Date: Sat, 31 Oct 2020 09:59:53 +0100 Message-Id: <20201031090004.452516-3-hch@lst.de> X-Mailer: git-send-email 2.28.0 In-Reply-To: <20201031090004.452516-1-hch@lst.de> References: <20201031090004.452516-1-hch@lst.de> MIME-Version: 1.0 X-SRS-Rewrite: SMTP reverse-path rewritten from by casper.infradead.org. See http://www.infradead.org/rpr.html 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: Stop passing pointless arguments, and return an int instead of a page struct that contains either the passed in page, an ERR_PTR or NULL and use goto labels to share common code. Signed-off-by: Christoph Hellwig --- mm/filemap.c | 65 ++++++++++++++++++++++------------------------------ 1 file changed, 28 insertions(+), 37 deletions(-) diff --git a/mm/filemap.c b/mm/filemap.c index 2e997890cc81c2..c717cfe35cc72a 100644 --- a/mm/filemap.c +++ b/mm/filemap.c @@ -2217,15 +2217,11 @@ static int filemap_readpage(struct kiocb *iocb, struct page *page) return error; } -static struct page * -generic_file_buffered_read_pagenotuptodate(struct kiocb *iocb, - struct file *filp, - struct iov_iter *iter, - struct page *page, - loff_t pos, loff_t count) +static int generic_file_buffered_read_pagenotuptodate(struct kiocb *iocb, + struct iov_iter *iter, struct page *page, loff_t pos, + loff_t count) { - struct address_space *mapping = filp->f_mapping; - struct inode *inode = mapping->host; + struct address_space *mapping = iocb->ki_filp->f_mapping; int error; /* @@ -2239,15 +2235,14 @@ generic_file_buffered_read_pagenotuptodate(struct kiocb *iocb, } else { error = wait_on_page_locked_killable(page); } - if (unlikely(error)) { - put_page(page); - return ERR_PTR(error); - } + if (unlikely(error)) + goto put_page; + if (PageUptodate(page)) - return page; + return 0; - if (inode->i_blkbits == PAGE_SHIFT || - !mapping->a_ops->is_partially_uptodate) + if (mapping->host->i_blkbits == PAGE_SHIFT || + !mapping->a_ops->is_partially_uptodate) goto page_not_up_to_date; /* pipes can't handle partially uptodate pages */ if (unlikely(iov_iter_is_pipe(iter))) @@ -2260,38 +2255,33 @@ generic_file_buffered_read_pagenotuptodate(struct kiocb *iocb, if (!mapping->a_ops->is_partially_uptodate(page, pos & ~PAGE_MASK, count)) goto page_not_up_to_date_locked; + +unlock_page: unlock_page(page); - return page; + return 0; page_not_up_to_date: /* Get exclusive access to the page ... */ error = lock_page_for_iocb(iocb, page); - if (unlikely(error)) { - put_page(page); - return ERR_PTR(error); - } + if (unlikely(error)) + goto put_page; page_not_up_to_date_locked: /* Did it get truncated before we got the lock? */ if (!page->mapping) { unlock_page(page); - put_page(page); - return NULL; + error = AOP_TRUNCATED_PAGE; + goto put_page; } /* Did somebody else fill it already? */ - if (PageUptodate(page)) { - unlock_page(page); - return page; - } + if (PageUptodate(page)) + goto unlock_page; + return filemap_readpage(iocb, page); - error = filemap_readpage(iocb, page); - if (error) { - if (error == AOP_TRUNCATED_PAGE) - return NULL; - return ERR_PTR(error); - } - return page; +put_page: + put_page(page); + return error; } static struct page * @@ -2395,13 +2385,14 @@ static int generic_file_buffered_read_get_pages(struct kiocb *iocb, break; } - page = generic_file_buffered_read_pagenotuptodate(iocb, - filp, iter, page, pg_pos, pg_count); - if (IS_ERR_OR_NULL(page)) { + err = generic_file_buffered_read_pagenotuptodate(iocb, + iter, page, pg_pos, pg_count); + if (err) { + if (err == AOP_TRUNCATED_PAGE) + err = 0; for (j = i + 1; j < nr_got; j++) put_page(pages[j]); nr_got = i; - err = PTR_ERR_OR_ZERO(page); break; } } From patchwork Sat Oct 31 08:59:54 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Christoph Hellwig X-Patchwork-Id: 11871187 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 99243921 for ; Sat, 31 Oct 2020 09:08:53 +0000 (UTC) Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.kernel.org (Postfix) with ESMTP id 374F72224A for ; Sat, 31 Oct 2020 09:08:53 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (2048-bit key) header.d=infradead.org header.i=@infradead.org header.b="aHmhXJQy" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 374F72224A Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=lst.de Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=owner-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix) id 6B27C6B0036; Sat, 31 Oct 2020 05:08:52 -0400 (EDT) Delivered-To: linux-mm-outgoing@kvack.org Received: by kanga.kvack.org (Postfix, from userid 40) id 661916B005C; Sat, 31 Oct 2020 05:08:52 -0400 (EDT) X-Original-To: int-list-linux-mm@kvack.org X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 52A186B005D; Sat, 31 Oct 2020 05:08:52 -0400 (EDT) X-Original-To: linux-mm@kvack.org X-Delivered-To: linux-mm@kvack.org Received: from forelay.hostedemail.com (smtprelay0055.hostedemail.com [216.40.44.55]) by kanga.kvack.org (Postfix) with ESMTP id 26E556B0036 for ; Sat, 31 Oct 2020 05:08:52 -0400 (EDT) Received: from smtpin16.hostedemail.com (10.5.19.251.rfc1918.com [10.5.19.251]) by forelay03.hostedemail.com (Postfix) with ESMTP id BA585824999B for ; Sat, 31 Oct 2020 09:08:51 +0000 (UTC) X-FDA: 77431645662.16.shame79_420c2382729d Received: from filter.hostedemail.com (10.5.16.251.rfc1918.com [10.5.16.251]) by smtpin16.hostedemail.com (Postfix) with ESMTP id 9F3E2100E690B for ; Sat, 31 Oct 2020 09:08:51 +0000 (UTC) X-Spam-Summary: 1,0,0,74c0c41a395b22ca,d41d8cd98f00b204,batv+e1c4655336593cdcfc57+6278+infradead.org+hch@casper.srs.infradead.org,,RULES_HIT:41:69:355:379:541:800:960:973:988:989:1260:1311:1314:1345:1359:1437:1515:1534:1542:1711:1730:1747:1777:1792:2194:2199:2393:2559:2562:3138:3139:3140:3141:3142:3353:3865:3867:3868:3870:3871:3872:5007:6119:6261:6653:7903:7904:8957:9592:10004:11026:11473:11658:11914:11984:12043:12114:12160:12296:12297:12438:12517:12519:12555:12895:13255:13894:14181:14394:14721:21080:21324:21451:21627:30054,0,RBL:90.155.50.34:@casper.srs.infradead.org:.lbl8.mailshell.net-62.8.15.100 64.201.201.201;04ygjk94tt6448um6utiaxiryzbg6yc56mmxeyds6tj6ztqt4ewbhtkxw8rqrqn.jjthtyh6yrz6firjqj3trqnmxydc3ogzbuj88yyc6a4h1eh7u7oznqdgpawi435.1-lbl8.mailshell.net-223.238.255.100,CacheIP:none,Bayesian:0.5,0.5,0.5,Netcheck:none,DomainCache:0,MSF:not bulk,SPF:fn,MSBL:0,DNSBL:neutral,Custom_rules:0:0:0,LFtime:68,LUA_SUMMARY:none X-HE-Tag: shame79_420c2382729d X-Filterd-Recvd-Size: 3849 Received: from casper.infradead.org (casper.infradead.org [90.155.50.34]) by imf10.hostedemail.com (Postfix) with ESMTP for ; Sat, 31 Oct 2020 09:08:51 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=casper.20170209; h=Content-Transfer-Encoding:MIME-Version: References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From:Sender:Reply-To: Content-Type:Content-ID:Content-Description; bh=UxcF/Ax2nIsVuoOm9+YumDdpvKlA4H0xkbAmouFAhOA=; b=aHmhXJQyVf83IvaSThL0uw53Xa UmNpYdK6al5Ok6nYbchIvi6srQB0Z+FrFJcPIOQcP/CnIaoZQkUnMe9p2+iKY8w35hngJVxxp0vxu 7riidozLH7iTOKdPbsdO2AecTS3dITLRPBXXh53R84ejFPEeyyk/4/dsFEfQtrZpyp49bOliRN/Bl 0pk5FOCFlp+gBb1stKHECalKwzfZHr9AQlMizKl1S9YW/BUJnf29vPyuafFEQN3z3WGWcSU7Hs0SQ CogmEjYvCe/Qd/TsBFrBrSl+0ZjwUWm8d4yREDfWzAwf+E547rd+XjAp0rL6Ur6NkYue4QS44pxCw xXm4HvMw==; Received: from 089144193201.atnat0002.highway.a1.net ([89.144.193.201] helo=localhost) by casper.infradead.org with esmtpsa (Exim 4.92.3 #3 (Red Hat Linux)) id 1kYmsR-0007Lg-O6; Sat, 31 Oct 2020 09:08:48 +0000 From: Christoph Hellwig To: Andrew Morton Cc: Kent Overstreet , Matthew Wilcox , linux-mm@kvack.org, linux-fsdevel@vger.kernel.org Subject: [PATCH 03/13] mm: lift the nowait checks into generic_file_buffered_read_pagenotuptodate Date: Sat, 31 Oct 2020 09:59:54 +0100 Message-Id: <20201031090004.452516-4-hch@lst.de> X-Mailer: git-send-email 2.28.0 In-Reply-To: <20201031090004.452516-1-hch@lst.de> References: <20201031090004.452516-1-hch@lst.de> MIME-Version: 1.0 X-SRS-Rewrite: SMTP reverse-path rewritten from by casper.infradead.org. See http://www.infradead.org/rpr.html 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: Move the checks for IOCB_NOWAIT and IOCB_WAITQ from the only caller into generic_file_buffered_read_pagenotuptodate, which simplifies the error unwinding. Signed-off-by: Christoph Hellwig --- mm/filemap.c | 28 +++++++++++----------------- 1 file changed, 11 insertions(+), 17 deletions(-) diff --git a/mm/filemap.c b/mm/filemap.c index c717cfe35cc72a..bae5b905aa7bdc 100644 --- a/mm/filemap.c +++ b/mm/filemap.c @@ -2219,19 +2219,22 @@ static int filemap_readpage(struct kiocb *iocb, struct page *page) static int generic_file_buffered_read_pagenotuptodate(struct kiocb *iocb, struct iov_iter *iter, struct page *page, loff_t pos, - loff_t count) + loff_t count, bool first) { struct address_space *mapping = iocb->ki_filp->f_mapping; - int error; + int error = -EAGAIN; + + if (iocb->ki_flags & IOCB_NOWAIT) + goto put_page; /* - * See comment in do_read_cache_page on why - * wait_on_page_locked is used to avoid unnecessarily - * serialisations and why it's safe. + * See comment in do_read_cache_page on why wait_on_page_locked is used + * to avoid unnecessarily serialisations and why it's safe. */ if (iocb->ki_flags & IOCB_WAITQ) { - error = wait_on_page_locked_async(page, - iocb->ki_waitq); + if (!first) + goto put_page; + error = wait_on_page_locked_async(page, iocb->ki_waitq); } else { error = wait_on_page_locked_killable(page); } @@ -2376,17 +2379,8 @@ static int generic_file_buffered_read_get_pages(struct kiocb *iocb, } if (!PageUptodate(page)) { - if ((iocb->ki_flags & IOCB_NOWAIT) || - ((iocb->ki_flags & IOCB_WAITQ) && i)) { - for (j = i; j < nr_got; j++) - put_page(pages[j]); - nr_got = i; - err = -EAGAIN; - break; - } - err = generic_file_buffered_read_pagenotuptodate(iocb, - iter, page, pg_pos, pg_count); + iter, page, pg_pos, pg_count, i == 0); if (err) { if (err == AOP_TRUNCATED_PAGE) err = 0; From patchwork Sat Oct 31 08:59:55 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Christoph Hellwig X-Patchwork-Id: 11871215 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 4E08C1130 for ; Sat, 31 Oct 2020 09:11:07 +0000 (UTC) Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.kernel.org (Postfix) with ESMTP id CC0C92076E for ; Sat, 31 Oct 2020 09:11:06 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (2048-bit key) header.d=infradead.org header.i=@infradead.org header.b="ACTuWGop" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org CC0C92076E Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=lst.de Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=owner-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix) id 108B66B005D; Sat, 31 Oct 2020 05:11:06 -0400 (EDT) Delivered-To: linux-mm-outgoing@kvack.org Received: by kanga.kvack.org (Postfix, from userid 40) id 0DDD96B0062; Sat, 31 Oct 2020 05:11:06 -0400 (EDT) X-Original-To: int-list-linux-mm@kvack.org X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id EE9166B006C; Sat, 31 Oct 2020 05:11:05 -0400 (EDT) X-Original-To: linux-mm@kvack.org X-Delivered-To: linux-mm@kvack.org Received: from forelay.hostedemail.com (smtprelay0066.hostedemail.com [216.40.44.66]) by kanga.kvack.org (Postfix) with ESMTP id C1F606B005D for ; Sat, 31 Oct 2020 05:11:05 -0400 (EDT) Received: from smtpin17.hostedemail.com (10.5.19.251.rfc1918.com [10.5.19.251]) by forelay05.hostedemail.com (Postfix) with ESMTP id 64DCE181AEF15 for ; Sat, 31 Oct 2020 09:11:05 +0000 (UTC) X-FDA: 77431651290.17.trail80_210b3132729d Received: from filter.hostedemail.com (10.5.16.251.rfc1918.com [10.5.16.251]) by smtpin17.hostedemail.com (Postfix) with ESMTP id 4D005180D0181 for ; Sat, 31 Oct 2020 09:11:05 +0000 (UTC) X-Spam-Summary: 1,0,0,3647ade8eaec4dbb,d41d8cd98f00b204,batv+e1c4655336593cdcfc57+6278+infradead.org+hch@casper.srs.infradead.org,,RULES_HIT:41:69:355:379:541:800:960:973:988:989:1260:1311:1314:1345:1359:1437:1515:1535:1543:1711:1730:1747:1777:1792:2194:2198:2199:2200:2393:2559:2562:3138:3139:3140:3141:3142:3355:3865:3866:3867:3868:3871:3872:5007:6261:6653:7904:8957:9036:9592:10004:11026:11473:11658:11914:11984:12043:12114:12160:12291:12296:12297:12438:12517:12519:12555:12683:12895:13255:13894:14110:14181:14394:14721:21080:21451:21627:21990:30054,0,RBL:90.155.50.34:@casper.srs.infradead.org:.lbl8.mailshell.net-62.8.15.100 64.201.201.201;04yru117h9nh8bod9ri3adfwh7fiaocm61mrpdfyegf54676eaej5q8yxh7r9oh.iochot18wn6co9h1wngyogwzm1zg1iocq7kpayta9it3g7tucwi5obwt8fp5gm4.n-lbl8.mailshell.net-223.238.255.100,CacheIP:none,Bayesian:0.5,0.5,0.5,Netcheck:none,DomainCache:0,MSF:not bulk,SPF:fn,MSBL:0,DNSBL:neutral,Custom_rules:0:0:0,LFtime:69,LUA_SUMMARY:none X-HE-Tag: trail80_210b3132729d X-Filterd-Recvd-Size: 5171 Received: from casper.infradead.org (casper.infradead.org [90.155.50.34]) by imf29.hostedemail.com (Postfix) with ESMTP for ; Sat, 31 Oct 2020 09:11:04 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=casper.20170209; h=Content-Transfer-Encoding:MIME-Version: References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From:Sender:Reply-To: Content-Type:Content-ID:Content-Description; bh=2sJM8L6vqDc82P4Zib4xzj+qKJ0+sgvNKXsT+iu4GIo=; b=ACTuWGopBUTRfiwiY/2UfoxmBR rxlS/8ys9h/z7FKsIObrB0RA1+xvAQ9HVg0vBHoa/CVwBaxVa8CUyrKCfZk9Zbs0BMxExyA4D4rov C0hKhk1MiwGZfLO6hspSTCPN9O0aBkqKxGS53TmTdDsswPbzGIBnU5WxADliiqgtmGxhMFu+NV4Fb KcVxuvmXwbfAk2OxgHAbfnPD4/pAVSEFIYE4MK4ldW6XnJmi0ej1WSV3dMccPpFKexJ+5ZqgrybcR Hcffrm3fEpATXviWbUOiL8YwF1+Jj8mZpZEXWUz8/EHBIkLnHcJM+gRgXz4ggpFq9r4mVtRGAsBPn x2T2HJtg==; Received: from 089144193201.atnat0002.highway.a1.net ([89.144.193.201] helo=localhost) by casper.infradead.org with esmtpsa (Exim 4.92.3 #3 (Red Hat Linux)) id 1kYmua-0007ZY-Ru; Sat, 31 Oct 2020 09:11:01 +0000 From: Christoph Hellwig To: Andrew Morton Cc: Kent Overstreet , Matthew Wilcox , linux-mm@kvack.org, linux-fsdevel@vger.kernel.org Subject: [PATCH 04/13] mm: handle readahead in generic_file_buffered_read_pagenotuptodate Date: Sat, 31 Oct 2020 09:59:55 +0100 Message-Id: <20201031090004.452516-5-hch@lst.de> X-Mailer: git-send-email 2.28.0 In-Reply-To: <20201031090004.452516-1-hch@lst.de> References: <20201031090004.452516-1-hch@lst.de> MIME-Version: 1.0 X-SRS-Rewrite: SMTP reverse-path rewritten from by casper.infradead.org. See http://www.infradead.org/rpr.html 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: Move the calculation of the per-page variables and the readahead handling from the only caller into generic_file_buffered_read_pagenotuptodate, which now becomes a routine to handle everything related to bringing one page uptodate and thus is renamed to filemap_read_one_page. Signed-off-by: Christoph Hellwig --- mm/filemap.c | 63 +++++++++++++++++++++++----------------------------- 1 file changed, 28 insertions(+), 35 deletions(-) diff --git a/mm/filemap.c b/mm/filemap.c index bae5b905aa7bdc..5cdf8090d4e12c 100644 --- a/mm/filemap.c +++ b/mm/filemap.c @@ -2217,13 +2217,26 @@ static int filemap_readpage(struct kiocb *iocb, struct page *page) return error; } -static int generic_file_buffered_read_pagenotuptodate(struct kiocb *iocb, - struct iov_iter *iter, struct page *page, loff_t pos, - loff_t count, bool first) +static int filemap_make_page_uptodate(struct kiocb *iocb, struct iov_iter *iter, + struct page *page, pgoff_t pg_index, bool first) { - struct address_space *mapping = iocb->ki_filp->f_mapping; + struct file *file = iocb->ki_filp; + struct address_space *mapping = file->f_mapping; + loff_t last = iocb->ki_pos + iter->count; + pgoff_t last_index = (last + PAGE_SIZE - 1) >> PAGE_SHIFT; + loff_t pos = max(iocb->ki_pos, (loff_t)pg_index << PAGE_SHIFT); int error = -EAGAIN; + if (PageReadahead(page)) { + if (iocb->ki_flags & IOCB_NOIO) + goto put_page; + page_cache_async_readahead(mapping, &file->f_ra, file, page, + pg_index, last_index - pg_index); + } + + if (PageUptodate(page)) + return 0; + if (iocb->ki_flags & IOCB_NOWAIT) goto put_page; @@ -2255,8 +2268,8 @@ static int generic_file_buffered_read_pagenotuptodate(struct kiocb *iocb, /* Did it get truncated before we got the lock? */ if (!page->mapping) goto page_not_up_to_date_locked; - if (!mapping->a_ops->is_partially_uptodate(page, - pos & ~PAGE_MASK, count)) + if (!mapping->a_ops->is_partially_uptodate(page, pos & ~PAGE_MASK, + last - pos)) goto page_not_up_to_date_locked; unlock_page: @@ -2360,35 +2373,15 @@ static int generic_file_buffered_read_get_pages(struct kiocb *iocb, nr_got = 1; got_pages: for (i = 0; i < nr_got; i++) { - struct page *page = pages[i]; - pgoff_t pg_index = index + i; - loff_t pg_pos = max(iocb->ki_pos, - (loff_t) pg_index << PAGE_SHIFT); - loff_t pg_count = iocb->ki_pos + iter->count - pg_pos; - - if (PageReadahead(page)) { - if (iocb->ki_flags & IOCB_NOIO) { - for (j = i; j < nr_got; j++) - put_page(pages[j]); - nr_got = i; - err = -EAGAIN; - break; - } - page_cache_async_readahead(mapping, ra, filp, page, - pg_index, last_index - pg_index); - } - - if (!PageUptodate(page)) { - err = generic_file_buffered_read_pagenotuptodate(iocb, - iter, page, pg_pos, pg_count, i == 0); - if (err) { - if (err == AOP_TRUNCATED_PAGE) - err = 0; - for (j = i + 1; j < nr_got; j++) - put_page(pages[j]); - nr_got = i; - break; - } + err = filemap_make_page_uptodate(iocb, iter, pages[i], + index + i, i == 0); + if (err) { + if (err == AOP_TRUNCATED_PAGE) + err = 0; + for (j = i + 1; j < nr_got; j++) + put_page(pages[j]); + nr_got = i; + break; } } From patchwork Sat Oct 31 08:59:56 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Christoph Hellwig X-Patchwork-Id: 11871223 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 9C85B1130 for ; Sat, 31 Oct 2020 09:13:17 +0000 (UTC) Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.kernel.org (Postfix) with ESMTP id 5A4BA2076E for ; Sat, 31 Oct 2020 09:13:17 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (2048-bit key) header.d=infradead.org header.i=@infradead.org header.b="c5X+sjhI" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 5A4BA2076E Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=lst.de Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=owner-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix) id 6CD636B0036; Sat, 31 Oct 2020 05:13:16 -0400 (EDT) Delivered-To: linux-mm-outgoing@kvack.org Received: by kanga.kvack.org (Postfix, from userid 40) id 67D8A6B005C; Sat, 31 Oct 2020 05:13:16 -0400 (EDT) X-Original-To: int-list-linux-mm@kvack.org X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 5452A6B006C; Sat, 31 Oct 2020 05:13:16 -0400 (EDT) X-Original-To: linux-mm@kvack.org X-Delivered-To: linux-mm@kvack.org Received: from forelay.hostedemail.com (smtprelay0181.hostedemail.com [216.40.44.181]) by kanga.kvack.org (Postfix) with ESMTP id 26EC56B0036 for ; Sat, 31 Oct 2020 05:13:16 -0400 (EDT) Received: from smtpin26.hostedemail.com (10.5.19.251.rfc1918.com [10.5.19.251]) by forelay05.hostedemail.com (Postfix) with ESMTP id B959F181AEF15 for ; Sat, 31 Oct 2020 09:13:15 +0000 (UTC) X-FDA: 77431656750.26.bed35_2a026c12729d Received: from filter.hostedemail.com (10.5.16.251.rfc1918.com [10.5.16.251]) by smtpin26.hostedemail.com (Postfix) with ESMTP id 994F41804B65C for ; Sat, 31 Oct 2020 09:13:15 +0000 (UTC) X-Spam-Summary: 1,0,0,36f50d3dd7c13f16,d41d8cd98f00b204,batv+e1c4655336593cdcfc57+6278+infradead.org+hch@casper.srs.infradead.org,,RULES_HIT:41:69:355:379:541:800:960:982:988:989:1260:1311:1314:1345:1359:1437:1515:1534:1543:1711:1730:1747:1777:1792:2194:2199:2393:2559:2562:3138:3139:3140:3141:3142:3355:3865:3867:3868:3870:3871:3872:4321:4605:5007:6119:6261:6653:7903:7904:9036:9592:10004:11026:11473:11658:11914:11984:12043:12114:12160:12296:12297:12438:12517:12519:12555:12683:12895:12986:13894:14110:14181:14394:14721:21080:21324:21451:21627:21990:30054,0,RBL:90.155.50.34:@casper.srs.infradead.org:.lbl8.mailshell.net-64.201.201.201 62.8.15.100;04ygb8fsoyprxgqeuc6t5u6r9zh1rop6w74aa3wt3pn1xetftpbte93hj7agmrn.5re5bket655683o1ijod8rsmoodkwja4pj95pa8y8r76zxthp8gpjafow448trf.4-lbl8.mailshell.net-223.238.255.100,CacheIP:none,Bayesian:0.5,0.5,0.5,Netcheck:none,DomainCache:0,MSF:not bulk,SPF:fn,MSBL:0,DNSBL:neutral,Custom_rules:0:0:0,LFtime:70,LUA_SUMMARY:none X-HE-Tag: bed35_2a026c12729d X-Filterd-Recvd-Size: 4969 Received: from casper.infradead.org (casper.infradead.org [90.155.50.34]) by imf33.hostedemail.com (Postfix) with ESMTP for ; Sat, 31 Oct 2020 09:13:15 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=casper.20170209; h=Content-Transfer-Encoding:MIME-Version: References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From:Sender:Reply-To: Content-Type:Content-ID:Content-Description; bh=7D2NpM41epKpom692Wn+SfTL8DLMRgNwbln8pAHhUis=; b=c5X+sjhI68xlbZ1w7KORhijPsf jnC2yfRf5D+ZUxC1O/ezGE3NhlmevxUfgQqVlay+zN3Y4cv47JpomS28Ex7PLuUcBAOjqCro48sgv U6laupoVWz/V6D7jyV97uZTMeGrqP4R1I/i2Hd0BsjbrsFrxUGLDTxzF6mS7sNrevGIraFHa9x7vJ IK2ek5hxZcCk19ILMoXQhJU5rVxCtk/SLfkacMh1OJ836UglD7AyHFJqDoak9sfgFKDhP1Xws01S1 fEI+Hs+A/s2M6vZt8eUPBC+e52j2tefcdFBcpSevRAK8/96MlvSJIg9WmWVTTnGpJzpWyVRSxWmdZ B+rX4DIg==; Received: from 089144193201.atnat0002.highway.a1.net ([89.144.193.201] helo=localhost) by casper.infradead.org with esmtpsa (Exim 4.92.3 #3 (Red Hat Linux)) id 1kYmwh-0007jC-Vm; Sat, 31 Oct 2020 09:13:12 +0000 From: Christoph Hellwig To: Andrew Morton Cc: Kent Overstreet , Matthew Wilcox , linux-mm@kvack.org, linux-fsdevel@vger.kernel.org Subject: [PATCH 05/13] mm: simplify generic_file_buffered_read_no_cached_page Date: Sat, 31 Oct 2020 09:59:56 +0100 Message-Id: <20201031090004.452516-6-hch@lst.de> X-Mailer: git-send-email 2.28.0 In-Reply-To: <20201031090004.452516-1-hch@lst.de> References: <20201031090004.452516-1-hch@lst.de> MIME-Version: 1.0 X-SRS-Rewrite: SMTP reverse-path rewritten from by casper.infradead.org. See http://www.infradead.org/rpr.html 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: Return an errno and add a new by reference argument for the allocated page, which allows to cleanup the error unwindining in the function and the caller. Also rename the function to filemap_new_page which is both shorter and more descriptive. Signed-off-by: Christoph Hellwig --- mm/filemap.c | 53 ++++++++++++++++------------------------------------ 1 file changed, 16 insertions(+), 37 deletions(-) diff --git a/mm/filemap.c b/mm/filemap.c index 5cdf8090d4e12c..9e1cc18afe1134 100644 --- a/mm/filemap.c +++ b/mm/filemap.c @@ -2300,41 +2300,27 @@ static int filemap_make_page_uptodate(struct kiocb *iocb, struct iov_iter *iter, return error; } -static struct page * -generic_file_buffered_read_no_cached_page(struct kiocb *iocb, - struct iov_iter *iter) +static int filemap_new_page(struct kiocb *iocb, struct iov_iter *iter, + struct page **page) { - struct file *filp = iocb->ki_filp; - struct address_space *mapping = filp->f_mapping; + struct address_space *mapping = iocb->ki_filp->f_mapping; + gfp_t gfp = mapping_gfp_constraint(mapping, GFP_KERNEL); pgoff_t index = iocb->ki_pos >> PAGE_SHIFT; - struct page *page; int error; if (iocb->ki_flags & IOCB_NOIO) - return ERR_PTR(-EAGAIN); + return -EAGAIN; - /* - * Ok, it wasn't cached, so we need to create a new - * page.. - */ - page = page_cache_alloc(mapping); + *page = page_cache_alloc(mapping); if (!page) - return ERR_PTR(-ENOMEM); - - error = add_to_page_cache_lru(page, mapping, index, - mapping_gfp_constraint(mapping, GFP_KERNEL)); + return -ENOMEM; + error = add_to_page_cache_lru(*page, mapping, index, gfp); if (error) { - put_page(page); - return error != -EEXIST ? ERR_PTR(error) : NULL; + put_page(*page); + return error; } - error = filemap_readpage(iocb, page); - if (error) { - if (error == AOP_TRUNCATED_PAGE) - return NULL; - return ERR_PTR(error); - } - return page; + return filemap_readpage(iocb, *page); } static int generic_file_buffered_read_get_pages(struct kiocb *iocb, @@ -2366,18 +2352,14 @@ static int generic_file_buffered_read_get_pages(struct kiocb *iocb, nr_got = find_get_pages_contig(mapping, index, nr, pages); if (nr_got) goto got_pages; - - pages[0] = generic_file_buffered_read_no_cached_page(iocb, iter); - err = PTR_ERR_OR_ZERO(pages[0]); - if (!IS_ERR_OR_NULL(pages[0])) + err = filemap_new_page(iocb, iter, &pages[0]); + if (!err) nr_got = 1; got_pages: for (i = 0; i < nr_got; i++) { err = filemap_make_page_uptodate(iocb, iter, pages[i], index + i, i == 0); if (err) { - if (err == AOP_TRUNCATED_PAGE) - err = 0; for (j = i + 1; j < nr_got; j++) put_page(pages[j]); nr_got = i; @@ -2387,12 +2369,9 @@ static int generic_file_buffered_read_get_pages(struct kiocb *iocb, if (likely(nr_got)) return nr_got; - if (err) - return err; - /* - * No pages and no error means we raced and should retry: - */ - goto find_page; + if (err == -EEXIST || err == AOP_TRUNCATED_PAGE) + goto find_page; + return err; } /** From patchwork Sat Oct 31 08:59:57 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Christoph Hellwig X-Patchwork-Id: 11871231 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 7BFA1139F for ; Sat, 31 Oct 2020 09:15:28 +0000 (UTC) Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.kernel.org (Postfix) with ESMTP id 25EB3207DE for ; Sat, 31 Oct 2020 09:15:28 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (2048-bit key) header.d=infradead.org header.i=@infradead.org header.b="q/5iaxo7" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 25EB3207DE Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=lst.de Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=owner-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix) id 4085E6B0036; Sat, 31 Oct 2020 05:15:27 -0400 (EDT) Delivered-To: linux-mm-outgoing@kvack.org Received: by kanga.kvack.org (Postfix, from userid 40) id 392076B005C; Sat, 31 Oct 2020 05:15:27 -0400 (EDT) X-Original-To: int-list-linux-mm@kvack.org X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 25A846B006C; Sat, 31 Oct 2020 05:15:27 -0400 (EDT) X-Original-To: linux-mm@kvack.org X-Delivered-To: linux-mm@kvack.org Received: from forelay.hostedemail.com (smtprelay0158.hostedemail.com [216.40.44.158]) by kanga.kvack.org (Postfix) with ESMTP id EA01E6B0036 for ; Sat, 31 Oct 2020 05:15:26 -0400 (EDT) Received: from smtpin01.hostedemail.com (10.5.19.251.rfc1918.com [10.5.19.251]) by forelay02.hostedemail.com (Postfix) with ESMTP id 836AB3620 for ; Sat, 31 Oct 2020 09:15:26 +0000 (UTC) X-FDA: 77431662252.01.plate91_5a0d46b2729d Received: from filter.hostedemail.com (10.5.16.251.rfc1918.com [10.5.16.251]) by smtpin01.hostedemail.com (Postfix) with ESMTP id 66FDD1004CB20 for ; Sat, 31 Oct 2020 09:15:26 +0000 (UTC) X-Spam-Summary: 1,0,0,3d9b2d9d25981248,d41d8cd98f00b204,batv+e1c4655336593cdcfc57+6278+infradead.org+hch@casper.srs.infradead.org,,RULES_HIT:41:69:355:379:541:800:960:988:989:1260:1311:1314:1345:1359:1437:1515:1534:1542:1711:1730:1747:1777:1792:2194:2198:2199:2200:2393:2559:2562:3138:3139:3140:3141:3142:3354:3866:3867:5007:6261:6642:6653:7875:9036:9592:10004:11026:11658:11914:12043:12114:12160:12291:12296:12297:12438:12517:12519:12555:12683:12895:13894:14110:14181:14394:14721:21080:21324:21451:21627:21990:30054,0,RBL:90.155.50.34:@casper.srs.infradead.org:.lbl8.mailshell.net-64.201.201.201 62.8.15.100;04ygp1tfkefo5nbryfe1isgbzttf9ocdoia9qbjw3buid4iudp6fkyn31ni19t9.msmkyfs6ciyks8h751gfysitp3x1dzcex363oj577ywfujemknt98p3enop7gfx.4-lbl8.mailshell.net-223.238.255.100,CacheIP:none,Bayesian:0.5,0.5,0.5,Netcheck:none,DomainCache:0,MSF:not bulk,SPF:fn,MSBL:0,DNSBL:neutral,Custom_rules:0:0:0,LFtime:67,LUA_SUMMARY:none X-HE-Tag: plate91_5a0d46b2729d X-Filterd-Recvd-Size: 4383 Received: from casper.infradead.org (casper.infradead.org [90.155.50.34]) by imf12.hostedemail.com (Postfix) with ESMTP for ; Sat, 31 Oct 2020 09:15:25 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=casper.20170209; h=Content-Transfer-Encoding:MIME-Version: References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From:Sender:Reply-To: Content-Type:Content-ID:Content-Description; bh=w7pP6ZwoBFCgYWc3JUgMBAPIvDyVUgvDwMandxHayiQ=; b=q/5iaxo7WNboQxCOEfk/hZZKVn lsOCR6oywpH+8Q85yuTc4j6w6RUrKjDYY9Yp/oEVqqgDBB5UUrUKXvwLSMJuTUCgR5fvjvkmywmw0 LK8pbVDmYAWjwr4omJ4hPvYfzqE11pKgHLcMS/3XapoBYtpO7FZrLwoxn/vA/kEkG1y8SKUdT5koP wsLb0OmJ3lPbuEsRxW0GkOfXHLSAKEtgSYLtpjTFV3NNDsyW4rvrQX75CaAmhoynw8xD/JXfAQNEQ gju31KMDTItTMPfvJl99M9THTaSjHSEmTzhcKo9IWonpBr2KyjVAoEGR6vpkq05SnSIZRGue6jFO/ WNc3pkOA==; Received: from 089144193201.atnat0002.highway.a1.net ([89.144.193.201] helo=localhost) by casper.infradead.org with esmtpsa (Exim 4.92.3 #3 (Red Hat Linux)) id 1kYmyp-0007tB-0l; Sat, 31 Oct 2020 09:15:23 +0000 From: Christoph Hellwig To: Andrew Morton Cc: Kent Overstreet , Matthew Wilcox , linux-mm@kvack.org, linux-fsdevel@vger.kernel.org Subject: [PATCH 06/13] mm: factor out a filemap_find_get_pages helper Date: Sat, 31 Oct 2020 09:59:57 +0100 Message-Id: <20201031090004.452516-7-hch@lst.de> X-Mailer: git-send-email 2.28.0 In-Reply-To: <20201031090004.452516-1-hch@lst.de> References: <20201031090004.452516-1-hch@lst.de> MIME-Version: 1.0 X-SRS-Rewrite: SMTP reverse-path rewritten from by casper.infradead.org. See http://www.infradead.org/rpr.html 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: Factor out a helper to lookup a range of contiguous pages from generic_file_buffered_read_get_pages. Signed-off-by: Christoph Hellwig --- mm/filemap.c | 47 +++++++++++++++++++++++++++-------------------- 1 file changed, 27 insertions(+), 20 deletions(-) diff --git a/mm/filemap.c b/mm/filemap.c index 9e1cc18afe1134..0af7ddaa0fe7ba 100644 --- a/mm/filemap.c +++ b/mm/filemap.c @@ -2323,39 +2323,46 @@ static int filemap_new_page(struct kiocb *iocb, struct iov_iter *iter, return filemap_readpage(iocb, *page); } +static int filemap_find_get_pages(struct kiocb *iocb, struct iov_iter *iter, + struct page **pages, unsigned int nr) +{ + struct address_space *mapping = iocb->ki_filp->f_mapping; + pgoff_t index = iocb->ki_pos >> PAGE_SHIFT; + pgoff_t last_index = (iocb->ki_pos + iter->count + PAGE_SIZE - 1) >> + PAGE_SHIFT; + int nr_pages; + + nr = min_t(unsigned long, last_index - index, nr); + nr_pages = find_get_pages_contig(mapping, index, nr, pages); + if (nr_pages) + return nr_pages; + + if (iocb->ki_flags & IOCB_NOIO) + return -EAGAIN; + page_cache_sync_readahead(mapping, &iocb->ki_filp->f_ra, iocb->ki_filp, + index, last_index - index); + return find_get_pages_contig(mapping, index, nr, pages); +} + static int generic_file_buffered_read_get_pages(struct kiocb *iocb, struct iov_iter *iter, struct page **pages, unsigned int nr) { - struct file *filp = iocb->ki_filp; - struct address_space *mapping = filp->f_mapping; - struct file_ra_state *ra = &filp->f_ra; pgoff_t index = iocb->ki_pos >> PAGE_SHIFT; - pgoff_t last_index = (iocb->ki_pos + iter->count + PAGE_SIZE-1) >> PAGE_SHIFT; int i, j, nr_got, err = 0; - nr = min_t(unsigned long, last_index - index, nr); find_page: if (fatal_signal_pending(current)) return -EINTR; - nr_got = find_get_pages_contig(mapping, index, nr, pages); - if (nr_got) - goto got_pages; - - if (iocb->ki_flags & IOCB_NOIO) - return -EAGAIN; - - page_cache_sync_readahead(mapping, ra, filp, index, last_index - index); + nr_got = filemap_find_get_pages(iocb, iter, pages, nr); + if (!nr_got) { + err = filemap_new_page(iocb, iter, &pages[0]); + if (!err) + nr_got = 1; + } - nr_got = find_get_pages_contig(mapping, index, nr, pages); - if (nr_got) - goto got_pages; - err = filemap_new_page(iocb, iter, &pages[0]); - if (!err) - nr_got = 1; -got_pages: for (i = 0; i < nr_got; i++) { err = filemap_make_page_uptodate(iocb, iter, pages[i], index + i, i == 0); From patchwork Sat Oct 31 08:59:58 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Christoph Hellwig X-Patchwork-Id: 11871239 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id E2195139F for ; Sat, 31 Oct 2020 09:17:38 +0000 (UTC) Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.kernel.org (Postfix) with ESMTP id A3B7A20756 for ; Sat, 31 Oct 2020 09:17:38 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (2048-bit key) header.d=infradead.org header.i=@infradead.org header.b="IncK17xm" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org A3B7A20756 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=lst.de Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=owner-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix) id D53826B0036; Sat, 31 Oct 2020 05:17:37 -0400 (EDT) Delivered-To: linux-mm-outgoing@kvack.org Received: by kanga.kvack.org (Postfix, from userid 40) id D29C86B005C; Sat, 31 Oct 2020 05:17:37 -0400 (EDT) X-Original-To: int-list-linux-mm@kvack.org X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id C172C6B0062; Sat, 31 Oct 2020 05:17:37 -0400 (EDT) X-Original-To: linux-mm@kvack.org X-Delivered-To: linux-mm@kvack.org Received: from forelay.hostedemail.com (smtprelay0070.hostedemail.com [216.40.44.70]) by kanga.kvack.org (Postfix) with ESMTP id 93C786B0036 for ; Sat, 31 Oct 2020 05:17:37 -0400 (EDT) Received: from smtpin13.hostedemail.com (10.5.19.251.rfc1918.com [10.5.19.251]) by forelay03.hostedemail.com (Postfix) with ESMTP id 370818249980 for ; Sat, 31 Oct 2020 09:17:37 +0000 (UTC) X-FDA: 77431667754.13.rose93_44032d12729d Received: from filter.hostedemail.com (10.5.16.251.rfc1918.com [10.5.16.251]) by smtpin13.hostedemail.com (Postfix) with ESMTP id 0DFEE18140B67 for ; Sat, 31 Oct 2020 09:17:37 +0000 (UTC) X-Spam-Summary: 1,0,0,02f5600be470b16e,d41d8cd98f00b204,batv+e1c4655336593cdcfc57+6278+infradead.org+hch@casper.srs.infradead.org,,RULES_HIT:41:69:355:379:541:800:960:988:989:1260:1311:1314:1345:1359:1437:1515:1534:1542:1711:1730:1747:1777:1792:2194:2199:2393:2559:2562:3138:3139:3140:3141:3142:3353:3865:3867:3868:3872:4321:5007:6261:6653:7903:7904:8660:9036:9592:10004:11026:11473:11658:11914:12043:12114:12160:12291:12296:12297:12438:12517:12519:12555:12683:12895:12986:13148:13230:13894:14110:14181:14394:14721:21080:21324:21451:21627:21939:21990:30054,0,RBL:90.155.50.34:@casper.srs.infradead.org:.lbl8.mailshell.net-64.201.201.201 62.8.15.100;04yfc7r17or8gut8ew8rhzipzyemwypfc7pfjypi4f8kp9dte849834rmzi6krj.uz78rmpdzb71nhjnscrwzucyq5ekzra9phadq7j9z34x9f358jpaxphyzg7no7c.r-lbl8.mailshell.net-223.238.255.100,CacheIP:none,Bayesian:0.5,0.5,0.5,Netcheck:none,DomainCache:0,MSF:not bulk,SPF:fn,MSBL:0,DNSBL:neutral,Custom_rules:0:0:0,LFtime:68,LUA_SUMMARY:none X-HE-Tag: rose93_44032d12729d X-Filterd-Recvd-Size: 4780 Received: from casper.infradead.org (casper.infradead.org [90.155.50.34]) by imf20.hostedemail.com (Postfix) with ESMTP for ; Sat, 31 Oct 2020 09:17:36 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=casper.20170209; h=Content-Transfer-Encoding:MIME-Version: References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From:Sender:Reply-To: Content-Type:Content-ID:Content-Description; bh=72kioQRjY98RpgK4QuUxSFT7vMo0vy/MqExRyumL2cA=; b=IncK17xmxYWZTcEyKXs6pri5QI Hj2ny0QoZ3iMGxMJGY0G6WifM0RBa2cfeKrYwppWi3h7m6HfSHfO6UMcIyflRBrO3e0av7Kx1GSWM zqnaA0q6MbmSxRTxCJf57uQYIkyyT1wOHGR5VACwSf0EjW6llaMsmdedtfhTnOHPMHiaH4E42uuz7 +7rWxsdTlexlqd6xHlAhn23+H9kbb23KD3Du/9ufsKGavE9uhmxGMp6OmEHMpSSQy7BwUhJV74nMN L7layDB311k3/G0q7BiIhdG06ocXtmsjEyGn/3BYAr5gMkdpsDq8Lcd8UJuVlCkqbtSjqoA5fEl2j orwpbZuQ==; Received: from 089144193201.atnat0002.highway.a1.net ([89.144.193.201] helo=localhost) by casper.infradead.org with esmtpsa (Exim 4.92.3 #3 (Red Hat Linux)) id 1kYn0w-0007zY-3a; Sat, 31 Oct 2020 09:17:34 +0000 From: Christoph Hellwig To: Andrew Morton Cc: Kent Overstreet , Matthew Wilcox , linux-mm@kvack.org, linux-fsdevel@vger.kernel.org Subject: [PATCH 07/13] mm: refactor generic_file_buffered_read_get_pages Date: Sat, 31 Oct 2020 09:59:58 +0100 Message-Id: <20201031090004.452516-8-hch@lst.de> X-Mailer: git-send-email 2.28.0 In-Reply-To: <20201031090004.452516-1-hch@lst.de> References: <20201031090004.452516-1-hch@lst.de> MIME-Version: 1.0 X-SRS-Rewrite: SMTP reverse-path rewritten from by casper.infradead.org. See http://www.infradead.org/rpr.html 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: Move the call to filemap_make_page_uptodate for a newly allocated page into filemap_new_page, which turns the new vs lookup decision into a plain if / else statement, rename two identifier to be more obvious and the function itself to filemap_read_pages which describes it a little better while being much shorter. Signed-off-by: Christoph Hellwig --- mm/filemap.c | 52 ++++++++++++++++++++++++++-------------------------- 1 file changed, 26 insertions(+), 26 deletions(-) diff --git a/mm/filemap.c b/mm/filemap.c index 0af7ddaa0fe7ba..96855299247c56 100644 --- a/mm/filemap.c +++ b/mm/filemap.c @@ -2320,7 +2320,10 @@ static int filemap_new_page(struct kiocb *iocb, struct iov_iter *iter, return error; } - return filemap_readpage(iocb, *page); + error = filemap_readpage(iocb, *page); + if (error) + return error; + return filemap_make_page_uptodate(iocb, iter, *page, index, true); } static int filemap_find_get_pages(struct kiocb *iocb, struct iov_iter *iter, @@ -2344,40 +2347,38 @@ static int filemap_find_get_pages(struct kiocb *iocb, struct iov_iter *iter, return find_get_pages_contig(mapping, index, nr, pages); } -static int generic_file_buffered_read_get_pages(struct kiocb *iocb, - struct iov_iter *iter, - struct page **pages, - unsigned int nr) +static int filemap_read_pages(struct kiocb *iocb, struct iov_iter *iter, + struct page **pages, unsigned int nr) { pgoff_t index = iocb->ki_pos >> PAGE_SHIFT; - int i, j, nr_got, err = 0; + int nr_pages, err = 0, i, j; -find_page: +retry: if (fatal_signal_pending(current)) return -EINTR; - nr_got = filemap_find_get_pages(iocb, iter, pages, nr); - if (!nr_got) { + nr_pages = filemap_find_get_pages(iocb, iter, pages, nr); + if (nr_pages) { + for (i = 0; i < nr_pages; i++) { + err = filemap_make_page_uptodate(iocb, iter, pages[i], + index + i, i == 0); + if (err) { + for (j = i + 1; j < nr_pages; j++) + put_page(pages[j]); + nr_pages = i; + break; + } + } + } else { err = filemap_new_page(iocb, iter, &pages[0]); if (!err) - nr_got = 1; + nr_pages = 1; } - for (i = 0; i < nr_got; i++) { - err = filemap_make_page_uptodate(iocb, iter, pages[i], - index + i, i == 0); - if (err) { - for (j = i + 1; j < nr_got; j++) - put_page(pages[j]); - nr_got = i; - break; - } - } - - if (likely(nr_got)) - return nr_got; + if (likely(nr_pages)) + return nr_pages; if (err == -EEXIST || err == AOP_TRUNCATED_PAGE) - goto find_page; + goto retry; return err; } @@ -2436,8 +2437,7 @@ ssize_t generic_file_buffered_read(struct kiocb *iocb, iocb->ki_flags |= IOCB_NOWAIT; i = 0; - pg_nr = generic_file_buffered_read_get_pages(iocb, iter, - pages, nr_pages); + pg_nr = filemap_read_pages(iocb, iter, pages, nr_pages); if (pg_nr < 0) { error = pg_nr; break; From patchwork Sat Oct 31 08:59:59 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Christoph Hellwig X-Patchwork-Id: 11871247 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id BC56D697 for ; Sat, 31 Oct 2020 09:19:51 +0000 (UTC) Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.kernel.org (Postfix) with ESMTP id 78D4F2076E for ; Sat, 31 Oct 2020 09:19:51 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (2048-bit key) header.d=infradead.org header.i=@infradead.org header.b="qcZqxVQC" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 78D4F2076E Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=lst.de Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=owner-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix) id B02246B0062; Sat, 31 Oct 2020 05:19:50 -0400 (EDT) Delivered-To: linux-mm-outgoing@kvack.org Received: by kanga.kvack.org (Postfix, from userid 40) id AB1EE6B006E; Sat, 31 Oct 2020 05:19:50 -0400 (EDT) X-Original-To: int-list-linux-mm@kvack.org X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 9A10E6B0070; Sat, 31 Oct 2020 05:19:50 -0400 (EDT) X-Original-To: linux-mm@kvack.org X-Delivered-To: linux-mm@kvack.org Received: from forelay.hostedemail.com (smtprelay0196.hostedemail.com [216.40.44.196]) by kanga.kvack.org (Postfix) with ESMTP id 6D2BC6B0062 for ; Sat, 31 Oct 2020 05:19:50 -0400 (EDT) Received: from smtpin10.hostedemail.com (10.5.19.251.rfc1918.com [10.5.19.251]) by forelay05.hostedemail.com (Postfix) with ESMTP id F213C181AEF15 for ; Sat, 31 Oct 2020 09:19:49 +0000 (UTC) X-FDA: 77431673298.10.frame67_5f0f0822729d Received: from filter.hostedemail.com (10.5.16.251.rfc1918.com [10.5.16.251]) by smtpin10.hostedemail.com (Postfix) with ESMTP id C9F7616A07E for ; Sat, 31 Oct 2020 09:19:49 +0000 (UTC) X-Spam-Summary: 1,0,0,938680a5a812a5ed,d41d8cd98f00b204,batv+e1c4655336593cdcfc57+6278+infradead.org+hch@casper.srs.infradead.org,,RULES_HIT:41:69:355:379:541:800:960:988:989:1260:1311:1314:1345:1359:1437:1515:1534:1542:1711:1730:1747:1777:1792:2393:2559:2562:2693:3138:3139:3140:3141:3142:3354:3865:3872:4321:5007:6261:6653:8957:9592:10004:11026:11473:11658:11914:12043:12160:12296:12297:12438:12517:12519:12555:12683:12895:12986:13894:14096:14110:14181:14394:14721:21080:21451:21627:21990:30054:30070,0,RBL:90.155.50.34:@casper.srs.infradead.org:.lbl8.mailshell.net-64.201.201.201 62.8.15.100;04ygmmdmipxbhggeq89cijg9qg65noczwi9o4uy3junmqbyt5beyk6gi83kkakg.hn1hqewsnhr7ec1qinjnfw1mtcz513uoo9ztzjekhtowpbgr971furu7yngdtw5.h-lbl8.mailshell.net-223.238.255.100,CacheIP:none,Bayesian:0.5,0.5,0.5,Netcheck:none,DomainCache:0,MSF:not bulk,SPF:fn,MSBL:0,DNSBL:neutral,Custom_rules:0:0:0,LFtime:67,LUA_SUMMARY:none X-HE-Tag: frame67_5f0f0822729d X-Filterd-Recvd-Size: 4589 Received: from casper.infradead.org (casper.infradead.org [90.155.50.34]) by imf49.hostedemail.com (Postfix) with ESMTP for ; Sat, 31 Oct 2020 09:19:49 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=casper.20170209; h=Content-Transfer-Encoding:MIME-Version: References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From:Sender:Reply-To: Content-Type:Content-ID:Content-Description; bh=rACcJrs34gaXXkKYt1uTpo4yAED7NWPkcMr50Jhtq5o=; b=qcZqxVQCmDjR2LuBgBCPF3Axfb 5tHG4/g/tJd5jsQSUq6+Wx5UVge9UzCuC5bExxEsu7CDV4ylV+s9GBDOSrdKakIyr9hZIXWoJdSFd ZYEtDhWtapmWbt8/etCpmxDjStlJJnFMg4wyKk6g3KBQCMU7NxyQIjxfCbbjSrmUFyR6yVQlpUDmu rbxwJhGUO8wLvBo3ql/9evqeqwOS8VKkiymWEMXW32dZW4HIjENi9uhdfrKPzQCqs22HUQfyWHDXg RBow75EKZhCvw7lv+1vl8a1kpI4fLD8/9HkgADy1S878n/SjhR3YtY8XuWvBCSXuiDKjElvFIp74R j1eLwlpQ==; Received: from 089144193201.atnat0002.highway.a1.net ([89.144.193.201] helo=localhost) by casper.infradead.org with esmtpsa (Exim 4.92.3 #3 (Red Hat Linux)) id 1kYn33-00086W-6x; Sat, 31 Oct 2020 09:19:45 +0000 From: Christoph Hellwig To: Andrew Morton Cc: Kent Overstreet , Matthew Wilcox , linux-mm@kvack.org, linux-fsdevel@vger.kernel.org Subject: [PATCH 08/13] mm: move putting the page on error out of filemap_readpage Date: Sat, 31 Oct 2020 09:59:59 +0100 Message-Id: <20201031090004.452516-9-hch@lst.de> X-Mailer: git-send-email 2.28.0 In-Reply-To: <20201031090004.452516-1-hch@lst.de> References: <20201031090004.452516-1-hch@lst.de> MIME-Version: 1.0 X-SRS-Rewrite: SMTP reverse-path rewritten from by casper.infradead.org. See http://www.infradead.org/rpr.html 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: Move the put_page on error from filemap_readpage into the callers. Signed-off-by: Christoph Hellwig --- mm/filemap.c | 35 ++++++++++++++++------------------- 1 file changed, 16 insertions(+), 19 deletions(-) diff --git a/mm/filemap.c b/mm/filemap.c index 96855299247c56..6089f1d9dd429f 100644 --- a/mm/filemap.c +++ b/mm/filemap.c @@ -2171,11 +2171,11 @@ static int lock_page_for_iocb(struct kiocb *iocb, struct page *page) static int filemap_readpage(struct kiocb *iocb, struct page *page) { struct file *file = iocb->ki_filp; - int error = -EAGAIN; + int error; if (iocb->ki_flags & (IOCB_NOIO | IOCB_NOWAIT)) { unlock_page(page); - goto out_put_page; + return -EAGAIN; } /* @@ -2186,12 +2186,12 @@ static int filemap_readpage(struct kiocb *iocb, struct page *page) /* Start the actual read. The read will unlock the page. */ error = file->f_mapping->a_ops->readpage(file, page); if (unlikely(error)) - goto out_put_page; + return error; if (!PageUptodate(page)) { error = lock_page_for_iocb(iocb, page); if (unlikely(error)) - goto out_put_page; + return error; if (!PageUptodate(page)) { if (page->mapping == NULL) { @@ -2199,22 +2199,16 @@ static int filemap_readpage(struct kiocb *iocb, struct page *page) * invalidate_mapping_pages got it */ unlock_page(page); - error = AOP_TRUNCATED_PAGE; - goto out_put_page; + return AOP_TRUNCATED_PAGE; } unlock_page(page); shrink_readahead_size_eio(&file->f_ra); - error = -EIO; - goto out_put_page; + return -EIO; } unlock_page(page); } return 0; - -out_put_page: - put_page(page); - return error; } static int filemap_make_page_uptodate(struct kiocb *iocb, struct iov_iter *iter, @@ -2293,7 +2287,10 @@ static int filemap_make_page_uptodate(struct kiocb *iocb, struct iov_iter *iter, /* Did somebody else fill it already? */ if (PageUptodate(page)) goto unlock_page; - return filemap_readpage(iocb, page); + error = filemap_readpage(iocb, page); + if (error) + goto put_page; + return 0; put_page: put_page(page); @@ -2315,15 +2312,15 @@ static int filemap_new_page(struct kiocb *iocb, struct iov_iter *iter, if (!page) return -ENOMEM; error = add_to_page_cache_lru(*page, mapping, index, gfp); - if (error) { - put_page(*page); - return error; - } - + if (error) + goto put_page; error = filemap_readpage(iocb, *page); if (error) - return error; + goto put_page; return filemap_make_page_uptodate(iocb, iter, *page, index, true); +put_page: + put_page(*page); + return error; } static int filemap_find_get_pages(struct kiocb *iocb, struct iov_iter *iter, From patchwork Sat Oct 31 09:00:00 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Christoph Hellwig X-Patchwork-Id: 11871255 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id A3E86697 for ; Sat, 31 Oct 2020 09:22:02 +0000 (UTC) Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.kernel.org (Postfix) with ESMTP id 39D8C2076D for ; Sat, 31 Oct 2020 09:22:02 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (2048-bit key) header.d=infradead.org header.i=@infradead.org header.b="urH8C7G7" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 39D8C2076D Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=lst.de Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=owner-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix) id 640976B0070; Sat, 31 Oct 2020 05:22:01 -0400 (EDT) Delivered-To: linux-mm-outgoing@kvack.org Received: by kanga.kvack.org (Postfix, from userid 40) id 5CA9C6B0071; Sat, 31 Oct 2020 05:22:01 -0400 (EDT) X-Original-To: int-list-linux-mm@kvack.org X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 4913B6B0073; Sat, 31 Oct 2020 05:22:01 -0400 (EDT) X-Original-To: linux-mm@kvack.org X-Delivered-To: linux-mm@kvack.org Received: from forelay.hostedemail.com (smtprelay0115.hostedemail.com [216.40.44.115]) by kanga.kvack.org (Postfix) with ESMTP id 19C856B0070 for ; Sat, 31 Oct 2020 05:22:01 -0400 (EDT) Received: from smtpin09.hostedemail.com (10.5.19.251.rfc1918.com [10.5.19.251]) by forelay04.hostedemail.com (Postfix) with ESMTP id B7AFE1EF3 for ; Sat, 31 Oct 2020 09:22:00 +0000 (UTC) X-FDA: 77431678800.09.coal88_120c4382729d Received: from filter.hostedemail.com (10.5.16.251.rfc1918.com [10.5.16.251]) by smtpin09.hostedemail.com (Postfix) with ESMTP id 9C6CB180AD806 for ; Sat, 31 Oct 2020 09:22:00 +0000 (UTC) X-Spam-Summary: 1,0,0,d11aed0f89eb4102,d41d8cd98f00b204,batv+e1c4655336593cdcfc57+6278+infradead.org+hch@casper.srs.infradead.org,,RULES_HIT:41:69:355:379:541:800:960:973:988:989:1260:1311:1314:1345:1359:1437:1515:1535:1543:1711:1730:1747:1777:1792:2198:2199:2393:2559:2562:2901:3138:3139:3140:3141:3142:3354:3865:3867:3870:3871:3872:4321:5007:6119:6261:6653:7903:7904:8957:9036:9592:10004:11026:11473:11658:11914:12043:12114:12160:12296:12297:12438:12517:12519:12555:12683:12895:12986:13255:13894:14110:14181:14394:14721:21080:21324:21451:21627:21990:30054,0,RBL:90.155.50.34:@casper.srs.infradead.org:.lbl8.mailshell.net-64.201.201.201 62.8.15.100;04y86kh4zwxigik6ag7jsqdgejqibopayi6n3ns4psm3ihcaaptjizduw91nzt9.oeerk6no9a9cz4udkgxyb1wwrwzmq5um946ojkpmpj346hs3x3pyazw4c1rfawx.1-lbl8.mailshell.net-223.238.255.100,CacheIP:none,Bayesian:0.5,0.5,0.5,Netcheck:none,DomainCache:0,MSF:not bulk,SPF:fn,MSBL:0,DNSBL:neutral,Custom_rules:0:0:0,LFtime:67,LUA_SUMMARY:none X-HE-Tag: coal88_120c4382729d X-Filterd-Recvd-Size: 5038 Received: from casper.infradead.org (casper.infradead.org [90.155.50.34]) by imf37.hostedemail.com (Postfix) with ESMTP for ; Sat, 31 Oct 2020 09:22:00 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=casper.20170209; h=Content-Transfer-Encoding:MIME-Version: References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From:Sender:Reply-To: Content-Type:Content-ID:Content-Description; bh=T10jy9Iz/yAzA3CgaR9hbSlNI52YVZfcPdeiTlF9iYY=; b=urH8C7G77+4KOkC9lTS5xhK1AT SlVWumQJnWJrIL9gOf6g+k+g3x/YxmWrLZFO78F/ebRUEmrdBDMYlVaJVR+GhCekg5C0zMwvIz8gu 2VPMTy1GH4lb8bbupsPqSD6eEbt+fx/zHgX7EXf7pQcodhKqW6GllCgOJncAzhacLOWnk1gvbn/DK ia+RONyx2XRZTS8fdiPJd2TNqcBeqvErJcSmm/r2UBBTrCfD4iVnhGc+7tMlrMJqUD0Vx1cdoqCWS lavi5phru2MkhHEZS2FC1+Ccvp6B04D1G5PA65ivGjeYCt2Rc0HRjEteXtMceH0urAUyJadoFtLGG BJrvsWcA==; Received: from 089144193201.atnat0002.highway.a1.net ([89.144.193.201] helo=localhost) by casper.infradead.org with esmtpsa (Exim 4.92.3 #3 (Red Hat Linux)) id 1kYn5A-0008HB-DU; Sat, 31 Oct 2020 09:21:56 +0000 From: Christoph Hellwig To: Andrew Morton Cc: Kent Overstreet , Matthew Wilcox , linux-mm@kvack.org, linux-fsdevel@vger.kernel.org Subject: [PATCH 09/13] mm: move putting the page on error out of filemap_make_page_uptodate Date: Sat, 31 Oct 2020 10:00:00 +0100 Message-Id: <20201031090004.452516-10-hch@lst.de> X-Mailer: git-send-email 2.28.0 In-Reply-To: <20201031090004.452516-1-hch@lst.de> References: <20201031090004.452516-1-hch@lst.de> MIME-Version: 1.0 X-SRS-Rewrite: SMTP reverse-path rewritten from by casper.infradead.org. See http://www.infradead.org/rpr.html 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: Move the put_page on error from filemap_make_page_uptodate into the callers. Signed-off-by: Christoph Hellwig --- mm/filemap.c | 31 +++++++++++++------------------ 1 file changed, 13 insertions(+), 18 deletions(-) diff --git a/mm/filemap.c b/mm/filemap.c index 6089f1d9dd429f..5f4937715689e7 100644 --- a/mm/filemap.c +++ b/mm/filemap.c @@ -2219,11 +2219,11 @@ static int filemap_make_page_uptodate(struct kiocb *iocb, struct iov_iter *iter, loff_t last = iocb->ki_pos + iter->count; pgoff_t last_index = (last + PAGE_SIZE - 1) >> PAGE_SHIFT; loff_t pos = max(iocb->ki_pos, (loff_t)pg_index << PAGE_SHIFT); - int error = -EAGAIN; + int error; if (PageReadahead(page)) { if (iocb->ki_flags & IOCB_NOIO) - goto put_page; + return -EAGAIN; page_cache_async_readahead(mapping, &file->f_ra, file, page, pg_index, last_index - pg_index); } @@ -2232,7 +2232,7 @@ static int filemap_make_page_uptodate(struct kiocb *iocb, struct iov_iter *iter, return 0; if (iocb->ki_flags & IOCB_NOWAIT) - goto put_page; + return -EAGAIN; /* * See comment in do_read_cache_page on why wait_on_page_locked is used @@ -2240,13 +2240,13 @@ static int filemap_make_page_uptodate(struct kiocb *iocb, struct iov_iter *iter, */ if (iocb->ki_flags & IOCB_WAITQ) { if (!first) - goto put_page; + return -EAGAIN; error = wait_on_page_locked_async(page, iocb->ki_waitq); } else { error = wait_on_page_locked_killable(page); } if (unlikely(error)) - goto put_page; + return error; if (PageUptodate(page)) return 0; @@ -2274,27 +2274,19 @@ static int filemap_make_page_uptodate(struct kiocb *iocb, struct iov_iter *iter, /* Get exclusive access to the page ... */ error = lock_page_for_iocb(iocb, page); if (unlikely(error)) - goto put_page; + return error; page_not_up_to_date_locked: /* Did it get truncated before we got the lock? */ if (!page->mapping) { unlock_page(page); - error = AOP_TRUNCATED_PAGE; - goto put_page; + return AOP_TRUNCATED_PAGE; } /* Did somebody else fill it already? */ if (PageUptodate(page)) goto unlock_page; - error = filemap_readpage(iocb, page); - if (error) - goto put_page; - return 0; - -put_page: - put_page(page); - return error; + return filemap_readpage(iocb, page); } static int filemap_new_page(struct kiocb *iocb, struct iov_iter *iter, @@ -2317,7 +2309,10 @@ static int filemap_new_page(struct kiocb *iocb, struct iov_iter *iter, error = filemap_readpage(iocb, *page); if (error) goto put_page; - return filemap_make_page_uptodate(iocb, iter, *page, index, true); + error = filemap_make_page_uptodate(iocb, iter, *page, index, true); + if (error) + goto put_page; + return 0; put_page: put_page(*page); return error; @@ -2360,7 +2355,7 @@ static int filemap_read_pages(struct kiocb *iocb, struct iov_iter *iter, err = filemap_make_page_uptodate(iocb, iter, pages[i], index + i, i == 0); if (err) { - for (j = i + 1; j < nr_pages; j++) + for (j = i; j < nr_pages; j++) put_page(pages[j]); nr_pages = i; break; From patchwork Sat Oct 31 09:00:01 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Christoph Hellwig X-Patchwork-Id: 11871263 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id BE272697 for ; Sat, 31 Oct 2020 09:24:12 +0000 (UTC) Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.kernel.org (Postfix) with ESMTP id 6CF87207DE for ; Sat, 31 Oct 2020 09:24:12 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (2048-bit key) header.d=infradead.org header.i=@infradead.org header.b="pNCl8HMF" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 6CF87207DE Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=lst.de Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=owner-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix) id 8110D6B005C; Sat, 31 Oct 2020 05:24:11 -0400 (EDT) Delivered-To: linux-mm-outgoing@kvack.org Received: by kanga.kvack.org (Postfix, from userid 40) id 7C0126B0070; Sat, 31 Oct 2020 05:24:11 -0400 (EDT) X-Original-To: int-list-linux-mm@kvack.org X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 6AF9D6B0071; Sat, 31 Oct 2020 05:24:11 -0400 (EDT) X-Original-To: linux-mm@kvack.org X-Delivered-To: linux-mm@kvack.org Received: from forelay.hostedemail.com (smtprelay0120.hostedemail.com [216.40.44.120]) by kanga.kvack.org (Postfix) with ESMTP id 3E0406B005C for ; Sat, 31 Oct 2020 05:24:11 -0400 (EDT) Received: from smtpin29.hostedemail.com (10.5.19.251.rfc1918.com [10.5.19.251]) by forelay05.hostedemail.com (Postfix) with ESMTP id DAC48181AEF15 for ; Sat, 31 Oct 2020 09:24:10 +0000 (UTC) X-FDA: 77431684260.29.class49_2a130422729d Received: from filter.hostedemail.com (10.5.16.251.rfc1918.com [10.5.16.251]) by smtpin29.hostedemail.com (Postfix) with ESMTP id BCAED1808659F for ; Sat, 31 Oct 2020 09:24:10 +0000 (UTC) X-Spam-Summary: 1,0,0,762ebfbae0af1d3d,d41d8cd98f00b204,batv+e1c4655336593cdcfc57+6278+infradead.org+hch@casper.srs.infradead.org,,RULES_HIT:41:355:379:541:800:960:988:989:1260:1311:1314:1345:1359:1437:1515:1534:1541:1711:1730:1747:1777:1792:2393:2559:2562:3138:3139:3140:3141:3142:3352:3865:3866:3867:3868:3870:3871:3874:4321:5007:6261:6653:8660:8957:9036:10004:11026:11658:11914:12043:12160:12296:12297:12438:12517:12519:12555:12895:12986:13069:13148:13184:13229:13230:13311:13357:13894:14096:14181:14384:14394:14721:21080:21451:21627:21939:21990:30012:30054,0,RBL:90.155.50.34:@casper.srs.infradead.org:.lbl8.mailshell.net-62.8.15.100 64.201.201.201;04yrk6gxrgnhk6d3sgbxj96zj4kr5opk5xun1yzeha6uwy1eab6s7dcxzds9nw6.w7bdngt3fghho6iuyn6mk8k19zf1dsao5im4fyp7ueftgwx5w5hw7pr549uc64y.a-lbl8.mailshell.net-223.238.255.100,CacheIP:none,Bayesian:0.5,0.5,0.5,Netcheck:none,DomainCache:0,MSF:not bulk,SPF:fn,MSBL:0,DNSBL:neutral,Custom_rules:0:0:0,LFtime:68,LUA_SUMMARY:none X-HE-Tag: class49_2a130422729d X-Filterd-Recvd-Size: 2989 Received: from casper.infradead.org (casper.infradead.org [90.155.50.34]) by imf09.hostedemail.com (Postfix) with ESMTP for ; Sat, 31 Oct 2020 09:24:10 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=casper.20170209; h=Content-Transfer-Encoding:MIME-Version: References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From:Sender:Reply-To: Content-Type:Content-ID:Content-Description; bh=yKVVOMTwCnImkW5ZZzkJxy/4XZLiDS6CW2ha1meBT74=; b=pNCl8HMFl/ZfMB7x4SkgTn9wPM b/1K3v6VX0FxvwftNVE/87c5gYnkPUpHOhpFncnPfNTIfv9eU41QpNupj0BDEzVCiCGDOBo0j8NkK znV3xIYAkyPJu/yhML7/MvCYSdXeAkKufL2jD9QtsH07PI65W9g/ms9FfAs+7oej8hKgoH/cyZ4qc HtzB4XMge9GoGhuq88m3xe6WW/t407qJiNkVIZG1VrBrPOa1DY3026JVeUJX1kNYnuyzy2PF4a+Hr HHP9sANIklu0jN4aG8cCk8Xnub9wXI7qxvI2a5/4FLV+prll2MyzGabQKOnMO6GVPidE77Al2gLLB BSEFTyvg==; Received: from 089144193201.atnat0002.highway.a1.net ([89.144.193.201] helo=localhost) by casper.infradead.org with esmtpsa (Exim 4.92.3 #3 (Red Hat Linux)) id 1kYn7H-0008Ma-Fx; Sat, 31 Oct 2020 09:24:08 +0000 From: Christoph Hellwig To: Andrew Morton Cc: Kent Overstreet , Matthew Wilcox , linux-mm@kvack.org, linux-fsdevel@vger.kernel.org Subject: [PATCH 10/13] mm: open code readahead in filemap_new_page Date: Sat, 31 Oct 2020 10:00:01 +0100 Message-Id: <20201031090004.452516-11-hch@lst.de> X-Mailer: git-send-email 2.28.0 In-Reply-To: <20201031090004.452516-1-hch@lst.de> References: <20201031090004.452516-1-hch@lst.de> MIME-Version: 1.0 X-SRS-Rewrite: SMTP reverse-path rewritten from by casper.infradead.org. See http://www.infradead.org/rpr.html 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: Calling filemap_make_page_uptodate right after filemap_readpage in filemap_new_page is rather counterintuitive. The call is in fact only needed to issue async readahead, and is guaranteed to return just after that because the page is uptodate. Just open code the readahead related parts of filemap_make_page_uptodate instead. Signed-off-by: Christoph Hellwig --- mm/filemap.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/mm/filemap.c b/mm/filemap.c index 5f4937715689e7..000f75cd359d1c 100644 --- a/mm/filemap.c +++ b/mm/filemap.c @@ -2309,9 +2309,14 @@ static int filemap_new_page(struct kiocb *iocb, struct iov_iter *iter, error = filemap_readpage(iocb, *page); if (error) goto put_page; - error = filemap_make_page_uptodate(iocb, iter, *page, index, true); - if (error) - goto put_page; + if (PageReadahead(*page)) { + error = -EAGAIN; + if (iocb->ki_flags & IOCB_NOIO) + goto put_page; + page_cache_async_readahead(mapping, &iocb->ki_filp->f_ra, + iocb->ki_filp, *page, index, + (iter->count + PAGE_SIZE - 1) >> PAGE_SHIFT); + } return 0; put_page: put_page(*page); From patchwork Sat Oct 31 09:00:02 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Christoph Hellwig X-Patchwork-Id: 11871271 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 6A4E9697 for ; Sat, 31 Oct 2020 09:26:24 +0000 (UTC) Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.kernel.org (Postfix) with ESMTP id 026072076E for ; Sat, 31 Oct 2020 09:26:23 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (2048-bit key) header.d=infradead.org header.i=@infradead.org header.b="qE5NYOKM" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 026072076E Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=lst.de Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=owner-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix) id 32A3E6B005C; Sat, 31 Oct 2020 05:26:23 -0400 (EDT) Delivered-To: linux-mm-outgoing@kvack.org Received: by kanga.kvack.org (Postfix, from userid 40) id 3006B6B006E; Sat, 31 Oct 2020 05:26:23 -0400 (EDT) X-Original-To: int-list-linux-mm@kvack.org X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 23CF06B0070; Sat, 31 Oct 2020 05:26:23 -0400 (EDT) X-Original-To: linux-mm@kvack.org X-Delivered-To: linux-mm@kvack.org Received: from forelay.hostedemail.com (smtprelay0012.hostedemail.com [216.40.44.12]) by kanga.kvack.org (Postfix) with ESMTP id EBA3B6B005C for ; Sat, 31 Oct 2020 05:26:22 -0400 (EDT) Received: from smtpin16.hostedemail.com (10.5.19.251.rfc1918.com [10.5.19.251]) by forelay02.hostedemail.com (Postfix) with ESMTP id 919F03623 for ; Sat, 31 Oct 2020 09:26:22 +0000 (UTC) X-FDA: 77431689804.16.net03_360af512729d Received: from filter.hostedemail.com (10.5.16.251.rfc1918.com [10.5.16.251]) by smtpin16.hostedemail.com (Postfix) with ESMTP id 6E5AD100E690B for ; Sat, 31 Oct 2020 09:26:22 +0000 (UTC) X-Spam-Summary: 1,0,0,37b0ca0393b8fc2e,d41d8cd98f00b204,batv+e1c4655336593cdcfc57+6278+infradead.org+hch@casper.srs.infradead.org,,RULES_HIT:41:69:355:379:541:800:960:988:989:1260:1311:1314:1345:1359:1437:1515:1534:1542:1711:1730:1747:1777:1792:2198:2199:2393:2559:2562:2901:3138:3139:3140:3141:3142:3353:3865:3867:3872:4321:5007:6261:6653:8957:9036:9592:10004:11026:11658:11914:12043:12114:12160:12296:12297:12438:12517:12519:12555:12683:12895:12986:13255:13894:14110:14181:14394:14721:21080:21451:21627:21990:30054,0,RBL:90.155.50.34:@casper.srs.infradead.org:.lbl8.mailshell.net-64.201.201.201 62.8.15.100;04yrcb7hu4ewfdy75y4psdbsgqbe9ycpjsnrmub8w3gteuktfp5qjmeizhad8nn.exahg1kg88r88jep5p4fk6ejzcims8gnukhu5u3ouknkff7oogg3jobcgkeq4t4.1-lbl8.mailshell.net-223.238.255.100,CacheIP:none,Bayesian:0.5,0.5,0.5,Netcheck:none,DomainCache:0,MSF:not bulk,SPF:fn,MSBL:0,DNSBL:neutral,Custom_rules:0:0:0,LFtime:67,LUA_SUMMARY:none X-HE-Tag: net03_360af512729d X-Filterd-Recvd-Size: 4380 Received: from casper.infradead.org (casper.infradead.org [90.155.50.34]) by imf45.hostedemail.com (Postfix) with ESMTP for ; Sat, 31 Oct 2020 09:26:21 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=casper.20170209; h=Content-Transfer-Encoding:MIME-Version: References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From:Sender:Reply-To: Content-Type:Content-ID:Content-Description; bh=MWaMneU7BhzODsMhJkl5CJM+zMKEb8OgtLKiOZosoCk=; b=qE5NYOKMbe4XeE8BYN8fFNEy9q DViNDofJVNr1FC64B8Kea7D3I4Jd9NJjh4+0FlckN5mLaPnpU3S0gEGuYcYJd5qopVCnLHNy1/PCT o7KGBEOJ3wcURPs38tRliRa76rn8KRo6Pz5n2eOXpA/nz111btt8WiqFA+0LC1hvnYBWxNpp8hIwB cc790NyWsudCExvSHRC83ut/sX7RbKGLZzUJviU6ZhOSG7RQl4Ej4AmKby3XUn7Xt6cSc/vNzaFhq wu/gbeiGAsgpvmjoRehH03O1Dmu7yUm9v0kOtoiyB0LYVnkUXIQdXwZagffzPmCq82egBvBIpf/GN CTPWPNug==; Received: from 089144193201.atnat0002.highway.a1.net ([89.144.193.201] helo=localhost) by casper.infradead.org with esmtpsa (Exim 4.92.3 #3 (Red Hat Linux)) id 1kYn9O-00004x-Fg; Sat, 31 Oct 2020 09:26:19 +0000 From: Christoph Hellwig To: Andrew Morton Cc: Kent Overstreet , Matthew Wilcox , linux-mm@kvack.org, linux-fsdevel@vger.kernel.org Subject: [PATCH 11/13] mm: streamline the partially uptodate checks in filemap_make_page_uptodate Date: Sat, 31 Oct 2020 10:00:02 +0100 Message-Id: <20201031090004.452516-12-hch@lst.de> X-Mailer: git-send-email 2.28.0 In-Reply-To: <20201031090004.452516-1-hch@lst.de> References: <20201031090004.452516-1-hch@lst.de> MIME-Version: 1.0 X-SRS-Rewrite: SMTP reverse-path rewritten from by casper.infradead.org. See http://www.infradead.org/rpr.html 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: Unwind the goto mess a bit. Signed-off-by: Christoph Hellwig --- mm/filemap.c | 42 +++++++++++++++++------------------------- 1 file changed, 17 insertions(+), 25 deletions(-) diff --git a/mm/filemap.c b/mm/filemap.c index 000f75cd359d1c..904b0a4fb9e008 100644 --- a/mm/filemap.c +++ b/mm/filemap.c @@ -2218,7 +2218,6 @@ static int filemap_make_page_uptodate(struct kiocb *iocb, struct iov_iter *iter, struct address_space *mapping = file->f_mapping; loff_t last = iocb->ki_pos + iter->count; pgoff_t last_index = (last + PAGE_SIZE - 1) >> PAGE_SHIFT; - loff_t pos = max(iocb->ki_pos, (loff_t)pg_index << PAGE_SHIFT); int error; if (PageReadahead(page)) { @@ -2251,32 +2250,22 @@ static int filemap_make_page_uptodate(struct kiocb *iocb, struct iov_iter *iter, if (PageUptodate(page)) return 0; - if (mapping->host->i_blkbits == PAGE_SHIFT || - !mapping->a_ops->is_partially_uptodate) - goto page_not_up_to_date; - /* pipes can't handle partially uptodate pages */ - if (unlikely(iov_iter_is_pipe(iter))) - goto page_not_up_to_date; - if (!trylock_page(page)) - goto page_not_up_to_date; - /* Did it get truncated before we got the lock? */ - if (!page->mapping) - goto page_not_up_to_date_locked; - if (!mapping->a_ops->is_partially_uptodate(page, pos & ~PAGE_MASK, - last - pos)) - goto page_not_up_to_date_locked; - -unlock_page: - unlock_page(page); - return 0; + if (mapping->host->i_blkbits <= PAGE_SHIFT && + mapping->a_ops->is_partially_uptodate && + !iov_iter_is_pipe(iter) && + trylock_page(page)) { + loff_t pos = max(iocb->ki_pos, (loff_t)pg_index << PAGE_SHIFT); -page_not_up_to_date: - /* Get exclusive access to the page ... */ - error = lock_page_for_iocb(iocb, page); - if (unlikely(error)) - return error; + if (page->mapping && + mapping->a_ops->is_partially_uptodate(page, + pos & ~PAGE_MASK, last - pos)) + goto unlock_page; + } else { + error = lock_page_for_iocb(iocb, page); + if (unlikely(error)) + return error; + } -page_not_up_to_date_locked: /* Did it get truncated before we got the lock? */ if (!page->mapping) { unlock_page(page); @@ -2287,6 +2276,9 @@ static int filemap_make_page_uptodate(struct kiocb *iocb, struct iov_iter *iter, if (PageUptodate(page)) goto unlock_page; return filemap_readpage(iocb, page); +unlock_page: + unlock_page(page); + return 0; } static int filemap_new_page(struct kiocb *iocb, struct iov_iter *iter, From patchwork Sat Oct 31 09:00:03 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Christoph Hellwig X-Patchwork-Id: 11871275 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 4DB1C697 for ; Sat, 31 Oct 2020 09:28:34 +0000 (UTC) Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.kernel.org (Postfix) with ESMTP id 051A32076D for ; Sat, 31 Oct 2020 09:28:33 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (2048-bit key) header.d=infradead.org header.i=@infradead.org header.b="V1HLFl0i" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 051A32076D Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=lst.de Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=owner-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix) id 14F3B6B005C; Sat, 31 Oct 2020 05:28:33 -0400 (EDT) Delivered-To: linux-mm-outgoing@kvack.org Received: by kanga.kvack.org (Postfix, from userid 40) id 0DAEF6B006E; Sat, 31 Oct 2020 05:28:33 -0400 (EDT) X-Original-To: int-list-linux-mm@kvack.org X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id EE0E86B0070; Sat, 31 Oct 2020 05:28:32 -0400 (EDT) X-Original-To: linux-mm@kvack.org X-Delivered-To: linux-mm@kvack.org Received: from forelay.hostedemail.com (smtprelay0050.hostedemail.com [216.40.44.50]) by kanga.kvack.org (Postfix) with ESMTP id BE2606B005C for ; Sat, 31 Oct 2020 05:28:32 -0400 (EDT) Received: from smtpin30.hostedemail.com (10.5.19.251.rfc1918.com [10.5.19.251]) by forelay01.hostedemail.com (Postfix) with ESMTP id 5878E180AD806 for ; Sat, 31 Oct 2020 09:28:32 +0000 (UTC) X-FDA: 77431695264.30.fish39_0305adb2729d Received: from filter.hostedemail.com (10.5.16.251.rfc1918.com [10.5.16.251]) by smtpin30.hostedemail.com (Postfix) with ESMTP id 3FA39180B3AA7 for ; Sat, 31 Oct 2020 09:28:32 +0000 (UTC) X-Spam-Summary: 1,0,0,7af235b5be1f9952,d41d8cd98f00b204,batv+e1c4655336593cdcfc57+6278+infradead.org+hch@casper.srs.infradead.org,,RULES_HIT:41:69:355:379:541:800:960:966:973:982:988:989:1260:1311:1314:1345:1359:1437:1515:1535:1544:1605:1711:1730:1747:1777:1792:1981:2194:2196:2198:2199:2200:2201:2393:2559:2562:2895:3138:3139:3140:3141:3142:3865:3866:3867:3868:3870:3871:3872:3874:4117:4250:4321:4385:4605:5007:6119:6261:6653:7875:7903:10004:11026:11473:11658:11914:12043:12114:12160:12296:12297:12438:12517:12519:12555:12679:12683:12895:12986:13894:14096:14110:14181:14394:14721:21080:21451:21627:21990:30003:30012:30029:30034:30054:30070,0,RBL:90.155.50.34:@casper.srs.infradead.org:.lbl8.mailshell.net-64.201.201.201 62.8.15.100;04y8sgoz5n34cjistgd5gzex77k4ioprzzmqg4fhz4hzn6eyp47kgabbj7t18dc.twx198udyxe6gon9kh6r3g63s47wbw9axk7kp4bfrjaszms3g87zztir6fwhwf5.e-lbl8.mailshell.net-223.238.255.100,CacheIP:none,Bayesian:0.5,0.5,0.5,Netcheck:none,DomainCache:0,MSF:not bulk,SPF:fn,MSBL:0,DNS BL:neutr X-HE-Tag: fish39_0305adb2729d X-Filterd-Recvd-Size: 6267 Received: from casper.infradead.org (casper.infradead.org [90.155.50.34]) by imf19.hostedemail.com (Postfix) with ESMTP for ; Sat, 31 Oct 2020 09:28:31 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=casper.20170209; h=Content-Transfer-Encoding:MIME-Version: References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From:Sender:Reply-To: Content-Type:Content-ID:Content-Description; bh=UVuvskOd7u+cW+9FE21ypaPGl+5Mur2FVKlFNoSP4LQ=; b=V1HLFl0izdyBDWpSlqawDTXJBs lx0AQba6PUflfbCt/aXdj3P9hEhRFmOX0nIvYzjVrxdYakRh/KdB9IP9dEe7BFFKPABHYC2mWsUZz MkwnCvpJnGsknEcAS4m8uoNclTZ74jKhnWs+NMHpomVWYSW+g+sE8yEOApDN81REUWy8jQctMaiLW QbmFRs6JKG/Pz5IDeGiZPHcGnze/0a8M4kjy7VuJV5EYHmJtIyOmeWk9IAxiC/l/allMzZ2aEUoBH 3kvECAUgROf0RyGUd11QVEVGGE/flivZLWFOczbtVRVKBH4NEmwBsNoOnwDj1SfocEK8I/kII1k3n k8xSTmgw==; Received: from 089144193201.atnat0002.highway.a1.net ([89.144.193.201] helo=localhost) by casper.infradead.org with esmtpsa (Exim 4.92.3 #3 (Red Hat Linux)) id 1kYnBV-0000CU-Fv; Sat, 31 Oct 2020 09:28:29 +0000 From: Christoph Hellwig To: Andrew Morton Cc: Kent Overstreet , Matthew Wilcox , linux-mm@kvack.org, linux-fsdevel@vger.kernel.org Subject: [PATCH 12/13] mm: rename generic_file_buffered_read to filemap_read Date: Sat, 31 Oct 2020 10:00:03 +0100 Message-Id: <20201031090004.452516-13-hch@lst.de> X-Mailer: git-send-email 2.28.0 In-Reply-To: <20201031090004.452516-1-hch@lst.de> References: <20201031090004.452516-1-hch@lst.de> MIME-Version: 1.0 X-SRS-Rewrite: SMTP reverse-path rewritten from by casper.infradead.org. See http://www.infradead.org/rpr.html 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: Rename generic_file_buffered_read to match the naming of filemap_fault, also update the written parameter to a more descriptive name and improve the kerneldoc comment. Signed-off-by: Christoph Hellwig --- fs/btrfs/file.c | 2 +- include/linux/fs.h | 4 ++-- mm/filemap.c | 34 ++++++++++++++++------------------ 3 files changed, 19 insertions(+), 21 deletions(-) diff --git a/fs/btrfs/file.c b/fs/btrfs/file.c index 87355a38a65470..1a4913e1fd1289 100644 --- a/fs/btrfs/file.c +++ b/fs/btrfs/file.c @@ -3633,7 +3633,7 @@ static ssize_t btrfs_file_read_iter(struct kiocb *iocb, struct iov_iter *to) return ret; } - return generic_file_buffered_read(iocb, to, ret); + return filemap_read(iocb, to, ret); } const struct file_operations btrfs_file_operations = { diff --git a/include/linux/fs.h b/include/linux/fs.h index 8d559d43f2af92..a79f65607236ae 100644 --- a/include/linux/fs.h +++ b/include/linux/fs.h @@ -2948,8 +2948,8 @@ extern ssize_t generic_write_checks(struct kiocb *, struct iov_iter *); extern int generic_write_check_limits(struct file *file, loff_t pos, loff_t *count); extern int generic_file_rw_checks(struct file *file_in, struct file *file_out); -extern ssize_t generic_file_buffered_read(struct kiocb *iocb, - struct iov_iter *to, ssize_t already_read); +ssize_t filemap_read(struct kiocb *iocb, struct iov_iter *to, + ssize_t already_read); extern ssize_t generic_file_read_iter(struct kiocb *, struct iov_iter *); extern ssize_t __generic_file_write_iter(struct kiocb *, struct iov_iter *); extern ssize_t generic_file_write_iter(struct kiocb *, struct iov_iter *); diff --git a/mm/filemap.c b/mm/filemap.c index 904b0a4fb9e008..743d764f3eab1c 100644 --- a/mm/filemap.c +++ b/mm/filemap.c @@ -2372,23 +2372,21 @@ static int filemap_read_pages(struct kiocb *iocb, struct iov_iter *iter, } /** - * generic_file_buffered_read - generic file read routine - * @iocb: the iocb to read - * @iter: data destination - * @written: already copied + * filemap_read - read data from the page cache + * @iocb: the iocb to read + * @iter: data destination + * @already_read: number of bytes already read by the caller * - * This is a generic file read routine, and uses the - * mapping->a_ops->readpage() function for the actual low-level stuff. - * - * This is really ugly. But the goto's actually try to clarify some - * of the logic when it comes to error handling etc. + * Read data from the pagecache using the ->readpage address space + * operation. * * Return: - * * total number of bytes copied, including those the were already @written - * * negative error code if nothing was copied + * Total number of bytes copied, including those already read by the caller as + * passed in the @already_read argument. Negative error code if an error + * happened before any bytes were copied. */ -ssize_t generic_file_buffered_read(struct kiocb *iocb, - struct iov_iter *iter, ssize_t written) +ssize_t filemap_read(struct kiocb *iocb, struct iov_iter *iter, + ssize_t already_read) { struct file *filp = iocb->ki_filp; struct file_ra_state *ra = &filp->f_ra; @@ -2422,7 +2420,7 @@ ssize_t generic_file_buffered_read(struct kiocb *iocb, * can no longer safely return -EIOCBQUEUED. Hence mark * an async read NOWAIT at that point. */ - if ((iocb->ki_flags & IOCB_WAITQ) && written) + if ((iocb->ki_flags & IOCB_WAITQ) && already_read) iocb->ki_flags |= IOCB_NOWAIT; i = 0; @@ -2482,7 +2480,7 @@ ssize_t generic_file_buffered_read(struct kiocb *iocb, copied = copy_page_to_iter(pages[i], offset, bytes, iter); - written += copied; + already_read += copied; iocb->ki_pos += copied; ra->prev_pos = iocb->ki_pos; @@ -2501,9 +2499,9 @@ ssize_t generic_file_buffered_read(struct kiocb *iocb, if (pages != pages_onstack) kfree(pages); - return written ? written : error; + return already_read ? already_read : error; } -EXPORT_SYMBOL_GPL(generic_file_buffered_read); +EXPORT_SYMBOL_GPL(filemap_read); /** * generic_file_read_iter - generic filesystem read routine @@ -2577,7 +2575,7 @@ generic_file_read_iter(struct kiocb *iocb, struct iov_iter *iter) goto out; } - retval = generic_file_buffered_read(iocb, iter, retval); + retval = filemap_read(iocb, iter, retval); out: return retval; } From patchwork Sat Oct 31 09:00:04 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Christoph Hellwig X-Patchwork-Id: 11871277 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 6B3101130 for ; Sat, 31 Oct 2020 09:30:45 +0000 (UTC) Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.kernel.org (Postfix) with ESMTP id 3131B2076E for ; Sat, 31 Oct 2020 09:30:45 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (2048-bit key) header.d=infradead.org header.i=@infradead.org header.b="stLdkSEl" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 3131B2076E Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=lst.de Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=owner-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix) id 4CA676B005C; Sat, 31 Oct 2020 05:30:44 -0400 (EDT) Delivered-To: linux-mm-outgoing@kvack.org Received: by kanga.kvack.org (Postfix, from userid 40) id 47B176B006E; Sat, 31 Oct 2020 05:30:44 -0400 (EDT) X-Original-To: int-list-linux-mm@kvack.org X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 36A9F6B0070; Sat, 31 Oct 2020 05:30:44 -0400 (EDT) X-Original-To: linux-mm@kvack.org X-Delivered-To: linux-mm@kvack.org Received: from forelay.hostedemail.com (smtprelay0024.hostedemail.com [216.40.44.24]) by kanga.kvack.org (Postfix) with ESMTP id 0BFC36B005C for ; Sat, 31 Oct 2020 05:30:44 -0400 (EDT) Received: from smtpin21.hostedemail.com (10.5.19.251.rfc1918.com [10.5.19.251]) by forelay01.hostedemail.com (Postfix) with ESMTP id AFEDF180AD80F for ; Sat, 31 Oct 2020 09:30:43 +0000 (UTC) X-FDA: 77431700766.21.news87_450b4492729d Received: from filter.hostedemail.com (10.5.16.251.rfc1918.com [10.5.16.251]) by smtpin21.hostedemail.com (Postfix) with ESMTP id 989B4180442C2 for ; Sat, 31 Oct 2020 09:30:43 +0000 (UTC) X-Spam-Summary: 1,0,0,fcce981a257a16f6,d41d8cd98f00b204,batv+e1c4655336593cdcfc57+6278+infradead.org+hch@casper.srs.infradead.org,,RULES_HIT:41:355:379:541:800:960:988:989:1260:1311:1314:1345:1359:1437:1515:1534:1541:1711:1730:1747:1777:1792:2194:2199:2393:2559:2562:3138:3139:3140:3141:3142:3352:3865:4605:5007:6261:6653:8603:10004:11026:11658:11914:12043:12114:12160:12296:12297:12438:12517:12519:12555:12895:13069:13311:13357:13894:14096:14181:14384:14394:14721:21080:21451:21627:21990:30054,0,RBL:90.155.50.34:@casper.srs.infradead.org:.lbl8.mailshell.net-64.201.201.201 62.8.15.100;04ygxodunxjhyu36apu34eadxx85yophe5cxjzifaksoy6mjabb6ohmt76sd7ti.yskmbtehj3tk5qsjx5q8m4zumfjskmgk565jcw61tzo8i7o3cn33uwcqmq75866.n-lbl8.mailshell.net-223.238.255.100,CacheIP:none,Bayesian:0.5,0.5,0.5,Netcheck:none,DomainCache:0,MSF:not bulk,SPF:fn,MSBL:0,DNSBL:neutral,Custom_rules:0:0:0,LFtime:69,LUA_SUMMARY:none X-HE-Tag: news87_450b4492729d X-Filterd-Recvd-Size: 3025 Received: from casper.infradead.org (casper.infradead.org [90.155.50.34]) by imf11.hostedemail.com (Postfix) with ESMTP for ; Sat, 31 Oct 2020 09:30:43 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=casper.20170209; h=Content-Transfer-Encoding:MIME-Version: References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From:Sender:Reply-To: Content-Type:Content-ID:Content-Description; bh=RqDbAgPgOvB5taFEIjSsWqsN4HVXXWmvRa4haI7RAX8=; b=stLdkSElJhmp/NOrYLuOswpaFS vWKFOJTu0qPiEwqjxbmSwqe2Y1bunTE+cJi/2vMuql6PsHL7PfrvZNdM13wVSozXIQ2BaAWQ2ZuLk p+iNUn1h3MG5yZww9C660AnIbBBLO2vQbR43OIHXwwFqczRkMaOFW/JDJcy4ApeIGorKHLTAaTjJi O+m3fWZ28aOEncW2VPTmxBYeYHor8+xCyZ1PuyPR8BIXRJPJXhLVhdfcR/H1Q+Jk4FzGuZ/0xOCcy xsbqSWzPe2WjBhNkd2Mx7oZUYDBl+EgWQQ1e4SAC2fwlG0GKFqmpv38EJNjsYFHlYQwPseG5aAHUG ib/JAB0A==; Received: from 089144193201.atnat0002.highway.a1.net ([89.144.193.201] helo=localhost) by casper.infradead.org with esmtpsa (Exim 4.92.3 #3 (Red Hat Linux)) id 1kYnDc-0000Mr-Mf; Sat, 31 Oct 2020 09:30:41 +0000 From: Christoph Hellwig To: Andrew Morton Cc: Kent Overstreet , Matthew Wilcox , linux-mm@kvack.org, linux-fsdevel@vger.kernel.org Subject: [PATCH 13/13] mm: simplify generic_file_read_iter Date: Sat, 31 Oct 2020 10:00:04 +0100 Message-Id: <20201031090004.452516-14-hch@lst.de> X-Mailer: git-send-email 2.28.0 In-Reply-To: <20201031090004.452516-1-hch@lst.de> References: <20201031090004.452516-1-hch@lst.de> MIME-Version: 1.0 X-SRS-Rewrite: SMTP reverse-path rewritten from by casper.infradead.org. See http://www.infradead.org/rpr.html 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: Avoid the pointless goto out just for returning retval. Signed-off-by: Christoph Hellwig --- mm/filemap.c | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/mm/filemap.c b/mm/filemap.c index 743d764f3eab1c..b45f0bafdbaebf 100644 --- a/mm/filemap.c +++ b/mm/filemap.c @@ -2531,7 +2531,7 @@ generic_file_read_iter(struct kiocb *iocb, struct iov_iter *iter) ssize_t retval = 0; if (!count) - goto out; /* skip atime */ + return 0; /* skip atime */ if (iocb->ki_flags & IOCB_DIRECT) { struct file *file = iocb->ki_filp; @@ -2549,7 +2549,7 @@ generic_file_read_iter(struct kiocb *iocb, struct iov_iter *iter) iocb->ki_pos, iocb->ki_pos + count - 1); if (retval < 0) - goto out; + return retval; } file_accessed(file); @@ -2572,12 +2572,10 @@ generic_file_read_iter(struct kiocb *iocb, struct iov_iter *iter) */ if (retval < 0 || !count || iocb->ki_pos >= size || IS_DAX(inode)) - goto out; + return retval; } - retval = filemap_read(iocb, iter, retval); -out: - return retval; + return filemap_read(iocb, iter, retval); } EXPORT_SYMBOL(generic_file_read_iter);