From patchwork Mon Sep 14 09:37:03 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nikolay Borisov X-Patchwork-Id: 11773413 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 D98036CA for ; Mon, 14 Sep 2020 09:37:29 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id C8BEC2192A for ; Mon, 14 Sep 2020 09:37:29 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726363AbgINJhT (ORCPT ); Mon, 14 Sep 2020 05:37:19 -0400 Received: from mx2.suse.de ([195.135.220.15]:41180 "EHLO mx2.suse.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726273AbgINJhQ (ORCPT ); Mon, 14 Sep 2020 05:37:16 -0400 X-Virus-Scanned: by amavisd-new at test-mx.suse.de Received: from relay2.suse.de (unknown [195.135.221.27]) by mx2.suse.de (Postfix) with ESMTP id 2C5E8AD21; Mon, 14 Sep 2020 09:37:31 +0000 (UTC) From: Nikolay Borisov To: linux-btrfs@vger.kernel.org Cc: Nikolay Borisov Subject: [PATCH v2 1/9] btrfs: Remove btree_readpage Date: Mon, 14 Sep 2020 12:37:03 +0300 Message-Id: <20200914093711.13523-2-nborisov@suse.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20200914093711.13523-1-nborisov@suse.com> References: <20200914093711.13523-1-nborisov@suse.com> Sender: linux-btrfs-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-btrfs@vger.kernel.org There is no way for this function to be called as ->readpage() since it's called from generic_file_buffered_read/filemap_fault/do_read_cache_page/readhead code. BTRFS doesn't utilize the first 3 for the btree inode and implements it's owon readhead mechanism. So simply remove the function. Signed-off-by: Nikolay Borisov Reviewed-by: Qu Wenruo --- fs/btrfs/disk-io.c | 6 ------ 1 file changed, 6 deletions(-) diff --git a/fs/btrfs/disk-io.c b/fs/btrfs/disk-io.c index 7147237d9bf0..d63498f3c75f 100644 --- a/fs/btrfs/disk-io.c +++ b/fs/btrfs/disk-io.c @@ -949,11 +949,6 @@ static int btree_writepages(struct address_space *mapping, return btree_write_cache_pages(mapping, wbc); } -static int btree_readpage(struct file *file, struct page *page) -{ - return extent_read_full_page(page, btree_get_extent, 0); -} - static int btree_releasepage(struct page *page, gfp_t gfp_flags) { if (PageWriteback(page) || PageDirty(page)) @@ -993,7 +988,6 @@ static int btree_set_page_dirty(struct page *page) } static const struct address_space_operations btree_aops = { - .readpage = btree_readpage, .writepages = btree_writepages, .releasepage = btree_releasepage, .invalidatepage = btree_invalidatepage, From patchwork Mon Sep 14 09:37:04 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nikolay Borisov X-Patchwork-Id: 11773403 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 7A629112E for ; Mon, 14 Sep 2020 09:37:21 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 67D0A2192A for ; Mon, 14 Sep 2020 09:37:21 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726367AbgINJhU (ORCPT ); Mon, 14 Sep 2020 05:37:20 -0400 Received: from mx2.suse.de ([195.135.220.15]:41188 "EHLO mx2.suse.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726275AbgINJhR (ORCPT ); Mon, 14 Sep 2020 05:37:17 -0400 X-Virus-Scanned: by amavisd-new at test-mx.suse.de Received: from relay2.suse.de (unknown [195.135.221.27]) by mx2.suse.de (Postfix) with ESMTP id 670E9AE85; Mon, 14 Sep 2020 09:37:31 +0000 (UTC) From: Nikolay Borisov To: linux-btrfs@vger.kernel.org Cc: Nikolay Borisov Subject: [PATCH v2 2/9] btrfs: Simplify metadata pages reading Date: Mon, 14 Sep 2020 12:37:04 +0300 Message-Id: <20200914093711.13523-3-nborisov@suse.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20200914093711.13523-1-nborisov@suse.com> References: <20200914093711.13523-1-nborisov@suse.com> Sender: linux-btrfs-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-btrfs@vger.kernel.org Metadata pages currently use __do_readpage to read metadata pages, unfortunately this function is also used to deal with ordinary data pages. This makes the metadata pages reading code to go through multiple hoops in order to adhere to __do_readpage invariants. Most of these are necessary for data pages which could be compressed. For metadata it's enough to simply build a bio and submit it. To this effect simply call submit_extent_page directly from read_extent_buffer_pages which is the only callpath used to populate extent_buffers with data. This in turn enables further cleanups. Signed-off-by: Nikolay Borisov Reviewed-by: Qu Wenruo --- fs/btrfs/extent_io.c | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/fs/btrfs/extent_io.c b/fs/btrfs/extent_io.c index a1e070ec7ad8..0a6cda4c30ed 100644 --- a/fs/btrfs/extent_io.c +++ b/fs/btrfs/extent_io.c @@ -5573,20 +5573,19 @@ int read_extent_buffer_pages(struct extent_buffer *eb, int wait, int mirror_num) } ClearPageError(page); - err = __extent_read_full_page(page, - btree_get_extent, &bio, - mirror_num, &bio_flags, - REQ_META); + err = submit_extent_page(REQ_OP_READ | REQ_META, NULL, + page, page_offset(page), PAGE_SIZE, 0, + &bio, end_bio_extent_readpage, + mirror_num, 0, 0, false); if (err) { - ret = err; /* - * We use &bio in above __extent_read_full_page, - * so we ensure that if it returns error, the - * current page fails to add itself to bio and - * it's been unlocked. - * - * We must dec io_pages by ourselves. + * We failed to submit the bio so it's the + * caller's responsibility to perform cleanup + * i.e unlock page/set error bit. */ + ret = err; + SetPageError(page); + unlock_page(page); atomic_dec(&eb->io_pages); } } else { From patchwork Mon Sep 14 09:37:05 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nikolay Borisov X-Patchwork-Id: 11773411 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 D46F514F6 for ; Mon, 14 Sep 2020 09:37:28 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id BF66721BE5 for ; Mon, 14 Sep 2020 09:37:28 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726382AbgINJhX (ORCPT ); Mon, 14 Sep 2020 05:37:23 -0400 Received: from mx2.suse.de ([195.135.220.15]:41196 "EHLO mx2.suse.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726278AbgINJhR (ORCPT ); Mon, 14 Sep 2020 05:37:17 -0400 X-Virus-Scanned: by amavisd-new at test-mx.suse.de Received: from relay2.suse.de (unknown [195.135.221.27]) by mx2.suse.de (Postfix) with ESMTP id A450AAF0E; Mon, 14 Sep 2020 09:37:31 +0000 (UTC) From: Nikolay Borisov To: linux-btrfs@vger.kernel.org Cc: Nikolay Borisov Subject: [PATCH v2 3/9] btrfs: Remove btree_get_extent Date: Mon, 14 Sep 2020 12:37:05 +0300 Message-Id: <20200914093711.13523-4-nborisov@suse.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20200914093711.13523-1-nborisov@suse.com> References: <20200914093711.13523-1-nborisov@suse.com> Sender: linux-btrfs-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-btrfs@vger.kernel.org The sole purpose of this function was to satisfy the requirements of __do_readpage. Since that function is no longer used to read metadata pages the need to keep btree_get_extent around has also disappeared. Simply remove it. Signed-off-by: Nikolay Borisov Reviewed-by: Josef Bacik --- fs/btrfs/disk-io.c | 47 ---------------------------------------------- fs/btrfs/disk-io.h | 3 --- 2 files changed, 50 deletions(-) -- 2.17.1 diff --git a/fs/btrfs/disk-io.c b/fs/btrfs/disk-io.c index d63498f3c75f..2a5aadcf6b54 100644 --- a/fs/btrfs/disk-io.c +++ b/fs/btrfs/disk-io.c @@ -204,53 +204,6 @@ void btrfs_set_buffer_lockdep_class(u64 objectid, struct extent_buffer *eb, #endif -/* - * extents on the btree inode are pretty simple, there's one extent - * that covers the entire device - */ -struct extent_map *btree_get_extent(struct btrfs_inode *inode, - struct page *page, size_t pg_offset, - u64 start, u64 len) -{ - struct extent_map_tree *em_tree = &inode->extent_tree; - struct extent_map *em; - int ret; - - read_lock(&em_tree->lock); - em = lookup_extent_mapping(em_tree, start, len); - if (em) { - read_unlock(&em_tree->lock); - goto out; - } - read_unlock(&em_tree->lock); - - em = alloc_extent_map(); - if (!em) { - em = ERR_PTR(-ENOMEM); - goto out; - } - em->start = 0; - em->len = (u64)-1; - em->block_len = (u64)-1; - em->block_start = 0; - - write_lock(&em_tree->lock); - ret = add_extent_mapping(em_tree, em, 0); - if (ret == -EEXIST) { - free_extent_map(em); - em = lookup_extent_mapping(em_tree, start, len); - if (!em) - em = ERR_PTR(-EIO); - } else if (ret) { - free_extent_map(em); - em = ERR_PTR(ret); - } - write_unlock(&em_tree->lock); - -out: - return em; -} - /* * Compute the csum of a btree block and store the result to provided buffer. */ diff --git a/fs/btrfs/disk-io.h b/fs/btrfs/disk-io.h index 00dc39d47ed3..89b6a709a184 100644 --- a/fs/btrfs/disk-io.h +++ b/fs/btrfs/disk-io.h @@ -123,9 +123,6 @@ struct btrfs_root *btrfs_create_tree(struct btrfs_trans_handle *trans, u64 objectid); int btree_lock_page_hook(struct page *page, void *data, void (*flush_fn)(void *)); -struct extent_map *btree_get_extent(struct btrfs_inode *inode, - struct page *page, size_t pg_offset, - u64 start, u64 len); int btrfs_get_num_tolerated_disk_barrier_failures(u64 flags); int __init btrfs_end_io_wq_init(void); void __cold btrfs_end_io_wq_exit(void); From patchwork Mon Sep 14 09:37:06 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nikolay Borisov X-Patchwork-Id: 11773405 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 6C24A6CA for ; Mon, 14 Sep 2020 09:37:24 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 5AC1121BE5 for ; Mon, 14 Sep 2020 09:37:24 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726387AbgINJhX (ORCPT ); Mon, 14 Sep 2020 05:37:23 -0400 Received: from mx2.suse.de ([195.135.220.15]:41204 "EHLO mx2.suse.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726293AbgINJhS (ORCPT ); Mon, 14 Sep 2020 05:37:18 -0400 X-Virus-Scanned: by amavisd-new at test-mx.suse.de Received: from relay2.suse.de (unknown [195.135.221.27]) by mx2.suse.de (Postfix) with ESMTP id DF6C8AF26; Mon, 14 Sep 2020 09:37:31 +0000 (UTC) From: Nikolay Borisov To: linux-btrfs@vger.kernel.org Cc: Nikolay Borisov Subject: [PATCH v2 4/9] btrfs: Remove btrfs_get_extent indirection from __do_readpage Date: Mon, 14 Sep 2020 12:37:06 +0300 Message-Id: <20200914093711.13523-5-nborisov@suse.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20200914093711.13523-1-nborisov@suse.com> References: <20200914093711.13523-1-nborisov@suse.com> Sender: linux-btrfs-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-btrfs@vger.kernel.org Now that this function is only responsible for reading data pages it's no longer necessary to pass get_extent_t parameter across several layers of functions. This patch removes this parameter from multiple functions: __get_extent_map/__do_readpage/__extent_read_full_page/ extent_read_full_page and simply calls btrfs_get_extent directly in __get_extent_map. Signed-off-by: Nikolay Borisov --- fs/btrfs/extent_io.c | 31 ++++++++++++------------------- fs/btrfs/extent_io.h | 3 +-- fs/btrfs/inode.c | 2 +- 3 files changed, 14 insertions(+), 22 deletions(-) diff --git a/fs/btrfs/extent_io.c b/fs/btrfs/extent_io.c index 0a6cda4c30ed..4a0675ec90fa 100644 --- a/fs/btrfs/extent_io.c +++ b/fs/btrfs/extent_io.c @@ -3110,8 +3110,7 @@ void set_page_extent_mapped(struct page *page) static struct extent_map * __get_extent_map(struct inode *inode, struct page *page, size_t pg_offset, - u64 start, u64 len, get_extent_t *get_extent, - struct extent_map **em_cached) + u64 start, u64 len, struct extent_map **em_cached) { struct extent_map *em; @@ -3127,7 +3126,7 @@ __get_extent_map(struct inode *inode, struct page *page, size_t pg_offset, *em_cached = NULL; } - em = get_extent(BTRFS_I(inode), page, pg_offset, start, len); + em = btrfs_get_extent(BTRFS_I(inode), page, pg_offset, start, len); if (em_cached && !IS_ERR_OR_NULL(em)) { BUG_ON(*em_cached); refcount_inc(&em->refs); @@ -3142,9 +3141,7 @@ __get_extent_map(struct inode *inode, struct page *page, size_t pg_offset, * XXX JDM: This needs looking at to ensure proper page locking * return 0 on success, otherwise return error */ -static int __do_readpage(struct page *page, - get_extent_t *get_extent, - struct extent_map **em_cached, +static int __do_readpage(struct page *page, struct extent_map **em_cached, struct bio **bio, int mirror_num, unsigned long *bio_flags, unsigned int read_flags, u64 *prev_em_start) @@ -3209,7 +3206,7 @@ static int __do_readpage(struct page *page, break; } em = __get_extent_map(inode, page, pg_offset, cur, - end - cur + 1, get_extent, em_cached); + end - cur + 1, em_cached); if (IS_ERR_OR_NULL(em)) { SetPageError(page); unlock_extent(tree, cur, end); @@ -3362,16 +3359,14 @@ static inline void contiguous_readpages(struct page *pages[], int nr_pages, btrfs_lock_and_flush_ordered_range(inode, start, end, NULL); for (index = 0; index < nr_pages; index++) { - __do_readpage(pages[index], btrfs_get_extent, em_cached, - bio, 0, bio_flags, REQ_RAHEAD, prev_em_start); + __do_readpage(pages[index], em_cached, bio, 0, bio_flags, + REQ_RAHEAD, prev_em_start); put_page(pages[index]); } } -static int __extent_read_full_page(struct page *page, - get_extent_t *get_extent, - struct bio **bio, int mirror_num, - unsigned long *bio_flags, +static int __extent_read_full_page(struct page *page, struct bio **bio, + int mirror_num, unsigned long *bio_flags, unsigned int read_flags) { struct btrfs_inode *inode = BTRFS_I(page->mapping->host); @@ -3381,20 +3376,18 @@ static int __extent_read_full_page(struct page *page, btrfs_lock_and_flush_ordered_range(inode, start, end, NULL); - ret = __do_readpage(page, get_extent, NULL, bio, mirror_num, - bio_flags, read_flags, NULL); + ret = __do_readpage(page, NULL, bio, mirror_num, bio_flags, read_flags, + NULL); return ret; } -int extent_read_full_page(struct page *page, get_extent_t *get_extent, - int mirror_num) +int extent_read_full_page(struct page *page, int mirror_num) { struct bio *bio = NULL; unsigned long bio_flags = 0; int ret; - ret = __extent_read_full_page(page, get_extent, &bio, mirror_num, - &bio_flags, 0); + ret = __extent_read_full_page(page, &bio, mirror_num, &bio_flags, 0); if (bio) ret = submit_one_bio(bio, mirror_num, bio_flags); return ret; diff --git a/fs/btrfs/extent_io.h b/fs/btrfs/extent_io.h index 06611947a9f7..272d5281bd4d 100644 --- a/fs/btrfs/extent_io.h +++ b/fs/btrfs/extent_io.h @@ -193,8 +193,7 @@ typedef struct extent_map *(get_extent_t)(struct btrfs_inode *inode, int try_release_extent_mapping(struct page *page, gfp_t mask); int try_release_extent_buffer(struct page *page); -int extent_read_full_page(struct page *page, get_extent_t *get_extent, - int mirror_num); +int extent_read_full_page(struct page *page, int mirror_num); int extent_write_full_page(struct page *page, struct writeback_control *wbc); int extent_write_locked_range(struct inode *inode, u64 start, u64 end, int mode); diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c index cce6f8789a4e..df8a4008b139 100644 --- a/fs/btrfs/inode.c +++ b/fs/btrfs/inode.c @@ -8040,7 +8040,7 @@ static int btrfs_fiemap(struct inode *inode, struct fiemap_extent_info *fieinfo, int btrfs_readpage(struct file *file, struct page *page) { - return extent_read_full_page(page, btrfs_get_extent, 0); + return extent_read_full_page(page, 0); } static int btrfs_writepage(struct page *page, struct writeback_control *wbc) From patchwork Mon Sep 14 09:37:07 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nikolay Borisov X-Patchwork-Id: 11773421 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 C06C16CA for ; Mon, 14 Sep 2020 09:37:35 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id A835421BE5 for ; Mon, 14 Sep 2020 09:37:35 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726357AbgINJhe (ORCPT ); Mon, 14 Sep 2020 05:37:34 -0400 Received: from mx2.suse.de ([195.135.220.15]:41234 "EHLO mx2.suse.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726303AbgINJhS (ORCPT ); Mon, 14 Sep 2020 05:37:18 -0400 X-Virus-Scanned: by amavisd-new at test-mx.suse.de Received: from relay2.suse.de (unknown [195.135.221.27]) by mx2.suse.de (Postfix) with ESMTP id 27DA1AF3D; Mon, 14 Sep 2020 09:37:32 +0000 (UTC) From: Nikolay Borisov To: linux-btrfs@vger.kernel.org Cc: Nikolay Borisov Subject: [PATCH v2 5/9] btrfs: Remove mirror_num argument from extent_read_full_page Date: Mon, 14 Sep 2020 12:37:07 +0300 Message-Id: <20200914093711.13523-6-nborisov@suse.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20200914093711.13523-1-nborisov@suse.com> References: <20200914093711.13523-1-nborisov@suse.com> Sender: linux-btrfs-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-btrfs@vger.kernel.org It's called only from btrfs_readpage which always passes 0 so just sink the argument into extent_read_full_page. Signed-off-by: Nikolay Borisov Reviewed-by: Josef Bacik --- fs/btrfs/extent_io.c | 6 +++--- fs/btrfs/extent_io.h | 2 +- fs/btrfs/inode.c | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) -- 2.17.1 diff --git a/fs/btrfs/extent_io.c b/fs/btrfs/extent_io.c index 4a0675ec90fa..355db40a1cb5 100644 --- a/fs/btrfs/extent_io.c +++ b/fs/btrfs/extent_io.c @@ -3381,15 +3381,15 @@ static int __extent_read_full_page(struct page *page, struct bio **bio, return ret; } -int extent_read_full_page(struct page *page, int mirror_num) +int extent_read_full_page(struct page *page) { struct bio *bio = NULL; unsigned long bio_flags = 0; int ret; - ret = __extent_read_full_page(page, &bio, mirror_num, &bio_flags, 0); + ret = __extent_read_full_page(page, &bio, 0, &bio_flags, 0); if (bio) - ret = submit_one_bio(bio, mirror_num, bio_flags); + ret = submit_one_bio(bio, 0, bio_flags); return ret; } diff --git a/fs/btrfs/extent_io.h b/fs/btrfs/extent_io.h index 272d5281bd4d..0ccb2dabc291 100644 --- a/fs/btrfs/extent_io.h +++ b/fs/btrfs/extent_io.h @@ -193,7 +193,7 @@ typedef struct extent_map *(get_extent_t)(struct btrfs_inode *inode, int try_release_extent_mapping(struct page *page, gfp_t mask); int try_release_extent_buffer(struct page *page); -int extent_read_full_page(struct page *page, int mirror_num); +int extent_read_full_page(struct page *page); int extent_write_full_page(struct page *page, struct writeback_control *wbc); int extent_write_locked_range(struct inode *inode, u64 start, u64 end, int mode); diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c index df8a4008b139..e78099d1db34 100644 --- a/fs/btrfs/inode.c +++ b/fs/btrfs/inode.c @@ -8040,7 +8040,7 @@ static int btrfs_fiemap(struct inode *inode, struct fiemap_extent_info *fieinfo, int btrfs_readpage(struct file *file, struct page *page) { - return extent_read_full_page(page, 0); + return extent_read_full_page(page); } static int btrfs_writepage(struct page *page, struct writeback_control *wbc) From patchwork Mon Sep 14 09:37:08 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nikolay Borisov X-Patchwork-Id: 11773417 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 45F106CA for ; Mon, 14 Sep 2020 09:37:33 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 3374021BE5 for ; Mon, 14 Sep 2020 09:37:33 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726395AbgINJha (ORCPT ); Mon, 14 Sep 2020 05:37:30 -0400 Received: from mx2.suse.de ([195.135.220.15]:41232 "EHLO mx2.suse.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726295AbgINJhT (ORCPT ); Mon, 14 Sep 2020 05:37:19 -0400 X-Virus-Scanned: by amavisd-new at test-mx.suse.de Received: from relay2.suse.de (unknown [195.135.221.27]) by mx2.suse.de (Postfix) with ESMTP id 62A8BAF43; Mon, 14 Sep 2020 09:37:32 +0000 (UTC) From: Nikolay Borisov To: linux-btrfs@vger.kernel.org Cc: Nikolay Borisov Subject: [PATCH v2 6/9] btrfs: Promote extent_read_full_page to btrfs_readpage Date: Mon, 14 Sep 2020 12:37:08 +0300 Message-Id: <20200914093711.13523-7-nborisov@suse.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20200914093711.13523-1-nborisov@suse.com> References: <20200914093711.13523-1-nborisov@suse.com> Sender: linux-btrfs-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-btrfs@vger.kernel.org Now that btrfs_readpage is the only caller of extent_read_full_page the latter can be opencoded in the former. Use the occassion to rename __extent_read_full_page to extent_read_full_page. To facillitate this change submit_one_bio has to be exported as well. Signed-off-by: Nikolay Borisov Reviewed-by: Josef Bacik --- fs/btrfs/extent_io.c | 21 ++++----------------- fs/btrfs/extent_io.h | 5 ++++- fs/btrfs/inode.c | 9 ++++++++- 3 files changed, 16 insertions(+), 19 deletions(-) -- 2.17.1 diff --git a/fs/btrfs/extent_io.c b/fs/btrfs/extent_io.c index 355db40a1cb5..402b88ddcbca 100644 --- a/fs/btrfs/extent_io.c +++ b/fs/btrfs/extent_io.c @@ -160,8 +160,8 @@ static int add_extent_changeset(struct extent_state *state, unsigned bits, return ret; } -static int __must_check submit_one_bio(struct bio *bio, int mirror_num, - unsigned long bio_flags) +int __must_check submit_one_bio(struct bio *bio, int mirror_num, + unsigned long bio_flags) { blk_status_t ret = 0; struct extent_io_tree *tree = bio->bi_private; @@ -3365,9 +3365,8 @@ static inline void contiguous_readpages(struct page *pages[], int nr_pages, } } -static int __extent_read_full_page(struct page *page, struct bio **bio, - int mirror_num, unsigned long *bio_flags, - unsigned int read_flags) +int extent_read_full_page(struct page *page, struct bio **bio, int mirror_num, + unsigned long *bio_flags, unsigned int read_flags) { struct btrfs_inode *inode = BTRFS_I(page->mapping->host); u64 start = page_offset(page); @@ -3381,18 +3380,6 @@ static int __extent_read_full_page(struct page *page, struct bio **bio, return ret; } -int extent_read_full_page(struct page *page) -{ - struct bio *bio = NULL; - unsigned long bio_flags = 0; - int ret; - - ret = __extent_read_full_page(page, &bio, 0, &bio_flags, 0); - if (bio) - ret = submit_one_bio(bio, 0, bio_flags); - return ret; -} - static void update_nr_written(struct writeback_control *wbc, unsigned long nr_written) { diff --git a/fs/btrfs/extent_io.h b/fs/btrfs/extent_io.h index 0ccb2dabc291..8fec00c50846 100644 --- a/fs/btrfs/extent_io.h +++ b/fs/btrfs/extent_io.h @@ -193,7 +193,10 @@ typedef struct extent_map *(get_extent_t)(struct btrfs_inode *inode, int try_release_extent_mapping(struct page *page, gfp_t mask); int try_release_extent_buffer(struct page *page); -int extent_read_full_page(struct page *page); +int __must_check submit_one_bio(struct bio *bio, int mirror_num, + unsigned long bio_flags); +int extent_read_full_page(struct page *page, struct bio **bio, int mirror_num, + unsigned long *bio_flags, unsigned int read_flags); int extent_write_full_page(struct page *page, struct writeback_control *wbc); int extent_write_locked_range(struct inode *inode, u64 start, u64 end, int mode); diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c index e78099d1db34..f01066607901 100644 --- a/fs/btrfs/inode.c +++ b/fs/btrfs/inode.c @@ -8040,7 +8040,14 @@ static int btrfs_fiemap(struct inode *inode, struct fiemap_extent_info *fieinfo, int btrfs_readpage(struct file *file, struct page *page) { - return extent_read_full_page(page); + struct bio *bio = NULL; + unsigned long bio_flags = 0; + int ret; + + ret = extent_read_full_page(page, &bio, 0, &bio_flags, 0); + if (bio) + ret = submit_one_bio(bio, 0, bio_flags); + return ret; } static int btrfs_writepage(struct page *page, struct writeback_control *wbc) From patchwork Mon Sep 14 09:37:09 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nikolay Borisov X-Patchwork-Id: 11773409 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 689D46CA for ; Mon, 14 Sep 2020 09:37:28 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 488A32192A for ; Mon, 14 Sep 2020 09:37:28 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726394AbgINJh1 (ORCPT ); Mon, 14 Sep 2020 05:37:27 -0400 Received: from mx2.suse.de ([195.135.220.15]:41246 "EHLO mx2.suse.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726352AbgINJhT (ORCPT ); Mon, 14 Sep 2020 05:37:19 -0400 X-Virus-Scanned: by amavisd-new at test-mx.suse.de Received: from relay2.suse.de (unknown [195.135.221.27]) by mx2.suse.de (Postfix) with ESMTP id 9F87EAF74; Mon, 14 Sep 2020 09:37:32 +0000 (UTC) From: Nikolay Borisov To: linux-btrfs@vger.kernel.org Cc: Nikolay Borisov Subject: [PATCH v2 7/9] btrfs: Sink mirror_num argument in extent_read_full_page Date: Mon, 14 Sep 2020 12:37:09 +0300 Message-Id: <20200914093711.13523-8-nborisov@suse.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20200914093711.13523-1-nborisov@suse.com> References: <20200914093711.13523-1-nborisov@suse.com> Sender: linux-btrfs-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-btrfs@vger.kernel.org It's always set to 0 from the sole caller - btrfs_readpage. Signed-off-by: Nikolay Borisov Reviewed-by: Josef Bacik --- fs/btrfs/extent_io.c | 5 ++--- fs/btrfs/extent_io.h | 2 +- fs/btrfs/inode.c | 2 +- 3 files changed, 4 insertions(+), 5 deletions(-) -- 2.17.1 diff --git a/fs/btrfs/extent_io.c b/fs/btrfs/extent_io.c index 402b88ddcbca..f43827bee7e6 100644 --- a/fs/btrfs/extent_io.c +++ b/fs/btrfs/extent_io.c @@ -3365,7 +3365,7 @@ static inline void contiguous_readpages(struct page *pages[], int nr_pages, } } -int extent_read_full_page(struct page *page, struct bio **bio, int mirror_num, +int extent_read_full_page(struct page *page, struct bio **bio, unsigned long *bio_flags, unsigned int read_flags) { struct btrfs_inode *inode = BTRFS_I(page->mapping->host); @@ -3375,8 +3375,7 @@ int extent_read_full_page(struct page *page, struct bio **bio, int mirror_num, btrfs_lock_and_flush_ordered_range(inode, start, end, NULL); - ret = __do_readpage(page, NULL, bio, mirror_num, bio_flags, read_flags, - NULL); + ret = __do_readpage(page, NULL, bio, 0, bio_flags, read_flags, NULL); return ret; } diff --git a/fs/btrfs/extent_io.h b/fs/btrfs/extent_io.h index 8fec00c50846..3562c9203de3 100644 --- a/fs/btrfs/extent_io.h +++ b/fs/btrfs/extent_io.h @@ -195,7 +195,7 @@ int try_release_extent_buffer(struct page *page); int __must_check submit_one_bio(struct bio *bio, int mirror_num, unsigned long bio_flags); -int extent_read_full_page(struct page *page, struct bio **bio, int mirror_num, +int extent_read_full_page(struct page *page, struct bio **bio, unsigned long *bio_flags, unsigned int read_flags); int extent_write_full_page(struct page *page, struct writeback_control *wbc); int extent_write_locked_range(struct inode *inode, u64 start, u64 end, diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c index f01066607901..31a154c7fb00 100644 --- a/fs/btrfs/inode.c +++ b/fs/btrfs/inode.c @@ -8044,7 +8044,7 @@ int btrfs_readpage(struct file *file, struct page *page) unsigned long bio_flags = 0; int ret; - ret = extent_read_full_page(page, &bio, 0, &bio_flags, 0); + ret = extent_read_full_page(page, &bio, &bio_flags, 0); if (bio) ret = submit_one_bio(bio, 0, bio_flags); return ret; From patchwork Mon Sep 14 09:37:10 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nikolay Borisov X-Patchwork-Id: 11773407 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 75A256CA for ; Mon, 14 Sep 2020 09:37:25 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 5996521BE5 for ; Mon, 14 Sep 2020 09:37:25 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726392AbgINJhY (ORCPT ); Mon, 14 Sep 2020 05:37:24 -0400 Received: from mx2.suse.de ([195.135.220.15]:41244 "EHLO mx2.suse.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726343AbgINJhT (ORCPT ); Mon, 14 Sep 2020 05:37:19 -0400 X-Virus-Scanned: by amavisd-new at test-mx.suse.de Received: from relay2.suse.de (unknown [195.135.221.27]) by mx2.suse.de (Postfix) with ESMTP id DA791AF76; Mon, 14 Sep 2020 09:37:32 +0000 (UTC) From: Nikolay Borisov To: linux-btrfs@vger.kernel.org Cc: Nikolay Borisov Subject: [PATCH v2 8/9] btrfs: Sink read_flags argument into extent_read_full_page Date: Mon, 14 Sep 2020 12:37:10 +0300 Message-Id: <20200914093711.13523-9-nborisov@suse.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20200914093711.13523-1-nborisov@suse.com> References: <20200914093711.13523-1-nborisov@suse.com> Sender: linux-btrfs-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-btrfs@vger.kernel.org It's always set to 0 by its sole caller - btrfs_readpage. Simply remove it. Signed-off-by: Nikolay Borisov Reviewed-by: Josef Bacik --- fs/btrfs/extent_io.c | 4 ++-- fs/btrfs/extent_io.h | 2 +- fs/btrfs/inode.c | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) -- 2.17.1 diff --git a/fs/btrfs/extent_io.c b/fs/btrfs/extent_io.c index f43827bee7e6..1c959d66195c 100644 --- a/fs/btrfs/extent_io.c +++ b/fs/btrfs/extent_io.c @@ -3366,7 +3366,7 @@ static inline void contiguous_readpages(struct page *pages[], int nr_pages, } int extent_read_full_page(struct page *page, struct bio **bio, - unsigned long *bio_flags, unsigned int read_flags) + unsigned long *bio_flags) { struct btrfs_inode *inode = BTRFS_I(page->mapping->host); u64 start = page_offset(page); @@ -3375,7 +3375,7 @@ int extent_read_full_page(struct page *page, struct bio **bio, btrfs_lock_and_flush_ordered_range(inode, start, end, NULL); - ret = __do_readpage(page, NULL, bio, 0, bio_flags, read_flags, NULL); + ret = __do_readpage(page, NULL, bio, 0, bio_flags, 0, NULL); return ret; } diff --git a/fs/btrfs/extent_io.h b/fs/btrfs/extent_io.h index 3562c9203de3..5fa248570145 100644 --- a/fs/btrfs/extent_io.h +++ b/fs/btrfs/extent_io.h @@ -196,7 +196,7 @@ int try_release_extent_buffer(struct page *page); int __must_check submit_one_bio(struct bio *bio, int mirror_num, unsigned long bio_flags); int extent_read_full_page(struct page *page, struct bio **bio, - unsigned long *bio_flags, unsigned int read_flags); + unsigned long *bio_flags); int extent_write_full_page(struct page *page, struct writeback_control *wbc); int extent_write_locked_range(struct inode *inode, u64 start, u64 end, int mode); diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c index 31a154c7fb00..c50a907742a1 100644 --- a/fs/btrfs/inode.c +++ b/fs/btrfs/inode.c @@ -8044,7 +8044,7 @@ int btrfs_readpage(struct file *file, struct page *page) unsigned long bio_flags = 0; int ret; - ret = extent_read_full_page(page, &bio, &bio_flags, 0); + ret = extent_read_full_page(page, &bio, &bio_flags); if (bio) ret = submit_one_bio(bio, 0, bio_flags); return ret; From patchwork Mon Sep 14 09:37:11 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nikolay Borisov X-Patchwork-Id: 11773419 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 62E926CA for ; Mon, 14 Sep 2020 09:37:34 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 42B2921BE5 for ; Mon, 14 Sep 2020 09:37:34 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726346AbgINJhd (ORCPT ); Mon, 14 Sep 2020 05:37:33 -0400 Received: from mx2.suse.de ([195.135.220.15]:41242 "EHLO mx2.suse.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726329AbgINJhS (ORCPT ); Mon, 14 Sep 2020 05:37:18 -0400 X-Virus-Scanned: by amavisd-new at test-mx.suse.de Received: from relay2.suse.de (unknown [195.135.221.27]) by mx2.suse.de (Postfix) with ESMTP id 22A3DABB2; Mon, 14 Sep 2020 09:37:33 +0000 (UTC) From: Nikolay Borisov To: linux-btrfs@vger.kernel.org Cc: Nikolay Borisov Subject: [PATCH v2 9/9] btrfs: Sink mirror_num argument in __do_readpage Date: Mon, 14 Sep 2020 12:37:11 +0300 Message-Id: <20200914093711.13523-10-nborisov@suse.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20200914093711.13523-1-nborisov@suse.com> References: <20200914093711.13523-1-nborisov@suse.com> Sender: linux-btrfs-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-btrfs@vger.kernel.org It's always set to 0 by the 2 callers so move it inside __do_readpage. Signed-off-by: Nikolay Borisov Reviewed-by: Josef Bacik --- fs/btrfs/extent_io.c | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) -- 2.17.1 diff --git a/fs/btrfs/extent_io.c b/fs/btrfs/extent_io.c index 1c959d66195c..1ef857c0d784 100644 --- a/fs/btrfs/extent_io.c +++ b/fs/btrfs/extent_io.c @@ -3142,9 +3142,8 @@ __get_extent_map(struct inode *inode, struct page *page, size_t pg_offset, * return 0 on success, otherwise return error */ static int __do_readpage(struct page *page, struct extent_map **em_cached, - struct bio **bio, int mirror_num, - unsigned long *bio_flags, unsigned int read_flags, - u64 *prev_em_start) + struct bio **bio, unsigned long *bio_flags, + unsigned int read_flags, u64 *prev_em_start) { struct inode *inode = page->mapping->host; u64 start = page_offset(page); @@ -3322,7 +3321,7 @@ static int __do_readpage(struct page *page, struct extent_map **em_cached, ret = submit_extent_page(REQ_OP_READ | read_flags, NULL, page, offset, disk_io_size, pg_offset, bio, - end_bio_extent_readpage, mirror_num, + end_bio_extent_readpage, 0, *bio_flags, this_bio_flag, force_bio_submit); @@ -3359,7 +3358,7 @@ static inline void contiguous_readpages(struct page *pages[], int nr_pages, btrfs_lock_and_flush_ordered_range(inode, start, end, NULL); for (index = 0; index < nr_pages; index++) { - __do_readpage(pages[index], em_cached, bio, 0, bio_flags, + __do_readpage(pages[index], em_cached, bio, bio_flags, REQ_RAHEAD, prev_em_start); put_page(pages[index]); } @@ -3375,7 +3374,7 @@ int extent_read_full_page(struct page *page, struct bio **bio, btrfs_lock_and_flush_ordered_range(inode, start, end, NULL); - ret = __do_readpage(page, NULL, bio, 0, bio_flags, 0, NULL); + ret = __do_readpage(page, NULL, bio, bio_flags, 0, NULL); return ret; }