From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-15.8 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER, INCLUDES_PATCH,MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id DCA65C433E6 for ; Sun, 24 Jan 2021 01:50:19 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id B6A9D22D37 for ; Sun, 24 Jan 2021 01:50:19 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726459AbhAXBuS (ORCPT ); Sat, 23 Jan 2021 20:50:18 -0500 Received: from mail.kernel.org ([198.145.29.99]:50030 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726472AbhAXBuR (ORCPT ); Sat, 23 Jan 2021 20:50:17 -0500 Received: by mail.kernel.org (Postfix) with ESMTPSA id 7E59322D49; Sun, 24 Jan 2021 01:49:20 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linux-foundation.org; s=korg; t=1611452962; bh=qmhnpfhpF1Gi9Q5wMgMoiSIxGQ+o0gP6A3kB324Gm0E=; h=Date:From:To:Subject:From; b=EzWjo+HwMBvGSvi9jZZZMnmsqW/WWHRjaUUgdEZfZVFOYzPbodo8giRSeOlGyb+0S pHlC3MWLOSet5wBAX0k14/VJHqs7wFT65Y6a6eqF8LCFt4Zv0fcnESE3rB47opwJwt BtLv2mEQd06fq71KcWD9irzWZ6aRgQRUaVsLVrdA= Date: Sat, 23 Jan 2021 17:49:18 -0800 From: akpm@linux-foundation.org To: hch@lst.de, kent.overstreet@gmail.com, linmiaohe@huawei.com, mm-commits@vger.kernel.org, willy@infradead.org Subject: + mm-filemap-change-filemap_create_page-calling-conventions.patch added to -mm tree Message-ID: <20210124014918.lTNP2sa_I%akpm@linux-foundation.org> User-Agent: s-nail v14.8.16 Precedence: bulk Reply-To: linux-kernel@vger.kernel.org List-ID: X-Mailing-List: mm-commits@vger.kernel.org The patch titled Subject: mm/filemap: change filemap_create_page calling conventions has been added to the -mm tree. Its filename is mm-filemap-change-filemap_create_page-calling-conventions.patch This patch should soon appear at https://ozlabs.org/~akpm/mmots/broken-out/mm-filemap-change-filemap_create_page-calling-conventions.patch and later at https://ozlabs.org/~akpm/mmotm/broken-out/mm-filemap-change-filemap_create_page-calling-conventions.patch Before you just go and hit "reply", please: a) Consider who else should be cc'ed b) Prefer to cc a suitable mailing list as well c) Ideally: find the original patch on the mailing list and do a reply-to-all to that, adding suitable additional cc's *** Remember to use Documentation/process/submit-checklist.rst when testing your code *** The -mm tree is included into linux-next and is updated there every 3-4 working days ------------------------------------------------------ From: "Matthew Wilcox (Oracle)" Subject: mm/filemap: change filemap_create_page calling conventions By moving the iocb flag checks to the caller, we can pass the file and the page index instead of the iocb. It never needed the iter. By passing the pagevec, we can return an errno (or AOP_TRUNCATED_PAGE) instead of an ERR_PTR. Link: https://lkml.kernel.org/r/20210122160140.223228-11-willy@infradead.org Signed-off-by: Matthew Wilcox (Oracle) Reviewed-by: Kent Overstreet Reviewed-by: Christoph Hellwig Cc: Miaohe Lin Signed-off-by: Andrew Morton --- mm/filemap.c | 53 ++++++++++++++++++++++++------------------------- 1 file changed, 27 insertions(+), 26 deletions(-) --- a/mm/filemap.c~mm-filemap-change-filemap_create_page-calling-conventions +++ a/mm/filemap.c @@ -2284,32 +2284,33 @@ truncated: return NULL; } -static struct page *filemap_create_page(struct kiocb *iocb, - struct iov_iter *iter) +static int filemap_create_page(struct file *file, + struct address_space *mapping, pgoff_t index, + struct pagevec *pvec) { - struct file *filp = iocb->ki_filp; - struct address_space *mapping = filp->f_mapping; - pgoff_t index = iocb->ki_pos >> PAGE_SHIFT; struct page *page; int error; - if (iocb->ki_flags & (IOCB_NOIO | IOCB_NOWAIT | IOCB_WAITQ)) - return ERR_PTR(-EAGAIN); - page = page_cache_alloc(mapping); if (!page) - return ERR_PTR(-ENOMEM); + return -ENOMEM; error = add_to_page_cache_lru(page, mapping, index, - mapping_gfp_constraint(mapping, GFP_KERNEL)); - if (!error) - error = filemap_read_page(iocb->ki_filp, mapping, page); - if (!error) - return page; + mapping_gfp_constraint(mapping, GFP_KERNEL)); + if (error == -EEXIST) + error = AOP_TRUNCATED_PAGE; + if (error) + goto error; + + error = filemap_read_page(file, mapping, page); + if (error) + goto error; + + pagevec_add(pvec, page); + return 0; +error: put_page(page); - if (error == -EEXIST || error == AOP_TRUNCATED_PAGE) - return NULL; - return ERR_PTR(error); + return error; } static int filemap_get_pages(struct kiocb *iocb, struct iov_iter *iter, @@ -2337,15 +2338,15 @@ find_page: page_cache_sync_readahead(mapping, ra, filp, index, last_index - index); filemap_get_read_batch(mapping, index, last_index, pvec); - if (pvec->nr) - goto got_pages; - - pvec->pages[0] = filemap_create_page(iocb, iter); - err = PTR_ERR_OR_ZERO(pvec->pages[0]); - if (IS_ERR_OR_NULL(pvec->pages[0])) - goto err; - pvec->nr = 1; - return 0; + if (!pagevec_count(pvec)) { + if (iocb->ki_flags & (IOCB_NOWAIT | IOCB_WAITQ)) + return -EAGAIN; + err = filemap_create_page(filp, mapping, + iocb->ki_pos >> PAGE_SHIFT, pvec); + if (err == AOP_TRUNCATED_PAGE) + goto find_page; + return err; + } got_pages: { struct page *page = pvec->pages[pvec->nr - 1]; _ Patches currently in -mm which might be from willy@infradead.org are mm-debug-improve-memcg-debugging.patch mm-filemap-rename-generic_file_buffered_read-subfunctions.patch mm-filemap-remove-dynamically-allocated-array-from-filemap_read.patch mm-filemap-convert-filemap_get_pages-to-take-a-pagevec.patch mm-filemap-use-head-pages-in-generic_file_buffered_read.patch mm-filemap-pass-a-sleep-state-to-put_and_wait_on_page_locked.patch mm-filemap-support-readpage-splitting-a-page.patch mm-filemap-inline-__wait_on_page_locked_async-into-caller.patch mm-filemap-dont-call-readpage-if-iocb_waitq-is-set.patch mm-filemap-change-filemap_read_page-calling-conventions.patch mm-filemap-change-filemap_create_page-calling-conventions.patch mm-filemap-convert-filemap_update_page-to-return-an-errno.patch mm-filemap-move-the-iocb-checks-into-filemap_update_page.patch mm-filemap-add-filemap_range_uptodate.patch mm-filemap-split-filemap_readahead-out-of-filemap_get_pages.patch mm-filemap-restructure-filemap_get_pages.patch mm-filemap-dont-relock-the-page-after-calling-readpage.patch mm-make-pagecache-tagged-lookups-return-only-head-pages.patch mm-shmem-use-pagevec_lookup-in-shmem_unlock_mapping.patch mm-swap-optimise-get_shadow_from_swap_cache.patch mm-add-fgp_entry.patch mm-filemap-rename-find_get_entry-to-mapping_get_entry.patch mm-filemap-add-helper-for-finding-pages.patch mm-filemap-add-helper-for-finding-pages-fix.patch mm-filemap-add-mapping_seek_hole_data.patch mm-filemap-add-mapping_seek_hole_data-fix.patch iomap-use-mapping_seek_hole_data.patch mm-add-and-use-find_lock_entries.patch mm-add-and-use-find_lock_entries-fix.patch mm-add-an-end-parameter-to-find_get_entries.patch mm-add-an-end-parameter-to-pagevec_lookup_entries.patch mm-remove-nr_entries-parameter-from-pagevec_lookup_entries.patch mm-pass-pvec-directly-to-find_get_entries.patch mm-remove-pagevec_lookup_entries.patch