* [PATCH 00/10] Cleanup unnecessary get_extent parameters
@ 2017-11-06 19:30 David Sterba
2017-11-06 19:30 ` [PATCH 01/10] btrfs: sink get_extent parameter to extent_writepages David Sterba
` (10 more replies)
0 siblings, 11 replies; 13+ messages in thread
From: David Sterba @ 2017-11-06 19:30 UTC (permalink / raw)
To: linux-btrfs; +Cc: David Sterba
There are several functions that take a generic get_extent parameter, but not
all of them use it to distinguish between btree_get_exnent (for metadata) and
btrfs_get_extent (for data). This is namely extent_read_full_page and
__do_readpage.
The rest can be cleaned up so that the desired get_extent callback is used
directly. The patchset does that incrementally so each change is clear.
The difference in binary code size is not that impressive:
text data bss dec hex filename
985353 75124 18560 1079037 1076fd pre/btrfs.ko
985193 75124 18560 1078877 10765d post/btrfs.ko
but the estimated stack consumption savings are about 64 bytes, and it could be
more if we calculate cummulative effect when more than one reduced function is
in the callchain:
-extent_io.c:btree_write_cache_pages 288 static
+extent_io.c:btree_write_cache_pages 280 static
-extent_io.c:extent_fiemap 264 dynamic,bounded
+extent_io.c:extent_fiemap 256 dynamic,bounded
-extent_io.c:extent_readpages 264 dynamic,bounded
+extent_io.c:extent_readpages 248 dynamic,bounded
-extent_io.c:extent_write_full_page 56 static
+extent_io.c:extent_write_full_page 48 static
-extent_io.c:extent_write_locked_range 200 static
+extent_io.c:extent_write_locked_range 192 static
-extent_io.c:extent_writepages 56 static
+extent_io.c:extent_writepages 48 static
-extent_io.c:get_extent_skip_holes 64 static
+extent_io.c:get_extent_skip_holes 56 static
(calculated with gcc -fstack-usage)
David Sterba (10):
btrfs: sink get_extent parameter to extent_writepages
btrfs: sink get_extent parameter to extent_write_locked_range
btrfs: sink get_extent parameter to extent_write_full_page
btrfs: drop get_extent from extent_page_data
btrfs: sink get_extent parameter to extent_fiemap
btrfs: sink get_extent parameter to get_extent_skip_holes
btrfs: sink get_extent parameter to extent_readpages
btrfs: sink get_extent parameter to __extent_readpages
btrfs: sink get_extent parameter to __do_contiguous_readpages
btrfs: sink get_extent parameter to read_extent_buffer_pages
fs/btrfs/disk-io.c | 8 ++++----
fs/btrfs/disk-io.h | 3 +++
fs/btrfs/extent_io.c | 55 ++++++++++++++++++++--------------------------------
fs/btrfs/extent_io.h | 12 ++++--------
fs/btrfs/inode.c | 10 ++++------
5 files changed, 36 insertions(+), 52 deletions(-)
--
2.14.3
^ permalink raw reply [flat|nested] 13+ messages in thread
* [PATCH 01/10] btrfs: sink get_extent parameter to extent_writepages
2017-11-06 19:30 [PATCH 00/10] Cleanup unnecessary get_extent parameters David Sterba
@ 2017-11-06 19:30 ` David Sterba
2017-11-06 19:30 ` [PATCH 02/10] btrfs: sink get_extent parameter to extent_write_locked_range David Sterba
` (9 subsequent siblings)
10 siblings, 0 replies; 13+ messages in thread
From: David Sterba @ 2017-11-06 19:30 UTC (permalink / raw)
To: linux-btrfs; +Cc: David Sterba
There's only one caller.
Signed-off-by: David Sterba <dsterba@suse.com>
---
fs/btrfs/extent_io.c | 3 +--
fs/btrfs/extent_io.h | 1 -
fs/btrfs/inode.c | 2 +-
3 files changed, 2 insertions(+), 4 deletions(-)
diff --git a/fs/btrfs/extent_io.c b/fs/btrfs/extent_io.c
index ea412243c68d..12305542ed2b 100644
--- a/fs/btrfs/extent_io.c
+++ b/fs/btrfs/extent_io.c
@@ -4131,14 +4131,13 @@ int extent_write_locked_range(struct extent_io_tree *tree, struct inode *inode,
int extent_writepages(struct extent_io_tree *tree,
struct address_space *mapping,
- get_extent_t *get_extent,
struct writeback_control *wbc)
{
int ret = 0;
struct extent_page_data epd = {
.bio = NULL,
.tree = tree,
- .get_extent = get_extent,
+ .get_extent = btrfs_get_extent,
.extent_locked = 0,
.sync_io = wbc->sync_mode == WB_SYNC_ALL,
};
diff --git a/fs/btrfs/extent_io.h b/fs/btrfs/extent_io.h
index d8b27af7101e..7e1b730045c5 100644
--- a/fs/btrfs/extent_io.h
+++ b/fs/btrfs/extent_io.h
@@ -407,7 +407,6 @@ int extent_write_locked_range(struct extent_io_tree *tree, struct inode *inode,
int mode);
int extent_writepages(struct extent_io_tree *tree,
struct address_space *mapping,
- get_extent_t *get_extent,
struct writeback_control *wbc);
int btree_write_cache_pages(struct address_space *mapping,
struct writeback_control *wbc);
diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c
index 88cd15fc34d4..d626f209b22f 100644
--- a/fs/btrfs/inode.c
+++ b/fs/btrfs/inode.c
@@ -8884,7 +8884,7 @@ static int btrfs_writepages(struct address_space *mapping,
struct extent_io_tree *tree;
tree = &BTRFS_I(mapping->host)->io_tree;
- return extent_writepages(tree, mapping, btrfs_get_extent, wbc);
+ return extent_writepages(tree, mapping, wbc);
}
static int
--
2.14.3
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [PATCH 02/10] btrfs: sink get_extent parameter to extent_write_locked_range
2017-11-06 19:30 [PATCH 00/10] Cleanup unnecessary get_extent parameters David Sterba
2017-11-06 19:30 ` [PATCH 01/10] btrfs: sink get_extent parameter to extent_writepages David Sterba
@ 2017-11-06 19:30 ` David Sterba
2017-11-06 19:30 ` [PATCH 03/10] btrfs: sink get_extent parameter to extent_write_full_page David Sterba
` (8 subsequent siblings)
10 siblings, 0 replies; 13+ messages in thread
From: David Sterba @ 2017-11-06 19:30 UTC (permalink / raw)
To: linux-btrfs; +Cc: David Sterba
There's only one caller.
Signed-off-by: David Sterba <dsterba@suse.com>
---
fs/btrfs/extent_io.c | 5 ++---
fs/btrfs/extent_io.h | 3 +--
fs/btrfs/inode.c | 1 -
3 files changed, 3 insertions(+), 6 deletions(-)
diff --git a/fs/btrfs/extent_io.c b/fs/btrfs/extent_io.c
index 12305542ed2b..42ecd975e074 100644
--- a/fs/btrfs/extent_io.c
+++ b/fs/btrfs/extent_io.c
@@ -4087,8 +4087,7 @@ int extent_write_full_page(struct extent_io_tree *tree, struct page *page,
}
int extent_write_locked_range(struct extent_io_tree *tree, struct inode *inode,
- u64 start, u64 end, get_extent_t *get_extent,
- int mode)
+ u64 start, u64 end, int mode)
{
int ret = 0;
struct address_space *mapping = inode->i_mapping;
@@ -4099,7 +4098,7 @@ int extent_write_locked_range(struct extent_io_tree *tree, struct inode *inode,
struct extent_page_data epd = {
.bio = NULL,
.tree = tree,
- .get_extent = get_extent,
+ .get_extent = btrfs_get_extent,
.extent_locked = 1,
.sync_io = mode == WB_SYNC_ALL,
};
diff --git a/fs/btrfs/extent_io.h b/fs/btrfs/extent_io.h
index 7e1b730045c5..a1f74d9b8dda 100644
--- a/fs/btrfs/extent_io.h
+++ b/fs/btrfs/extent_io.h
@@ -403,8 +403,7 @@ int extent_write_full_page(struct extent_io_tree *tree, struct page *page,
get_extent_t *get_extent,
struct writeback_control *wbc);
int extent_write_locked_range(struct extent_io_tree *tree, struct inode *inode,
- u64 start, u64 end, get_extent_t *get_extent,
- int mode);
+ u64 start, u64 end, int mode);
int extent_writepages(struct extent_io_tree *tree,
struct address_space *mapping,
struct writeback_control *wbc);
diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c
index d626f209b22f..f5e706c09af1 100644
--- a/fs/btrfs/inode.c
+++ b/fs/btrfs/inode.c
@@ -769,7 +769,6 @@ static noinline void submit_compressed_extents(struct inode *inode,
inode, async_extent->start,
async_extent->start +
async_extent->ram_size - 1,
- btrfs_get_extent,
WB_SYNC_ALL);
else if (ret)
unlock_page(async_cow->locked_page);
--
2.14.3
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [PATCH 03/10] btrfs: sink get_extent parameter to extent_write_full_page
2017-11-06 19:30 [PATCH 00/10] Cleanup unnecessary get_extent parameters David Sterba
2017-11-06 19:30 ` [PATCH 01/10] btrfs: sink get_extent parameter to extent_writepages David Sterba
2017-11-06 19:30 ` [PATCH 02/10] btrfs: sink get_extent parameter to extent_write_locked_range David Sterba
@ 2017-11-06 19:30 ` David Sterba
2017-11-06 19:30 ` [PATCH 04/10] btrfs: drop get_extent from extent_page_data David Sterba
` (7 subsequent siblings)
10 siblings, 0 replies; 13+ messages in thread
From: David Sterba @ 2017-11-06 19:30 UTC (permalink / raw)
To: linux-btrfs; +Cc: David Sterba
There's only one caller.
Signed-off-by: David Sterba <dsterba@suse.com>
---
fs/btrfs/extent_io.c | 3 +--
fs/btrfs/extent_io.h | 1 -
fs/btrfs/inode.c | 2 +-
3 files changed, 2 insertions(+), 4 deletions(-)
diff --git a/fs/btrfs/extent_io.c b/fs/btrfs/extent_io.c
index 42ecd975e074..76d1b307aeaa 100644
--- a/fs/btrfs/extent_io.c
+++ b/fs/btrfs/extent_io.c
@@ -4068,14 +4068,13 @@ static noinline void flush_write_bio(void *data)
}
int extent_write_full_page(struct extent_io_tree *tree, struct page *page,
- get_extent_t *get_extent,
struct writeback_control *wbc)
{
int ret;
struct extent_page_data epd = {
.bio = NULL,
.tree = tree,
- .get_extent = get_extent,
+ .get_extent = btrfs_get_extent,
.extent_locked = 0,
.sync_io = wbc->sync_mode == WB_SYNC_ALL,
};
diff --git a/fs/btrfs/extent_io.h b/fs/btrfs/extent_io.h
index a1f74d9b8dda..b095aa787857 100644
--- a/fs/btrfs/extent_io.h
+++ b/fs/btrfs/extent_io.h
@@ -400,7 +400,6 @@ int find_first_extent_bit(struct extent_io_tree *tree, u64 start,
int extent_invalidatepage(struct extent_io_tree *tree,
struct page *page, unsigned long offset);
int extent_write_full_page(struct extent_io_tree *tree, struct page *page,
- get_extent_t *get_extent,
struct writeback_control *wbc);
int extent_write_locked_range(struct extent_io_tree *tree, struct inode *inode,
u64 start, u64 end, int mode);
diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c
index f5e706c09af1..31f9552bd78a 100644
--- a/fs/btrfs/inode.c
+++ b/fs/btrfs/inode.c
@@ -8872,7 +8872,7 @@ static int btrfs_writepage(struct page *page, struct writeback_control *wbc)
return AOP_WRITEPAGE_ACTIVATE;
}
tree = &BTRFS_I(page->mapping->host)->io_tree;
- ret = extent_write_full_page(tree, page, btrfs_get_extent, wbc);
+ ret = extent_write_full_page(tree, page, wbc);
btrfs_add_delayed_iput(inode);
return ret;
}
--
2.14.3
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [PATCH 04/10] btrfs: drop get_extent from extent_page_data
2017-11-06 19:30 [PATCH 00/10] Cleanup unnecessary get_extent parameters David Sterba
` (2 preceding siblings ...)
2017-11-06 19:30 ` [PATCH 03/10] btrfs: sink get_extent parameter to extent_write_full_page David Sterba
@ 2017-11-06 19:30 ` David Sterba
2017-11-06 19:30 ` [PATCH 05/10] btrfs: sink get_extent parameter to extent_fiemap David Sterba
` (6 subsequent siblings)
10 siblings, 0 replies; 13+ messages in thread
From: David Sterba @ 2017-11-06 19:30 UTC (permalink / raw)
To: linux-btrfs; +Cc: David Sterba
Previous patches cleaned up all places where
extent_page_data::get_extent was set and it was btrfs_get_extent all the
time, so we can simply call that instead.
This also reduces size of extent_page_data by 8 bytes which has positive
effect on stack consumption on various functions on the write out path.
Signed-off-by: David Sterba <dsterba@suse.com>
---
fs/btrfs/extent_io.c | 7 +------
1 file changed, 1 insertion(+), 6 deletions(-)
diff --git a/fs/btrfs/extent_io.c b/fs/btrfs/extent_io.c
index 76d1b307aeaa..8f1d98bc11d0 100644
--- a/fs/btrfs/extent_io.c
+++ b/fs/btrfs/extent_io.c
@@ -108,8 +108,6 @@ struct tree_entry {
struct extent_page_data {
struct bio *bio;
struct extent_io_tree *tree;
- get_extent_t *get_extent;
-
/* tells writepage not to lock the state bits for this range
* it still does the unlocking
*/
@@ -3372,7 +3370,7 @@ static noinline_for_stack int __extent_writepage_io(struct inode *inode,
page_end, NULL, 1);
break;
}
- em = epd->get_extent(BTRFS_I(inode), page, pg_offset, cur,
+ em = btrfs_get_extent(BTRFS_I(inode), page, pg_offset, cur,
end - cur + 1, 1);
if (IS_ERR_OR_NULL(em)) {
SetPageError(page);
@@ -4074,7 +4072,6 @@ int extent_write_full_page(struct extent_io_tree *tree, struct page *page,
struct extent_page_data epd = {
.bio = NULL,
.tree = tree,
- .get_extent = btrfs_get_extent,
.extent_locked = 0,
.sync_io = wbc->sync_mode == WB_SYNC_ALL,
};
@@ -4097,7 +4094,6 @@ int extent_write_locked_range(struct extent_io_tree *tree, struct inode *inode,
struct extent_page_data epd = {
.bio = NULL,
.tree = tree,
- .get_extent = btrfs_get_extent,
.extent_locked = 1,
.sync_io = mode == WB_SYNC_ALL,
};
@@ -4135,7 +4131,6 @@ int extent_writepages(struct extent_io_tree *tree,
struct extent_page_data epd = {
.bio = NULL,
.tree = tree,
- .get_extent = btrfs_get_extent,
.extent_locked = 0,
.sync_io = wbc->sync_mode == WB_SYNC_ALL,
};
--
2.14.3
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [PATCH 05/10] btrfs: sink get_extent parameter to extent_fiemap
2017-11-06 19:30 [PATCH 00/10] Cleanup unnecessary get_extent parameters David Sterba
` (3 preceding siblings ...)
2017-11-06 19:30 ` [PATCH 04/10] btrfs: drop get_extent from extent_page_data David Sterba
@ 2017-11-06 19:30 ` David Sterba
2017-11-06 19:30 ` [PATCH 06/10] btrfs: sink get_extent parameter to get_extent_skip_holes David Sterba
` (5 subsequent siblings)
10 siblings, 0 replies; 13+ messages in thread
From: David Sterba @ 2017-11-06 19:30 UTC (permalink / raw)
To: linux-btrfs; +Cc: David Sterba
All callers pass btrfs_get_extent_fiemap and we don't expect anything
else in the context of extent_fiemap.
Signed-off-by: David Sterba <dsterba@suse.com>
---
fs/btrfs/extent_io.c | 6 +++---
fs/btrfs/extent_io.h | 2 +-
fs/btrfs/inode.c | 2 +-
3 files changed, 5 insertions(+), 5 deletions(-)
diff --git a/fs/btrfs/extent_io.c b/fs/btrfs/extent_io.c
index 8f1d98bc11d0..a2815f335d38 100644
--- a/fs/btrfs/extent_io.c
+++ b/fs/btrfs/extent_io.c
@@ -4451,7 +4451,7 @@ static int emit_last_fiemap_cache(struct btrfs_fs_info *fs_info,
}
int extent_fiemap(struct inode *inode, struct fiemap_extent_info *fieinfo,
- __u64 start, __u64 len, get_extent_t *get_extent)
+ __u64 start, __u64 len)
{
int ret = 0;
u64 off = start;
@@ -4534,7 +4534,7 @@ int extent_fiemap(struct inode *inode, struct fiemap_extent_info *fieinfo,
&cached_state);
em = get_extent_skip_holes(inode, start, last_for_get_extent,
- get_extent);
+ btrfs_get_extent_fiemap);
if (!em)
goto out;
if (IS_ERR(em)) {
@@ -4623,7 +4623,7 @@ int extent_fiemap(struct inode *inode, struct fiemap_extent_info *fieinfo,
/* now scan forward to see if this is really the last extent. */
em = get_extent_skip_holes(inode, off, last_for_get_extent,
- get_extent);
+ btrfs_get_extent_fiemap);
if (IS_ERR(em)) {
ret = PTR_ERR(em);
goto out;
diff --git a/fs/btrfs/extent_io.h b/fs/btrfs/extent_io.h
index b095aa787857..917b24bc7547 100644
--- a/fs/btrfs/extent_io.h
+++ b/fs/btrfs/extent_io.h
@@ -413,7 +413,7 @@ int extent_readpages(struct extent_io_tree *tree,
struct list_head *pages, unsigned nr_pages,
get_extent_t get_extent);
int extent_fiemap(struct inode *inode, struct fiemap_extent_info *fieinfo,
- __u64 start, __u64 len, get_extent_t *get_extent);
+ __u64 start, __u64 len);
void set_page_extent_mapped(struct page *page);
struct extent_buffer *alloc_extent_buffer(struct btrfs_fs_info *fs_info,
diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c
index 31f9552bd78a..588c269bfc13 100644
--- a/fs/btrfs/inode.c
+++ b/fs/btrfs/inode.c
@@ -8840,7 +8840,7 @@ static int btrfs_fiemap(struct inode *inode, struct fiemap_extent_info *fieinfo,
if (ret)
return ret;
- return extent_fiemap(inode, fieinfo, start, len, btrfs_get_extent_fiemap);
+ return extent_fiemap(inode, fieinfo, start, len);
}
int btrfs_readpage(struct file *file, struct page *page)
--
2.14.3
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [PATCH 06/10] btrfs: sink get_extent parameter to get_extent_skip_holes
2017-11-06 19:30 [PATCH 00/10] Cleanup unnecessary get_extent parameters David Sterba
` (4 preceding siblings ...)
2017-11-06 19:30 ` [PATCH 05/10] btrfs: sink get_extent parameter to extent_fiemap David Sterba
@ 2017-11-06 19:30 ` David Sterba
2017-11-06 19:30 ` [PATCH 07/10] btrfs: sink get_extent parameter to extent_readpages David Sterba
` (4 subsequent siblings)
10 siblings, 0 replies; 13+ messages in thread
From: David Sterba @ 2017-11-06 19:30 UTC (permalink / raw)
To: linux-btrfs; +Cc: David Sterba
All callers pass btrfs_get_extent_fiemap and get_extent_skip_holes
itself is used only as a fiemap helper.
Signed-off-by: David Sterba <dsterba@suse.com>
---
fs/btrfs/extent_io.c | 13 +++++--------
1 file changed, 5 insertions(+), 8 deletions(-)
diff --git a/fs/btrfs/extent_io.c b/fs/btrfs/extent_io.c
index a2815f335d38..c30694f57d02 100644
--- a/fs/btrfs/extent_io.c
+++ b/fs/btrfs/extent_io.c
@@ -4302,9 +4302,7 @@ int try_release_extent_mapping(struct extent_map_tree *map,
* This maps until we find something past 'last'
*/
static struct extent_map *get_extent_skip_holes(struct inode *inode,
- u64 offset,
- u64 last,
- get_extent_t *get_extent)
+ u64 offset, u64 last)
{
u64 sectorsize = btrfs_inode_sectorsize(inode);
struct extent_map *em;
@@ -4318,7 +4316,8 @@ static struct extent_map *get_extent_skip_holes(struct inode *inode,
if (len == 0)
break;
len = ALIGN(len, sectorsize);
- em = get_extent(BTRFS_I(inode), NULL, 0, offset, len, 0);
+ em = btrfs_get_extent_fiemap(BTRFS_I(inode), NULL, 0, offset,
+ len, 0);
if (IS_ERR_OR_NULL(em))
return em;
@@ -4533,8 +4532,7 @@ int extent_fiemap(struct inode *inode, struct fiemap_extent_info *fieinfo,
lock_extent_bits(&BTRFS_I(inode)->io_tree, start, start + len - 1,
&cached_state);
- em = get_extent_skip_holes(inode, start, last_for_get_extent,
- btrfs_get_extent_fiemap);
+ em = get_extent_skip_holes(inode, start, last_for_get_extent);
if (!em)
goto out;
if (IS_ERR(em)) {
@@ -4622,8 +4620,7 @@ int extent_fiemap(struct inode *inode, struct fiemap_extent_info *fieinfo,
}
/* now scan forward to see if this is really the last extent. */
- em = get_extent_skip_holes(inode, off, last_for_get_extent,
- btrfs_get_extent_fiemap);
+ em = get_extent_skip_holes(inode, off, last_for_get_extent);
if (IS_ERR(em)) {
ret = PTR_ERR(em);
goto out;
--
2.14.3
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [PATCH 07/10] btrfs: sink get_extent parameter to extent_readpages
2017-11-06 19:30 [PATCH 00/10] Cleanup unnecessary get_extent parameters David Sterba
` (5 preceding siblings ...)
2017-11-06 19:30 ` [PATCH 06/10] btrfs: sink get_extent parameter to get_extent_skip_holes David Sterba
@ 2017-11-06 19:30 ` David Sterba
2017-11-06 19:31 ` [PATCH 08/10] btrfs: sink get_extent parameter to __extent_readpages David Sterba
` (3 subsequent siblings)
10 siblings, 0 replies; 13+ messages in thread
From: David Sterba @ 2017-11-06 19:30 UTC (permalink / raw)
To: linux-btrfs; +Cc: David Sterba
There's only one caller that passes btrfs_get_extent.
Signed-off-by: David Sterba <dsterba@suse.com>
---
fs/btrfs/extent_io.c | 11 +++++------
fs/btrfs/extent_io.h | 3 +--
fs/btrfs/inode.c | 3 +--
3 files changed, 7 insertions(+), 10 deletions(-)
diff --git a/fs/btrfs/extent_io.c b/fs/btrfs/extent_io.c
index c30694f57d02..1140ce4d321a 100644
--- a/fs/btrfs/extent_io.c
+++ b/fs/btrfs/extent_io.c
@@ -4143,8 +4143,7 @@ int extent_writepages(struct extent_io_tree *tree,
int extent_readpages(struct extent_io_tree *tree,
struct address_space *mapping,
- struct list_head *pages, unsigned nr_pages,
- get_extent_t get_extent)
+ struct list_head *pages, unsigned nr_pages)
{
struct bio *bio = NULL;
unsigned page_idx;
@@ -4170,13 +4169,13 @@ int extent_readpages(struct extent_io_tree *tree,
pagepool[nr++] = page;
if (nr < ARRAY_SIZE(pagepool))
continue;
- __extent_readpages(tree, pagepool, nr, get_extent, &em_cached,
- &bio, &bio_flags, &prev_em_start);
+ __extent_readpages(tree, pagepool, nr, btrfs_get_extent,
+ &em_cached, &bio, &bio_flags, &prev_em_start);
nr = 0;
}
if (nr)
- __extent_readpages(tree, pagepool, nr, get_extent, &em_cached,
- &bio, &bio_flags, &prev_em_start);
+ __extent_readpages(tree, pagepool, nr, btrfs_get_extent,
+ &em_cached, &bio, &bio_flags, &prev_em_start);
if (em_cached)
free_extent_map(em_cached);
diff --git a/fs/btrfs/extent_io.h b/fs/btrfs/extent_io.h
index 917b24bc7547..5295deb8a153 100644
--- a/fs/btrfs/extent_io.h
+++ b/fs/btrfs/extent_io.h
@@ -410,8 +410,7 @@ int btree_write_cache_pages(struct address_space *mapping,
struct writeback_control *wbc);
int extent_readpages(struct extent_io_tree *tree,
struct address_space *mapping,
- struct list_head *pages, unsigned nr_pages,
- get_extent_t get_extent);
+ struct list_head *pages, unsigned nr_pages);
int extent_fiemap(struct inode *inode, struct fiemap_extent_info *fieinfo,
__u64 start, __u64 len);
void set_page_extent_mapped(struct page *page);
diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c
index 588c269bfc13..ebdf2b07bb20 100644
--- a/fs/btrfs/inode.c
+++ b/fs/btrfs/inode.c
@@ -8892,8 +8892,7 @@ btrfs_readpages(struct file *file, struct address_space *mapping,
{
struct extent_io_tree *tree;
tree = &BTRFS_I(mapping->host)->io_tree;
- return extent_readpages(tree, mapping, pages, nr_pages,
- btrfs_get_extent);
+ return extent_readpages(tree, mapping, pages, nr_pages);
}
static int __btrfs_releasepage(struct page *page, gfp_t gfp_flags)
{
--
2.14.3
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [PATCH 08/10] btrfs: sink get_extent parameter to __extent_readpages
2017-11-06 19:30 [PATCH 00/10] Cleanup unnecessary get_extent parameters David Sterba
` (6 preceding siblings ...)
2017-11-06 19:30 ` [PATCH 07/10] btrfs: sink get_extent parameter to extent_readpages David Sterba
@ 2017-11-06 19:31 ` David Sterba
2017-11-06 19:31 ` [PATCH 09/10] btrfs: sink get_extent parameter to __do_contiguous_readpages David Sterba
` (2 subsequent siblings)
10 siblings, 0 replies; 13+ messages in thread
From: David Sterba @ 2017-11-06 19:31 UTC (permalink / raw)
To: linux-btrfs; +Cc: David Sterba
All callers pass btrfs_get_extent.
Signed-off-by: David Sterba <dsterba@suse.com>
---
fs/btrfs/extent_io.c | 15 ++++++++-------
1 file changed, 8 insertions(+), 7 deletions(-)
diff --git a/fs/btrfs/extent_io.c b/fs/btrfs/extent_io.c
index 1140ce4d321a..a266239716f7 100644
--- a/fs/btrfs/extent_io.c
+++ b/fs/btrfs/extent_io.c
@@ -3120,7 +3120,7 @@ static inline void __do_contiguous_readpages(struct extent_io_tree *tree,
static void __extent_readpages(struct extent_io_tree *tree,
struct page *pages[],
- int nr_pages, get_extent_t *get_extent,
+ int nr_pages,
struct extent_map **em_cached,
struct bio **bio, unsigned long *bio_flags,
u64 *prev_em_start)
@@ -3142,7 +3142,8 @@ static void __extent_readpages(struct extent_io_tree *tree,
} else {
__do_contiguous_readpages(tree, &pages[first_index],
index - first_index, start,
- end, get_extent, em_cached,
+ end, btrfs_get_extent,
+ em_cached,
bio, bio_flags,
prev_em_start);
start = page_start;
@@ -3154,7 +3155,7 @@ static void __extent_readpages(struct extent_io_tree *tree,
if (end)
__do_contiguous_readpages(tree, &pages[first_index],
index - first_index, start,
- end, get_extent, em_cached, bio,
+ end, btrfs_get_extent, em_cached, bio,
bio_flags, prev_em_start);
}
@@ -4169,13 +4170,13 @@ int extent_readpages(struct extent_io_tree *tree,
pagepool[nr++] = page;
if (nr < ARRAY_SIZE(pagepool))
continue;
- __extent_readpages(tree, pagepool, nr, btrfs_get_extent,
- &em_cached, &bio, &bio_flags, &prev_em_start);
+ __extent_readpages(tree, pagepool, nr, &em_cached, &bio,
+ &bio_flags, &prev_em_start);
nr = 0;
}
if (nr)
- __extent_readpages(tree, pagepool, nr, btrfs_get_extent,
- &em_cached, &bio, &bio_flags, &prev_em_start);
+ __extent_readpages(tree, pagepool, nr, &em_cached, &bio,
+ &bio_flags, &prev_em_start);
if (em_cached)
free_extent_map(em_cached);
--
2.14.3
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [PATCH 09/10] btrfs: sink get_extent parameter to __do_contiguous_readpages
2017-11-06 19:30 [PATCH 00/10] Cleanup unnecessary get_extent parameters David Sterba
` (7 preceding siblings ...)
2017-11-06 19:31 ` [PATCH 08/10] btrfs: sink get_extent parameter to __extent_readpages David Sterba
@ 2017-11-06 19:31 ` David Sterba
2017-11-06 19:31 ` [PATCH 10/10] btrfs: sink get_extent parameter to read_extent_buffer_pages David Sterba
2017-11-06 21:26 ` [PATCH 00/10] Cleanup unnecessary get_extent parameters Nikolay Borisov
10 siblings, 0 replies; 13+ messages in thread
From: David Sterba @ 2017-11-06 19:31 UTC (permalink / raw)
To: linux-btrfs; +Cc: David Sterba
All callers pass btrfs_get_extent.
Signed-off-by: David Sterba <dsterba@suse.com>
---
fs/btrfs/extent_io.c | 10 ++++------
1 file changed, 4 insertions(+), 6 deletions(-)
diff --git a/fs/btrfs/extent_io.c b/fs/btrfs/extent_io.c
index a266239716f7..72620cf41423 100644
--- a/fs/btrfs/extent_io.c
+++ b/fs/btrfs/extent_io.c
@@ -3089,7 +3089,6 @@ static int __do_readpage(struct extent_io_tree *tree,
static inline void __do_contiguous_readpages(struct extent_io_tree *tree,
struct page *pages[], int nr_pages,
u64 start, u64 end,
- get_extent_t *get_extent,
struct extent_map **em_cached,
struct bio **bio,
unsigned long *bio_flags,
@@ -3112,8 +3111,8 @@ static inline void __do_contiguous_readpages(struct extent_io_tree *tree,
}
for (index = 0; index < nr_pages; index++) {
- __do_readpage(tree, pages[index], get_extent, em_cached, bio,
- 0, bio_flags, 0, prev_em_start);
+ __do_readpage(tree, pages[index], btrfs_get_extent, em_cached,
+ bio, 0, bio_flags, 0, prev_em_start);
put_page(pages[index]);
}
}
@@ -3142,8 +3141,7 @@ static void __extent_readpages(struct extent_io_tree *tree,
} else {
__do_contiguous_readpages(tree, &pages[first_index],
index - first_index, start,
- end, btrfs_get_extent,
- em_cached,
+ end, em_cached,
bio, bio_flags,
prev_em_start);
start = page_start;
@@ -3155,7 +3153,7 @@ static void __extent_readpages(struct extent_io_tree *tree,
if (end)
__do_contiguous_readpages(tree, &pages[first_index],
index - first_index, start,
- end, btrfs_get_extent, em_cached, bio,
+ end, em_cached, bio,
bio_flags, prev_em_start);
}
--
2.14.3
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [PATCH 10/10] btrfs: sink get_extent parameter to read_extent_buffer_pages
2017-11-06 19:30 [PATCH 00/10] Cleanup unnecessary get_extent parameters David Sterba
` (8 preceding siblings ...)
2017-11-06 19:31 ` [PATCH 09/10] btrfs: sink get_extent parameter to __do_contiguous_readpages David Sterba
@ 2017-11-06 19:31 ` David Sterba
2017-11-06 21:26 ` [PATCH 00/10] Cleanup unnecessary get_extent parameters Nikolay Borisov
10 siblings, 0 replies; 13+ messages in thread
From: David Sterba @ 2017-11-06 19:31 UTC (permalink / raw)
To: linux-btrfs; +Cc: David Sterba
All callers pass btree_get_extent, which needs to be exported.
Signed-off-by: David Sterba <dsterba@suse.com>
---
fs/btrfs/disk-io.c | 8 ++++----
fs/btrfs/disk-io.h | 3 +++
fs/btrfs/extent_io.c | 6 +++---
fs/btrfs/extent_io.h | 2 +-
4 files changed, 11 insertions(+), 8 deletions(-)
diff --git a/fs/btrfs/disk-io.c b/fs/btrfs/disk-io.c
index 5713c50959e0..149be7c5d237 100644
--- a/fs/btrfs/disk-io.c
+++ b/fs/btrfs/disk-io.c
@@ -220,7 +220,7 @@ void btrfs_set_buffer_lockdep_class(u64 objectid, struct extent_buffer *eb,
* extents on the btree inode are pretty simple, there's one extent
* that covers the entire device
*/
-static struct extent_map *btree_get_extent(struct btrfs_inode *inode,
+struct extent_map *btree_get_extent(struct btrfs_inode *inode,
struct page *page, size_t pg_offset, u64 start, u64 len,
int create)
{
@@ -455,7 +455,7 @@ static int btree_read_extent_buffer_pages(struct btrfs_fs_info *fs_info,
io_tree = &BTRFS_I(fs_info->btree_inode)->io_tree;
while (1) {
ret = read_extent_buffer_pages(io_tree, eb, WAIT_COMPLETE,
- btree_get_extent, mirror_num);
+ mirror_num);
if (!ret) {
if (!verify_parent_transid(io_tree, eb,
parent_transid, 0))
@@ -1012,7 +1012,7 @@ void readahead_tree_block(struct btrfs_fs_info *fs_info, u64 bytenr)
if (IS_ERR(buf))
return;
read_extent_buffer_pages(&BTRFS_I(btree_inode)->io_tree,
- buf, WAIT_NONE, btree_get_extent, 0);
+ buf, WAIT_NONE, 0);
free_extent_buffer(buf);
}
@@ -1031,7 +1031,7 @@ int reada_tree_block_flagged(struct btrfs_fs_info *fs_info, u64 bytenr,
set_bit(EXTENT_BUFFER_READAHEAD, &buf->bflags);
ret = read_extent_buffer_pages(io_tree, buf, WAIT_PAGE_LOCK,
- btree_get_extent, mirror_num);
+ mirror_num);
if (ret) {
free_extent_buffer(buf);
return ret;
diff --git a/fs/btrfs/disk-io.h b/fs/btrfs/disk-io.h
index 7f7c35d6347a..301151a50ac1 100644
--- a/fs/btrfs/disk-io.h
+++ b/fs/btrfs/disk-io.h
@@ -149,6 +149,9 @@ 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 create);
int btrfs_get_num_tolerated_disk_barrier_failures(u64 flags);
int __init btrfs_end_io_wq_init(void);
void btrfs_end_io_wq_exit(void);
diff --git a/fs/btrfs/extent_io.c b/fs/btrfs/extent_io.c
index 72620cf41423..2f6a977442c3 100644
--- a/fs/btrfs/extent_io.c
+++ b/fs/btrfs/extent_io.c
@@ -20,6 +20,7 @@
#include "locking.h"
#include "rcu-string.h"
#include "backref.h"
+#include "disk-io.h"
static struct kmem_cache *extent_state_cache;
static struct kmem_cache *extent_buffer_cache;
@@ -5258,8 +5259,7 @@ int extent_buffer_uptodate(struct extent_buffer *eb)
}
int read_extent_buffer_pages(struct extent_io_tree *tree,
- struct extent_buffer *eb, int wait,
- get_extent_t *get_extent, int mirror_num)
+ struct extent_buffer *eb, int wait, int mirror_num)
{
unsigned long i;
struct page *page;
@@ -5319,7 +5319,7 @@ int read_extent_buffer_pages(struct extent_io_tree *tree,
ClearPageError(page);
err = __extent_read_full_page(tree, page,
- get_extent, &bio,
+ btree_get_extent, &bio,
mirror_num, &bio_flags,
REQ_META);
if (err) {
diff --git a/fs/btrfs/extent_io.h b/fs/btrfs/extent_io.h
index 5295deb8a153..40291e27782c 100644
--- a/fs/btrfs/extent_io.h
+++ b/fs/btrfs/extent_io.h
@@ -431,7 +431,7 @@ void free_extent_buffer_stale(struct extent_buffer *eb);
#define WAIT_PAGE_LOCK 2
int read_extent_buffer_pages(struct extent_io_tree *tree,
struct extent_buffer *eb, int wait,
- get_extent_t *get_extent, int mirror_num);
+ int mirror_num);
void wait_on_extent_buffer_writeback(struct extent_buffer *eb);
static inline unsigned long num_extent_pages(u64 start, u64 len)
--
2.14.3
^ permalink raw reply related [flat|nested] 13+ messages in thread
* Re: [PATCH 00/10] Cleanup unnecessary get_extent parameters
2017-11-06 19:30 [PATCH 00/10] Cleanup unnecessary get_extent parameters David Sterba
` (9 preceding siblings ...)
2017-11-06 19:31 ` [PATCH 10/10] btrfs: sink get_extent parameter to read_extent_buffer_pages David Sterba
@ 2017-11-06 21:26 ` Nikolay Borisov
2017-11-07 20:13 ` David Sterba
10 siblings, 1 reply; 13+ messages in thread
From: Nikolay Borisov @ 2017-11-06 21:26 UTC (permalink / raw)
To: David Sterba, linux-btrfs
On 6.11.2017 21:30, David Sterba wrote:
> There are several functions that take a generic get_extent parameter, but not
> all of them use it to distinguish between btree_get_exnent (for metadata) and
> btrfs_get_extent (for data). This is namely extent_read_full_page and
> __do_readpage.
I wonder whether we can do some similar collpasing withe some of the
hooks we have i.e. readpage_end_io_hook (resp.
btrfs_readpage_end_io_hook and btree_readpage_end_io_hook). All those
callbacks don't necessarily help readability...
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH 00/10] Cleanup unnecessary get_extent parameters
2017-11-06 21:26 ` [PATCH 00/10] Cleanup unnecessary get_extent parameters Nikolay Borisov
@ 2017-11-07 20:13 ` David Sterba
0 siblings, 0 replies; 13+ messages in thread
From: David Sterba @ 2017-11-07 20:13 UTC (permalink / raw)
To: Nikolay Borisov; +Cc: David Sterba, linux-btrfs
On Mon, Nov 06, 2017 at 11:26:54PM +0200, Nikolay Borisov wrote:
>
>
> On 6.11.2017 21:30, David Sterba wrote:
> > There are several functions that take a generic get_extent parameter, but not
> > all of them use it to distinguish between btree_get_exnent (for metadata) and
> > btrfs_get_extent (for data). This is namely extent_read_full_page and
> > __do_readpage.
>
> I wonder whether we can do some similar collpasing withe some of the
> hooks we have i.e. readpage_end_io_hook (resp.
> btrfs_readpage_end_io_hook and btree_readpage_end_io_hook). All those
> callbacks don't necessarily help readability...
Some of the callbacks passed as parameters can be possibly pushed down
the callstack, the only difference is btree_inode vs file extents.
Instead of the uppper caller switch, the right function can be called
based on the inode number (btree_inode has 1).
Josef has some ideas/patches to get rid of the btree_inode completely so
cleaning up the callback might not be worth. There's still some
potential to reduce the arguments to the various callbacks, I have
patches for that. This is a relatively easy and safe so I would still
send them, as the btree_inode removal will be probably intrusive and the
ETA for such changes is unpredictable.
^ permalink raw reply [flat|nested] 13+ messages in thread
end of thread, other threads:[~2017-11-07 20:15 UTC | newest]
Thread overview: 13+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-11-06 19:30 [PATCH 00/10] Cleanup unnecessary get_extent parameters David Sterba
2017-11-06 19:30 ` [PATCH 01/10] btrfs: sink get_extent parameter to extent_writepages David Sterba
2017-11-06 19:30 ` [PATCH 02/10] btrfs: sink get_extent parameter to extent_write_locked_range David Sterba
2017-11-06 19:30 ` [PATCH 03/10] btrfs: sink get_extent parameter to extent_write_full_page David Sterba
2017-11-06 19:30 ` [PATCH 04/10] btrfs: drop get_extent from extent_page_data David Sterba
2017-11-06 19:30 ` [PATCH 05/10] btrfs: sink get_extent parameter to extent_fiemap David Sterba
2017-11-06 19:30 ` [PATCH 06/10] btrfs: sink get_extent parameter to get_extent_skip_holes David Sterba
2017-11-06 19:30 ` [PATCH 07/10] btrfs: sink get_extent parameter to extent_readpages David Sterba
2017-11-06 19:31 ` [PATCH 08/10] btrfs: sink get_extent parameter to __extent_readpages David Sterba
2017-11-06 19:31 ` [PATCH 09/10] btrfs: sink get_extent parameter to __do_contiguous_readpages David Sterba
2017-11-06 19:31 ` [PATCH 10/10] btrfs: sink get_extent parameter to read_extent_buffer_pages David Sterba
2017-11-06 21:26 ` [PATCH 00/10] Cleanup unnecessary get_extent parameters Nikolay Borisov
2017-11-07 20:13 ` David Sterba
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).