Commit 9978059b authored by Goldwyn Rodrigues's avatar Goldwyn Rodrigues Committed by David Sterba

btrfs: Evaluate io_tree in find_lock_delalloc_range()

Simplification.  No point passing the tree variable when it can be
evaluated from inode. The tests now use the io_tree from btrfs_inode as
opposed to creating one.
Signed-off-by: default avatarGoldwyn Rodrigues <rgoldwyn@suse.com>
Reviewed-by: default avatarDavid Sterba <dsterba@suse.com>
Signed-off-by: default avatarDavid Sterba <dsterba@suse.com>
parent 67f9c220
...@@ -1780,10 +1780,10 @@ static noinline int lock_delalloc_pages(struct inode *inode, ...@@ -1780,10 +1780,10 @@ static noinline int lock_delalloc_pages(struct inode *inode,
*/ */
EXPORT_FOR_TESTS EXPORT_FOR_TESTS
noinline_for_stack bool find_lock_delalloc_range(struct inode *inode, noinline_for_stack bool find_lock_delalloc_range(struct inode *inode,
struct extent_io_tree *tree,
struct page *locked_page, u64 *start, struct page *locked_page, u64 *start,
u64 *end) u64 *end)
{ {
struct extent_io_tree *tree = &BTRFS_I(inode)->io_tree;
u64 max_bytes = BTRFS_MAX_EXTENT_SIZE; u64 max_bytes = BTRFS_MAX_EXTENT_SIZE;
u64 delalloc_start; u64 delalloc_start;
u64 delalloc_end; u64 delalloc_end;
...@@ -3330,7 +3330,6 @@ static noinline_for_stack int writepage_delalloc(struct inode *inode, ...@@ -3330,7 +3330,6 @@ static noinline_for_stack int writepage_delalloc(struct inode *inode,
struct page *page, struct writeback_control *wbc, struct page *page, struct writeback_control *wbc,
u64 delalloc_start, unsigned long *nr_written) u64 delalloc_start, unsigned long *nr_written)
{ {
struct extent_io_tree *tree = &BTRFS_I(inode)->io_tree;
u64 page_end = delalloc_start + PAGE_SIZE - 1; u64 page_end = delalloc_start + PAGE_SIZE - 1;
bool found; bool found;
u64 delalloc_to_write = 0; u64 delalloc_to_write = 0;
...@@ -3340,8 +3339,7 @@ static noinline_for_stack int writepage_delalloc(struct inode *inode, ...@@ -3340,8 +3339,7 @@ static noinline_for_stack int writepage_delalloc(struct inode *inode,
while (delalloc_end < page_end) { while (delalloc_end < page_end) {
found = find_lock_delalloc_range(inode, tree, found = find_lock_delalloc_range(inode, page,
page,
&delalloc_start, &delalloc_start,
&delalloc_end); &delalloc_end);
if (!found) { if (!found) {
......
...@@ -549,7 +549,7 @@ int free_io_failure(struct extent_io_tree *failure_tree, ...@@ -549,7 +549,7 @@ int free_io_failure(struct extent_io_tree *failure_tree,
struct extent_io_tree *io_tree, struct extent_io_tree *io_tree,
struct io_failure_record *rec); struct io_failure_record *rec);
#ifdef CONFIG_BTRFS_FS_RUN_SANITY_TESTS #ifdef CONFIG_BTRFS_FS_RUN_SANITY_TESTS
bool find_lock_delalloc_range(struct inode *inode, struct extent_io_tree *tree, bool find_lock_delalloc_range(struct inode *inode,
struct page *locked_page, u64 *start, struct page *locked_page, u64 *start,
u64 *end); u64 *end);
#endif #endif
......
...@@ -10,6 +10,7 @@ ...@@ -10,6 +10,7 @@
#include "btrfs-tests.h" #include "btrfs-tests.h"
#include "../ctree.h" #include "../ctree.h"
#include "../extent_io.h" #include "../extent_io.h"
#include "../btrfs_inode.h"
#define PROCESS_UNLOCK (1 << 0) #define PROCESS_UNLOCK (1 << 0)
#define PROCESS_RELEASE (1 << 1) #define PROCESS_RELEASE (1 << 1)
...@@ -58,7 +59,7 @@ static noinline int process_page_range(struct inode *inode, u64 start, u64 end, ...@@ -58,7 +59,7 @@ static noinline int process_page_range(struct inode *inode, u64 start, u64 end,
static int test_find_delalloc(u32 sectorsize) static int test_find_delalloc(u32 sectorsize)
{ {
struct inode *inode; struct inode *inode;
struct extent_io_tree tmp; struct extent_io_tree *tmp;
struct page *page; struct page *page;
struct page *locked_page = NULL; struct page *locked_page = NULL;
unsigned long index = 0; unsigned long index = 0;
...@@ -76,12 +77,13 @@ static int test_find_delalloc(u32 sectorsize) ...@@ -76,12 +77,13 @@ static int test_find_delalloc(u32 sectorsize)
test_std_err(TEST_ALLOC_INODE); test_std_err(TEST_ALLOC_INODE);
return -ENOMEM; return -ENOMEM;
} }
tmp = &BTRFS_I(inode)->io_tree;
/* /*
* Passing NULL as we don't have fs_info but tracepoints are not used * Passing NULL as we don't have fs_info but tracepoints are not used
* at this point * at this point
*/ */
extent_io_tree_init(NULL, &tmp, IO_TREE_SELFTEST, NULL); extent_io_tree_init(NULL, tmp, IO_TREE_SELFTEST, NULL);
/* /*
* First go through and create and mark all of our pages dirty, we pin * First go through and create and mark all of our pages dirty, we pin
...@@ -108,10 +110,10 @@ static int test_find_delalloc(u32 sectorsize) ...@@ -108,10 +110,10 @@ static int test_find_delalloc(u32 sectorsize)
* |--- delalloc ---| * |--- delalloc ---|
* |--- search ---| * |--- search ---|
*/ */
set_extent_delalloc(&tmp, 0, sectorsize - 1, 0, NULL); set_extent_delalloc(tmp, 0, sectorsize - 1, 0, NULL);
start = 0; start = 0;
end = 0; end = 0;
found = find_lock_delalloc_range(inode, &tmp, locked_page, &start, found = find_lock_delalloc_range(inode, locked_page, &start,
&end); &end);
if (!found) { if (!found) {
test_err("should have found at least one delalloc"); test_err("should have found at least one delalloc");
...@@ -122,7 +124,7 @@ static int test_find_delalloc(u32 sectorsize) ...@@ -122,7 +124,7 @@ static int test_find_delalloc(u32 sectorsize)
sectorsize - 1, start, end); sectorsize - 1, start, end);
goto out_bits; goto out_bits;
} }
unlock_extent(&tmp, start, end); unlock_extent(tmp, start, end);
unlock_page(locked_page); unlock_page(locked_page);
put_page(locked_page); put_page(locked_page);
...@@ -139,10 +141,10 @@ static int test_find_delalloc(u32 sectorsize) ...@@ -139,10 +141,10 @@ static int test_find_delalloc(u32 sectorsize)
test_err("couldn't find the locked page"); test_err("couldn't find the locked page");
goto out_bits; goto out_bits;
} }
set_extent_delalloc(&tmp, sectorsize, max_bytes - 1, 0, NULL); set_extent_delalloc(tmp, sectorsize, max_bytes - 1, 0, NULL);
start = test_start; start = test_start;
end = 0; end = 0;
found = find_lock_delalloc_range(inode, &tmp, locked_page, &start, found = find_lock_delalloc_range(inode, locked_page, &start,
&end); &end);
if (!found) { if (!found) {
test_err("couldn't find delalloc in our range"); test_err("couldn't find delalloc in our range");
...@@ -158,7 +160,7 @@ static int test_find_delalloc(u32 sectorsize) ...@@ -158,7 +160,7 @@ static int test_find_delalloc(u32 sectorsize)
test_err("there were unlocked pages in the range"); test_err("there were unlocked pages in the range");
goto out_bits; goto out_bits;
} }
unlock_extent(&tmp, start, end); unlock_extent(tmp, start, end);
/* locked_page was unlocked above */ /* locked_page was unlocked above */
put_page(locked_page); put_page(locked_page);
...@@ -176,7 +178,7 @@ static int test_find_delalloc(u32 sectorsize) ...@@ -176,7 +178,7 @@ static int test_find_delalloc(u32 sectorsize)
} }
start = test_start; start = test_start;
end = 0; end = 0;
found = find_lock_delalloc_range(inode, &tmp, locked_page, &start, found = find_lock_delalloc_range(inode, locked_page, &start,
&end); &end);
if (found) { if (found) {
test_err("found range when we shouldn't have"); test_err("found range when we shouldn't have");
...@@ -194,10 +196,10 @@ static int test_find_delalloc(u32 sectorsize) ...@@ -194,10 +196,10 @@ static int test_find_delalloc(u32 sectorsize)
* *
* We are re-using our test_start from above since it works out well. * We are re-using our test_start from above since it works out well.
*/ */
set_extent_delalloc(&tmp, max_bytes, total_dirty - 1, 0, NULL); set_extent_delalloc(tmp, max_bytes, total_dirty - 1, 0, NULL);
start = test_start; start = test_start;
end = 0; end = 0;
found = find_lock_delalloc_range(inode, &tmp, locked_page, &start, found = find_lock_delalloc_range(inode, locked_page, &start,
&end); &end);
if (!found) { if (!found) {
test_err("didn't find our range"); test_err("didn't find our range");
...@@ -213,7 +215,7 @@ static int test_find_delalloc(u32 sectorsize) ...@@ -213,7 +215,7 @@ static int test_find_delalloc(u32 sectorsize)
test_err("pages in range were not all locked"); test_err("pages in range were not all locked");
goto out_bits; goto out_bits;
} }
unlock_extent(&tmp, start, end); unlock_extent(tmp, start, end);
/* /*
* Now to test where we run into a page that is no longer dirty in the * Now to test where we run into a page that is no longer dirty in the
...@@ -238,7 +240,7 @@ static int test_find_delalloc(u32 sectorsize) ...@@ -238,7 +240,7 @@ static int test_find_delalloc(u32 sectorsize)
* this changes at any point in the future we will need to fix this * this changes at any point in the future we will need to fix this
* tests expected behavior. * tests expected behavior.
*/ */
found = find_lock_delalloc_range(inode, &tmp, locked_page, &start, found = find_lock_delalloc_range(inode, locked_page, &start,
&end); &end);
if (!found) { if (!found) {
test_err("didn't find our range"); test_err("didn't find our range");
...@@ -256,7 +258,7 @@ static int test_find_delalloc(u32 sectorsize) ...@@ -256,7 +258,7 @@ static int test_find_delalloc(u32 sectorsize)
} }
ret = 0; ret = 0;
out_bits: out_bits:
clear_extent_bits(&tmp, 0, total_dirty - 1, (unsigned)-1); clear_extent_bits(tmp, 0, total_dirty - 1, (unsigned)-1);
out: out:
if (locked_page) if (locked_page)
put_page(locked_page); put_page(locked_page);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment