* [PATCH v3 1/3] btrfs: scrub: rename members related to scrub_block::pagev
2022-03-13 10:39 [PATCH v3 0/3] btrfs: scrub: big renaming to address the page and sector difference Qu Wenruo
@ 2022-03-13 10:40 ` Qu Wenruo
2022-03-14 13:22 ` David Sterba
0 siblings, 1 reply; 3+ messages in thread
From: Qu Wenruo @ 2022-03-13 10:40 UTC (permalink / raw)
To: linux-btrfs
The following will be renamed in this patch:
- scrub_block::pagev -> sectorv
- scrub_block::page_count -> sector_count
- SCRUB_MAX_PAGES_PER_BLOCK -> SCRUB_MAX_SECTORS_PER_BLOCK
- page_num -> sector_num to iterate scrub_block::sectorv
For now scrub_page is not yet renamed, as the current changeset is
already large enough.
The rename for scrub_page will come in a separate patch.
Signed-off-by: Qu Wenruo <wqu@suse.com>
---
fs/btrfs/scrub.c | 221 +++++++++++++++++++++++------------------------
1 file changed, 110 insertions(+), 111 deletions(-)
diff --git a/fs/btrfs/scrub.c b/fs/btrfs/scrub.c
index 11089568b287..49581a2d0831 100644
--- a/fs/btrfs/scrub.c
+++ b/fs/btrfs/scrub.c
@@ -52,7 +52,7 @@ struct scrub_ctx;
* The following value times PAGE_SIZE needs to be large enough to match the
* largest node/leaf/sector size that shall be supported.
*/
-#define SCRUB_MAX_PAGES_PER_BLOCK (BTRFS_MAX_METADATA_BLOCKSIZE / SZ_4K)
+#define SCRUB_MAX_SECTORS_PER_BLOCK (BTRFS_MAX_METADATA_BLOCKSIZE / SZ_4K)
struct scrub_recover {
refcount_t refs;
@@ -94,8 +94,8 @@ struct scrub_bio {
};
struct scrub_block {
- struct scrub_page *pagev[SCRUB_MAX_PAGES_PER_BLOCK];
- int page_count;
+ struct scrub_page *sectors[SCRUB_MAX_SECTORS_PER_BLOCK];
+ int sector_count;
atomic_t outstanding_pages;
refcount_t refs; /* free mem on transition to zero */
struct scrub_ctx *sctx;
@@ -728,16 +728,16 @@ static void scrub_print_warning(const char *errstr, struct scrub_block *sblock)
u8 ref_level = 0;
int ret;
- WARN_ON(sblock->page_count < 1);
- dev = sblock->pagev[0]->dev;
+ WARN_ON(sblock->sector_count < 1);
+ dev = sblock->sectors[0]->dev;
fs_info = sblock->sctx->fs_info;
path = btrfs_alloc_path();
if (!path)
return;
- swarn.physical = sblock->pagev[0]->physical;
- swarn.logical = sblock->pagev[0]->logical;
+ swarn.physical = sblock->sectors[0]->physical;
+ swarn.logical = sblock->sectors[0]->logical;
swarn.errstr = errstr;
swarn.dev = NULL;
@@ -817,16 +817,16 @@ static int scrub_handle_errored_block(struct scrub_block *sblock_to_check)
struct scrub_block *sblock_bad;
int ret;
int mirror_index;
- int page_num;
+ int sector_num;
int success;
bool full_stripe_locked;
unsigned int nofs_flag;
static DEFINE_RATELIMIT_STATE(rs, DEFAULT_RATELIMIT_INTERVAL,
DEFAULT_RATELIMIT_BURST);
- BUG_ON(sblock_to_check->page_count < 1);
+ BUG_ON(sblock_to_check->sector_count < 1);
fs_info = sctx->fs_info;
- if (sblock_to_check->pagev[0]->flags & BTRFS_EXTENT_FLAG_SUPER) {
+ if (sblock_to_check->sectors[0]->flags & BTRFS_EXTENT_FLAG_SUPER) {
/*
* if we find an error in a super block, we just report it.
* They will get written with the next transaction commit
@@ -837,13 +837,13 @@ static int scrub_handle_errored_block(struct scrub_block *sblock_to_check)
spin_unlock(&sctx->stat_lock);
return 0;
}
- logical = sblock_to_check->pagev[0]->logical;
- BUG_ON(sblock_to_check->pagev[0]->mirror_num < 1);
- failed_mirror_index = sblock_to_check->pagev[0]->mirror_num - 1;
- is_metadata = !(sblock_to_check->pagev[0]->flags &
+ logical = sblock_to_check->sectors[0]->logical;
+ BUG_ON(sblock_to_check->sectors[0]->mirror_num < 1);
+ failed_mirror_index = sblock_to_check->sectors[0]->mirror_num - 1;
+ is_metadata = !(sblock_to_check->sectors[0]->flags &
BTRFS_EXTENT_FLAG_DATA);
- have_csum = sblock_to_check->pagev[0]->have_csum;
- dev = sblock_to_check->pagev[0]->dev;
+ have_csum = sblock_to_check->sectors[0]->have_csum;
+ dev = sblock_to_check->sectors[0]->dev;
if (!sctx->is_dev_replace && btrfs_repair_one_zone(fs_info, logical))
return 0;
@@ -1011,25 +1011,25 @@ static int scrub_handle_errored_block(struct scrub_block *sblock_to_check)
continue;
/* raid56's mirror can be more than BTRFS_MAX_MIRRORS */
- if (!scrub_is_page_on_raid56(sblock_bad->pagev[0])) {
+ if (!scrub_is_page_on_raid56(sblock_bad->sectors[0])) {
if (mirror_index >= BTRFS_MAX_MIRRORS)
break;
- if (!sblocks_for_recheck[mirror_index].page_count)
+ if (!sblocks_for_recheck[mirror_index].sector_count)
break;
sblock_other = sblocks_for_recheck + mirror_index;
} else {
- struct scrub_recover *r = sblock_bad->pagev[0]->recover;
+ struct scrub_recover *r = sblock_bad->sectors[0]->recover;
int max_allowed = r->bioc->num_stripes - r->bioc->num_tgtdevs;
if (mirror_index >= max_allowed)
break;
- if (!sblocks_for_recheck[1].page_count)
+ if (!sblocks_for_recheck[1].sector_count)
break;
ASSERT(failed_mirror_index == 0);
sblock_other = sblocks_for_recheck + 1;
- sblock_other->pagev[0]->mirror_num = 1 + mirror_index;
+ sblock_other->sectors[0]->mirror_num = 1 + mirror_index;
}
/* build and submit the bios, check checksums */
@@ -1078,16 +1078,16 @@ static int scrub_handle_errored_block(struct scrub_block *sblock_to_check)
* area are unreadable.
*/
success = 1;
- for (page_num = 0; page_num < sblock_bad->page_count;
- page_num++) {
- struct scrub_page *spage_bad = sblock_bad->pagev[page_num];
+ for (sector_num = 0; sector_num < sblock_bad->sector_count;
+ sector_num++) {
+ struct scrub_page *spage_bad = sblock_bad->sectors[sector_num];
struct scrub_block *sblock_other = NULL;
/* skip no-io-error page in scrub */
if (!spage_bad->io_error && !sctx->is_dev_replace)
continue;
- if (scrub_is_page_on_raid56(sblock_bad->pagev[0])) {
+ if (scrub_is_page_on_raid56(sblock_bad->sectors[0])) {
/*
* In case of dev replace, if raid56 rebuild process
* didn't work out correct data, then copy the content
@@ -1100,10 +1100,10 @@ static int scrub_handle_errored_block(struct scrub_block *sblock_to_check)
/* try to find no-io-error page in mirrors */
for (mirror_index = 0;
mirror_index < BTRFS_MAX_MIRRORS &&
- sblocks_for_recheck[mirror_index].page_count > 0;
+ sblocks_for_recheck[mirror_index].sector_count > 0;
mirror_index++) {
if (!sblocks_for_recheck[mirror_index].
- pagev[page_num]->io_error) {
+ sectors[sector_num]->io_error) {
sblock_other = sblocks_for_recheck +
mirror_index;
break;
@@ -1125,7 +1125,7 @@ static int scrub_handle_errored_block(struct scrub_block *sblock_to_check)
sblock_other = sblock_bad;
if (scrub_write_page_to_dev_replace(sblock_other,
- page_num) != 0) {
+ sector_num) != 0) {
atomic64_inc(
&fs_info->dev_replace.num_write_errors);
success = 0;
@@ -1133,7 +1133,7 @@ static int scrub_handle_errored_block(struct scrub_block *sblock_to_check)
} else if (sblock_other) {
ret = scrub_repair_page_from_good_copy(sblock_bad,
sblock_other,
- page_num, 0);
+ sector_num, 0);
if (0 == ret)
spage_bad->io_error = 0;
else
@@ -1186,18 +1186,18 @@ static int scrub_handle_errored_block(struct scrub_block *sblock_to_check)
struct scrub_block *sblock = sblocks_for_recheck +
mirror_index;
struct scrub_recover *recover;
- int page_index;
+ int sector_index;
- for (page_index = 0; page_index < sblock->page_count;
- page_index++) {
- sblock->pagev[page_index]->sblock = NULL;
- recover = sblock->pagev[page_index]->recover;
+ for (sector_index = 0; sector_index < sblock->sector_count;
+ sector_index++) {
+ sblock->sectors[sector_index]->sblock = NULL;
+ recover = sblock->sectors[sector_index]->recover;
if (recover) {
scrub_put_recover(fs_info, recover);
- sblock->pagev[page_index]->recover =
+ sblock->sectors[sector_index]->recover =
NULL;
}
- scrub_page_put(sblock->pagev[page_index]);
+ scrub_page_put(sblock->sectors[sector_index]);
}
}
kfree(sblocks_for_recheck);
@@ -1255,18 +1255,18 @@ static int scrub_setup_recheck_block(struct scrub_block *original_sblock,
{
struct scrub_ctx *sctx = original_sblock->sctx;
struct btrfs_fs_info *fs_info = sctx->fs_info;
- u64 length = original_sblock->page_count * fs_info->sectorsize;
- u64 logical = original_sblock->pagev[0]->logical;
- u64 generation = original_sblock->pagev[0]->generation;
- u64 flags = original_sblock->pagev[0]->flags;
- u64 have_csum = original_sblock->pagev[0]->have_csum;
+ u64 length = original_sblock->sector_count << fs_info->sectorsize_bits;
+ u64 logical = original_sblock->sectors[0]->logical;
+ u64 generation = original_sblock->sectors[0]->generation;
+ u64 flags = original_sblock->sectors[0]->flags;
+ u64 have_csum = original_sblock->sectors[0]->have_csum;
struct scrub_recover *recover;
struct btrfs_io_context *bioc;
u64 sublen;
u64 mapped_length;
u64 stripe_offset;
int stripe_index;
- int page_index = 0;
+ int sector_index = 0;
int mirror_index;
int nmirrors;
int ret;
@@ -1306,7 +1306,7 @@ static int scrub_setup_recheck_block(struct scrub_block *original_sblock,
recover->bioc = bioc;
recover->map_length = mapped_length;
- ASSERT(page_index < SCRUB_MAX_PAGES_PER_BLOCK);
+ ASSERT(sector_index < SCRUB_MAX_SECTORS_PER_BLOCK);
nmirrors = min(scrub_nr_raid_mirrors(bioc), BTRFS_MAX_MIRRORS);
@@ -1328,7 +1328,7 @@ static int scrub_setup_recheck_block(struct scrub_block *original_sblock,
return -ENOMEM;
}
scrub_page_get(spage);
- sblock->pagev[page_index] = spage;
+ sblock->sectors[sector_index] = spage;
spage->sblock = sblock;
spage->flags = flags;
spage->generation = generation;
@@ -1336,7 +1336,7 @@ static int scrub_setup_recheck_block(struct scrub_block *original_sblock,
spage->have_csum = have_csum;
if (have_csum)
memcpy(spage->csum,
- original_sblock->pagev[0]->csum,
+ original_sblock->sectors[0]->csum,
sctx->fs_info->csum_size);
scrub_stripe_index_and_offset(logical,
@@ -1352,13 +1352,13 @@ static int scrub_setup_recheck_block(struct scrub_block *original_sblock,
stripe_offset;
spage->dev = bioc->stripes[stripe_index].dev;
- BUG_ON(page_index >= original_sblock->page_count);
+ BUG_ON(sector_index >= original_sblock->sector_count);
spage->physical_for_dev_replace =
- original_sblock->pagev[page_index]->
+ original_sblock->sectors[sector_index]->
physical_for_dev_replace;
/* for missing devices, dev->bdev is NULL */
spage->mirror_num = mirror_index + 1;
- sblock->page_count++;
+ sblock->sector_count++;
spage->page = alloc_page(GFP_NOFS);
if (!spage->page)
goto leave_nomem;
@@ -1369,7 +1369,7 @@ static int scrub_setup_recheck_block(struct scrub_block *original_sblock,
scrub_put_recover(fs_info, recover);
length -= sublen;
logical += sublen;
- page_index++;
+ sector_index++;
}
return 0;
@@ -1392,7 +1392,7 @@ static int scrub_submit_raid56_bio_wait(struct btrfs_fs_info *fs_info,
bio->bi_private = &done;
bio->bi_end_io = scrub_bio_wait_endio;
- mirror_num = spage->sblock->pagev[0]->mirror_num;
+ mirror_num = spage->sblock->sectors[0]->mirror_num;
ret = raid56_parity_recover(bio, spage->recover->bioc,
spage->recover->map_length,
mirror_num, 0);
@@ -1406,9 +1406,9 @@ static int scrub_submit_raid56_bio_wait(struct btrfs_fs_info *fs_info,
static void scrub_recheck_block_on_raid56(struct btrfs_fs_info *fs_info,
struct scrub_block *sblock)
{
- struct scrub_page *first_page = sblock->pagev[0];
+ struct scrub_page *first_page = sblock->sectors[0];
struct bio *bio;
- int page_num;
+ int i;
/* All pages in sblock belong to the same stripe on the same device. */
ASSERT(first_page->dev);
@@ -1418,8 +1418,8 @@ static void scrub_recheck_block_on_raid56(struct btrfs_fs_info *fs_info,
bio = btrfs_bio_alloc(BIO_MAX_VECS);
bio_set_dev(bio, first_page->dev->bdev);
- for (page_num = 0; page_num < sblock->page_count; page_num++) {
- struct scrub_page *spage = sblock->pagev[page_num];
+ for (i = 0; i < sblock->sector_count; i++) {
+ struct scrub_page *spage = sblock->sectors[i];
WARN_ON(!spage->page);
bio_add_page(bio, spage->page, PAGE_SIZE, 0);
@@ -1436,8 +1436,8 @@ static void scrub_recheck_block_on_raid56(struct btrfs_fs_info *fs_info,
return;
out:
- for (page_num = 0; page_num < sblock->page_count; page_num++)
- sblock->pagev[page_num]->io_error = 1;
+ for (i = 0; i < sblock->sector_count; i++)
+ sblock->sectors[i]->io_error = 1;
sblock->no_io_error_seen = 0;
}
@@ -1453,17 +1453,17 @@ static void scrub_recheck_block(struct btrfs_fs_info *fs_info,
struct scrub_block *sblock,
int retry_failed_mirror)
{
- int page_num;
+ int i;
sblock->no_io_error_seen = 1;
/* short cut for raid56 */
- if (!retry_failed_mirror && scrub_is_page_on_raid56(sblock->pagev[0]))
+ if (!retry_failed_mirror && scrub_is_page_on_raid56(sblock->sectors[0]))
return scrub_recheck_block_on_raid56(fs_info, sblock);
- for (page_num = 0; page_num < sblock->page_count; page_num++) {
+ for (i = 0; i < sblock->sector_count; i++) {
struct bio *bio;
- struct scrub_page *spage = sblock->pagev[page_num];
+ struct scrub_page *spage = sblock->sectors[i];
if (spage->dev->bdev == NULL) {
spage->io_error = 1;
@@ -1507,7 +1507,7 @@ static void scrub_recheck_block_checksum(struct scrub_block *sblock)
sblock->checksum_error = 0;
sblock->generation_error = 0;
- if (sblock->pagev[0]->flags & BTRFS_EXTENT_FLAG_DATA)
+ if (sblock->sectors[0]->flags & BTRFS_EXTENT_FLAG_DATA)
scrub_checksum_data(sblock);
else
scrub_checksum_tree_block(sblock);
@@ -1516,15 +1516,14 @@ static void scrub_recheck_block_checksum(struct scrub_block *sblock)
static int scrub_repair_block_from_good_copy(struct scrub_block *sblock_bad,
struct scrub_block *sblock_good)
{
- int page_num;
+ int i;
int ret = 0;
- for (page_num = 0; page_num < sblock_bad->page_count; page_num++) {
+ for (i = 0; i < sblock_bad->sector_count; i++) {
int ret_sub;
ret_sub = scrub_repair_page_from_good_copy(sblock_bad,
- sblock_good,
- page_num, 1);
+ sblock_good, i, 1);
if (ret_sub)
ret = ret_sub;
}
@@ -1534,10 +1533,10 @@ static int scrub_repair_block_from_good_copy(struct scrub_block *sblock_bad,
static int scrub_repair_page_from_good_copy(struct scrub_block *sblock_bad,
struct scrub_block *sblock_good,
- int page_num, int force_write)
+ int sector_num, int force_write)
{
- struct scrub_page *spage_bad = sblock_bad->pagev[page_num];
- struct scrub_page *spage_good = sblock_good->pagev[page_num];
+ struct scrub_page *spage_bad = sblock_bad->sectors[sector_num];
+ struct scrub_page *spage_good = sblock_good->sectors[sector_num];
struct btrfs_fs_info *fs_info = sblock_bad->sctx->fs_info;
const u32 sectorsize = fs_info->sectorsize;
@@ -1581,7 +1580,7 @@ static int scrub_repair_page_from_good_copy(struct scrub_block *sblock_bad,
static void scrub_write_block_to_dev_replace(struct scrub_block *sblock)
{
struct btrfs_fs_info *fs_info = sblock->sctx->fs_info;
- int page_num;
+ int i;
/*
* This block is used for the check of the parity on the source device,
@@ -1590,19 +1589,19 @@ static void scrub_write_block_to_dev_replace(struct scrub_block *sblock)
if (sblock->sparity)
return;
- for (page_num = 0; page_num < sblock->page_count; page_num++) {
+ for (i = 0; i < sblock->sector_count; i++) {
int ret;
- ret = scrub_write_page_to_dev_replace(sblock, page_num);
+ ret = scrub_write_page_to_dev_replace(sblock, i);
if (ret)
atomic64_inc(&fs_info->dev_replace.num_write_errors);
}
}
static int scrub_write_page_to_dev_replace(struct scrub_block *sblock,
- int page_num)
+ int sector_num)
{
- struct scrub_page *spage = sblock->pagev[page_num];
+ struct scrub_page *spage = sblock->sectors[sector_num];
BUG_ON(spage->page == NULL);
if (spage->io_error)
@@ -1786,8 +1785,8 @@ static int scrub_checksum(struct scrub_block *sblock)
sblock->generation_error = 0;
sblock->checksum_error = 0;
- WARN_ON(sblock->page_count < 1);
- flags = sblock->pagev[0]->flags;
+ WARN_ON(sblock->sector_count < 1);
+ flags = sblock->sectors[0]->flags;
ret = 0;
if (flags & BTRFS_EXTENT_FLAG_DATA)
ret = scrub_checksum_data(sblock);
@@ -1812,8 +1811,8 @@ static int scrub_checksum_data(struct scrub_block *sblock)
struct scrub_page *spage;
char *kaddr;
- BUG_ON(sblock->page_count < 1);
- spage = sblock->pagev[0];
+ BUG_ON(sblock->sector_count < 1);
+ spage = sblock->sectors[0];
if (!spage->have_csum)
return 0;
@@ -1852,12 +1851,12 @@ static int scrub_checksum_tree_block(struct scrub_block *sblock)
struct scrub_page *spage;
char *kaddr;
- BUG_ON(sblock->page_count < 1);
+ BUG_ON(sblock->sector_count < 1);
- /* Each member in pagev is just one block, not a full page */
- ASSERT(sblock->page_count == num_sectors);
+ /* Each member in pagev is just one sector , not a full page */
+ ASSERT(sblock->sector_count == num_sectors);
- spage = sblock->pagev[0];
+ spage = sblock->sectors[0];
kaddr = page_address(spage->page);
h = (struct btrfs_header *)kaddr;
memcpy(on_disk_csum, h->csum, sctx->fs_info->csum_size);
@@ -1888,7 +1887,7 @@ static int scrub_checksum_tree_block(struct scrub_block *sblock)
sectorsize - BTRFS_CSUM_SIZE);
for (i = 1; i < num_sectors; i++) {
- kaddr = page_address(sblock->pagev[i]->page);
+ kaddr = page_address(sblock->sectors[i]->page);
crypto_shash_update(shash, kaddr, sectorsize);
}
@@ -1911,8 +1910,8 @@ static int scrub_checksum_super(struct scrub_block *sblock)
int fail_gen = 0;
int fail_cor = 0;
- BUG_ON(sblock->page_count < 1);
- spage = sblock->pagev[0];
+ BUG_ON(sblock->sector_count < 1);
+ spage = sblock->sectors[0];
kaddr = page_address(spage->page);
s = (struct btrfs_super_block *)kaddr;
@@ -1966,8 +1965,8 @@ static void scrub_block_put(struct scrub_block *sblock)
if (sblock->sparity)
scrub_parity_put(sblock->sparity);
- for (i = 0; i < sblock->page_count; i++)
- scrub_page_put(sblock->pagev[i]);
+ for (i = 0; i < sblock->sector_count; i++)
+ scrub_page_put(sblock->sectors[i]);
kfree(sblock);
}
}
@@ -2155,8 +2154,8 @@ static void scrub_missing_raid56_worker(struct btrfs_work *work)
u64 logical;
struct btrfs_device *dev;
- logical = sblock->pagev[0]->logical;
- dev = sblock->pagev[0]->dev;
+ logical = sblock->sectors[0]->logical;
+ dev = sblock->sectors[0]->dev;
if (sblock->no_io_error_seen)
scrub_recheck_block_checksum(sblock);
@@ -2193,8 +2192,8 @@ static void scrub_missing_raid56_pages(struct scrub_block *sblock)
{
struct scrub_ctx *sctx = sblock->sctx;
struct btrfs_fs_info *fs_info = sctx->fs_info;
- u64 length = sblock->page_count * PAGE_SIZE;
- u64 logical = sblock->pagev[0]->logical;
+ u64 length = sblock->sector_count * fs_info->sectorsize;
+ u64 logical = sblock->sectors[0]->logical;
struct btrfs_io_context *bioc = NULL;
struct bio *bio;
struct btrfs_raid_bio *rbio;
@@ -2227,8 +2226,8 @@ static void scrub_missing_raid56_pages(struct scrub_block *sblock)
if (!rbio)
goto rbio_out;
- for (i = 0; i < sblock->page_count; i++) {
- struct scrub_page *spage = sblock->pagev[i];
+ for (i = 0; i < sblock->sector_count; i++) {
+ struct scrub_page *spage = sblock->sectors[i];
raid56_add_scrub_pages(rbio, spage->page, spage->logical);
}
@@ -2290,9 +2289,9 @@ static int scrub_pages(struct scrub_ctx *sctx, u64 logical, u32 len,
scrub_block_put(sblock);
return -ENOMEM;
}
- ASSERT(index < SCRUB_MAX_PAGES_PER_BLOCK);
+ ASSERT(index < SCRUB_MAX_SECTORS_PER_BLOCK);
scrub_page_get(spage);
- sblock->pagev[index] = spage;
+ sblock->sectors[index] = spage;
spage->sblock = sblock;
spage->dev = dev;
spage->flags = flags;
@@ -2307,7 +2306,7 @@ static int scrub_pages(struct scrub_ctx *sctx, u64 logical, u32 len,
} else {
spage->have_csum = 0;
}
- sblock->page_count++;
+ sblock->sector_count++;
spage->page = alloc_page(GFP_KERNEL);
if (!spage->page)
goto leave_nomem;
@@ -2317,7 +2316,7 @@ static int scrub_pages(struct scrub_ctx *sctx, u64 logical, u32 len,
physical_for_dev_replace += l;
}
- WARN_ON(sblock->page_count == 0);
+ WARN_ON(sblock->sector_count == 0);
if (test_bit(BTRFS_DEV_STATE_MISSING, &dev->dev_state)) {
/*
* This case should only be hit for RAID 5/6 device replace. See
@@ -2325,8 +2324,8 @@ static int scrub_pages(struct scrub_ctx *sctx, u64 logical, u32 len,
*/
scrub_missing_raid56_pages(sblock);
} else {
- for (index = 0; index < sblock->page_count; index++) {
- struct scrub_page *spage = sblock->pagev[index];
+ for (index = 0; index < sblock->sector_count; index++) {
+ struct scrub_page *spage = sblock->sectors[index];
int ret;
ret = scrub_add_page_to_rd_bio(sctx, spage);
@@ -2456,8 +2455,8 @@ static void scrub_block_complete(struct scrub_block *sblock)
}
if (sblock->sparity && corrupted && !sblock->data_corrected) {
- u64 start = sblock->pagev[0]->logical;
- u64 end = sblock->pagev[sblock->page_count - 1]->logical +
+ u64 start = sblock->sectors[0]->logical;
+ u64 end = sblock->sectors[sblock->sector_count - 1]->logical +
sblock->sctx->fs_info->sectorsize;
ASSERT(end - start <= U32_MAX);
@@ -2624,10 +2623,10 @@ static int scrub_pages_for_parity(struct scrub_parity *sparity,
scrub_block_put(sblock);
return -ENOMEM;
}
- ASSERT(index < SCRUB_MAX_PAGES_PER_BLOCK);
+ ASSERT(index < SCRUB_MAX_SECTORS_PER_BLOCK);
/* For scrub block */
scrub_page_get(spage);
- sblock->pagev[index] = spage;
+ sblock->sectors[index] = spage;
/* For scrub parity */
scrub_page_get(spage);
list_add_tail(&spage->list, &sparity->spages);
@@ -2644,7 +2643,7 @@ static int scrub_pages_for_parity(struct scrub_parity *sparity,
} else {
spage->have_csum = 0;
}
- sblock->page_count++;
+ sblock->sector_count++;
spage->page = alloc_page(GFP_KERNEL);
if (!spage->page)
goto leave_nomem;
@@ -2656,9 +2655,9 @@ static int scrub_pages_for_parity(struct scrub_parity *sparity,
physical += sectorsize;
}
- WARN_ON(sblock->page_count == 0);
- for (index = 0; index < sblock->page_count; index++) {
- struct scrub_page *spage = sblock->pagev[index];
+ WARN_ON(sblock->sector_count == 0);
+ for (index = 0; index < sblock->sector_count; index++) {
+ struct scrub_page *spage = sblock->sectors[index];
int ret;
ret = scrub_add_page_to_rd_bio(sctx, spage);
@@ -4058,18 +4057,18 @@ int btrfs_scrub_dev(struct btrfs_fs_info *fs_info, u64 devid, u64 start,
}
if (fs_info->nodesize >
- PAGE_SIZE * SCRUB_MAX_PAGES_PER_BLOCK ||
- fs_info->sectorsize > PAGE_SIZE * SCRUB_MAX_PAGES_PER_BLOCK) {
+ SCRUB_MAX_SECTORS_PER_BLOCK * fs_info->sectorsize ||
+ fs_info->sectorsize > PAGE_SIZE * SCRUB_MAX_SECTORS_PER_BLOCK) {
/*
* would exhaust the array bounds of pagev member in
* struct scrub_block
*/
btrfs_err(fs_info,
- "scrub: size assumption nodesize and sectorsize <= SCRUB_MAX_PAGES_PER_BLOCK (%d <= %d && %d <= %d) fails",
+ "scrub: size assumption nodesize and sectorsize <= SCRUB_MAX_SECTORS_PER_BLOCK (%d <= %d && %d <= %d) fails",
fs_info->nodesize,
- SCRUB_MAX_PAGES_PER_BLOCK,
+ SCRUB_MAX_SECTORS_PER_BLOCK,
fs_info->sectorsize,
- SCRUB_MAX_PAGES_PER_BLOCK);
+ SCRUB_MAX_SECTORS_PER_BLOCK);
return -EINVAL;
}
--
2.35.1
^ permalink raw reply related [flat|nested] 3+ messages in thread
* Re: [PATCH v3 1/3] btrfs: scrub: rename members related to scrub_block::pagev
@ 2022-03-13 14:45 kernel test robot
0 siblings, 0 replies; 3+ messages in thread
From: kernel test robot @ 2022-03-13 14:45 UTC (permalink / raw)
To: kbuild
[-- Attachment #1: Type: text/plain, Size: 11578 bytes --]
CC: kbuild-all(a)lists.01.org
BCC: lkp(a)intel.com
In-Reply-To: <c9b166e536844ca1dd42adb8ea1e3520fc53618a.1647161284.git.wqu(a)suse.com>
References: <c9b166e536844ca1dd42adb8ea1e3520fc53618a.1647161284.git.wqu@suse.com>
TO: Qu Wenruo <wqu@suse.com>
Hi Qu,
Thank you for the patch! Perhaps something to improve:
[auto build test WARNING on kdave/for-next]
[also build test WARNING on v5.17-rc7 next-20220310]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch]
url: https://github.com/0day-ci/linux/commits/Qu-Wenruo/btrfs-scrub-big-renaming-to-address-the-page-and-sector-difference/20220313-184251
base: https://git.kernel.org/pub/scm/linux/kernel/git/kdave/linux.git for-next
:::::: branch date: 4 hours ago
:::::: commit date: 4 hours ago
config: m68k-randconfig-m031-20220313 (https://download.01.org/0day-ci/archive/20220313/202203132232.7U2j2PCZ-lkp(a)intel.com/config)
compiler: m68k-linux-gcc (GCC) 11.2.0
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>
Reported-by: Dan Carpenter <dan.carpenter@oracle.com>
smatch warnings:
fs/btrfs/scrub.c:1258 scrub_setup_recheck_block() warn: should 'original_sblock->sector_count << fs_info->sectorsize_bits' be a 64 bit type?
vim +1258 fs/btrfs/scrub.c
af8e2d1df9848b Miao Xie 2014-10-23 1252
be50a8ddaae1d0 Zhao Lei 2015-01-20 1253 static int scrub_setup_recheck_block(struct scrub_block *original_sblock,
b5d67f64f9bc65 Stefan Behrens 2012-03-27 1254 struct scrub_block *sblocks_for_recheck)
b5d67f64f9bc65 Stefan Behrens 2012-03-27 1255 {
be50a8ddaae1d0 Zhao Lei 2015-01-20 1256 struct scrub_ctx *sctx = original_sblock->sctx;
fb456252d3d9c0 Jeff Mahoney 2016-06-22 1257 struct btrfs_fs_info *fs_info = sctx->fs_info;
9053bf58b14388 Qu Wenruo 2022-03-13 @1258 u64 length = original_sblock->sector_count << fs_info->sectorsize_bits;
9053bf58b14388 Qu Wenruo 2022-03-13 1259 u64 logical = original_sblock->sectors[0]->logical;
9053bf58b14388 Qu Wenruo 2022-03-13 1260 u64 generation = original_sblock->sectors[0]->generation;
9053bf58b14388 Qu Wenruo 2022-03-13 1261 u64 flags = original_sblock->sectors[0]->flags;
9053bf58b14388 Qu Wenruo 2022-03-13 1262 u64 have_csum = original_sblock->sectors[0]->have_csum;
af8e2d1df9848b Miao Xie 2014-10-23 1263 struct scrub_recover *recover;
4c664611791239 Qu Wenruo 2021-09-15 1264 struct btrfs_io_context *bioc;
af8e2d1df9848b Miao Xie 2014-10-23 1265 u64 sublen;
af8e2d1df9848b Miao Xie 2014-10-23 1266 u64 mapped_length;
af8e2d1df9848b Miao Xie 2014-10-23 1267 u64 stripe_offset;
af8e2d1df9848b Miao Xie 2014-10-23 1268 int stripe_index;
9053bf58b14388 Qu Wenruo 2022-03-13 1269 int sector_index = 0;
b5d67f64f9bc65 Stefan Behrens 2012-03-27 1270 int mirror_index;
af8e2d1df9848b Miao Xie 2014-10-23 1271 int nmirrors;
b5d67f64f9bc65 Stefan Behrens 2012-03-27 1272 int ret;
a2de733c78fa7a Arne Jansen 2011-03-08 1273
b5d67f64f9bc65 Stefan Behrens 2012-03-27 1274 /*
570193454a5841 Zhao Lei 2015-01-20 1275 * note: the two members refs and outstanding_pages
b5d67f64f9bc65 Stefan Behrens 2012-03-27 1276 * are not used (and not set) in the blocks that are used for
b5d67f64f9bc65 Stefan Behrens 2012-03-27 1277 * the recheck procedure
b5d67f64f9bc65 Stefan Behrens 2012-03-27 1278 */
b5d67f64f9bc65 Stefan Behrens 2012-03-27 1279
b5d67f64f9bc65 Stefan Behrens 2012-03-27 1280 while (length > 0) {
8df507cbb59527 Qu Wenruo 2021-04-22 1281 sublen = min_t(u64, length, fs_info->sectorsize);
af8e2d1df9848b Miao Xie 2014-10-23 1282 mapped_length = sublen;
4c664611791239 Qu Wenruo 2021-09-15 1283 bioc = NULL;
b5d67f64f9bc65 Stefan Behrens 2012-03-27 1284
b5d67f64f9bc65 Stefan Behrens 2012-03-27 1285 /*
8df507cbb59527 Qu Wenruo 2021-04-22 1286 * With a length of sectorsize, each returned stripe represents
8df507cbb59527 Qu Wenruo 2021-04-22 1287 * one mirror
b5d67f64f9bc65 Stefan Behrens 2012-03-27 1288 */
e501bfe323356e Qu Wenruo 2017-03-29 1289 btrfs_bio_counter_inc_blocked(fs_info);
cf8cddd38bab31 Christoph Hellwig 2016-10-27 1290 ret = btrfs_map_sblock(fs_info, BTRFS_MAP_GET_READ_MIRRORS,
4c664611791239 Qu Wenruo 2021-09-15 1291 logical, &mapped_length, &bioc);
4c664611791239 Qu Wenruo 2021-09-15 1292 if (ret || !bioc || mapped_length < sublen) {
4c664611791239 Qu Wenruo 2021-09-15 1293 btrfs_put_bioc(bioc);
e501bfe323356e Qu Wenruo 2017-03-29 1294 btrfs_bio_counter_dec(fs_info);
b5d67f64f9bc65 Stefan Behrens 2012-03-27 1295 return -EIO;
b5d67f64f9bc65 Stefan Behrens 2012-03-27 1296 }
b5d67f64f9bc65 Stefan Behrens 2012-03-27 1297
af8e2d1df9848b Miao Xie 2014-10-23 1298 recover = kzalloc(sizeof(struct scrub_recover), GFP_NOFS);
af8e2d1df9848b Miao Xie 2014-10-23 1299 if (!recover) {
4c664611791239 Qu Wenruo 2021-09-15 1300 btrfs_put_bioc(bioc);
e501bfe323356e Qu Wenruo 2017-03-29 1301 btrfs_bio_counter_dec(fs_info);
af8e2d1df9848b Miao Xie 2014-10-23 1302 return -ENOMEM;
af8e2d1df9848b Miao Xie 2014-10-23 1303 }
af8e2d1df9848b Miao Xie 2014-10-23 1304
6f615018b35fb5 Elena Reshetova 2017-03-03 1305 refcount_set(&recover->refs, 1);
4c664611791239 Qu Wenruo 2021-09-15 1306 recover->bioc = bioc;
af8e2d1df9848b Miao Xie 2014-10-23 1307 recover->map_length = mapped_length;
af8e2d1df9848b Miao Xie 2014-10-23 1308
9053bf58b14388 Qu Wenruo 2022-03-13 1309 ASSERT(sector_index < SCRUB_MAX_SECTORS_PER_BLOCK);
af8e2d1df9848b Miao Xie 2014-10-23 1310
4c664611791239 Qu Wenruo 2021-09-15 1311 nmirrors = min(scrub_nr_raid_mirrors(bioc), BTRFS_MAX_MIRRORS);
10f11900167a83 Zhao Lei 2015-01-20 1312
af8e2d1df9848b Miao Xie 2014-10-23 1313 for (mirror_index = 0; mirror_index < nmirrors;
b5d67f64f9bc65 Stefan Behrens 2012-03-27 1314 mirror_index++) {
b5d67f64f9bc65 Stefan Behrens 2012-03-27 1315 struct scrub_block *sblock;
261d2dcb24302b Qu Wenruo 2020-11-03 1316 struct scrub_page *spage;
b5d67f64f9bc65 Stefan Behrens 2012-03-27 1317
b5d67f64f9bc65 Stefan Behrens 2012-03-27 1318 sblock = sblocks_for_recheck + mirror_index;
7a9e9987681198 Stefan Behrens 2012-11-02 1319 sblock->sctx = sctx;
4734b7ed79e123 Zhao Lei 2015-08-19 1320
261d2dcb24302b Qu Wenruo 2020-11-03 1321 spage = kzalloc(sizeof(*spage), GFP_NOFS);
261d2dcb24302b Qu Wenruo 2020-11-03 1322 if (!spage) {
7a9e9987681198 Stefan Behrens 2012-11-02 1323 leave_nomem:
d9d181c1ba7aa0 Stefan Behrens 2012-11-02 1324 spin_lock(&sctx->stat_lock);
d9d181c1ba7aa0 Stefan Behrens 2012-11-02 1325 sctx->stat.malloc_errors++;
d9d181c1ba7aa0 Stefan Behrens 2012-11-02 1326 spin_unlock(&sctx->stat_lock);
e501bfe323356e Qu Wenruo 2017-03-29 1327 scrub_put_recover(fs_info, recover);
b5d67f64f9bc65 Stefan Behrens 2012-03-27 1328 return -ENOMEM;
b5d67f64f9bc65 Stefan Behrens 2012-03-27 1329 }
261d2dcb24302b Qu Wenruo 2020-11-03 1330 scrub_page_get(spage);
9053bf58b14388 Qu Wenruo 2022-03-13 1331 sblock->sectors[sector_index] = spage;
261d2dcb24302b Qu Wenruo 2020-11-03 1332 spage->sblock = sblock;
261d2dcb24302b Qu Wenruo 2020-11-03 1333 spage->flags = flags;
261d2dcb24302b Qu Wenruo 2020-11-03 1334 spage->generation = generation;
261d2dcb24302b Qu Wenruo 2020-11-03 1335 spage->logical = logical;
261d2dcb24302b Qu Wenruo 2020-11-03 1336 spage->have_csum = have_csum;
4734b7ed79e123 Zhao Lei 2015-08-19 1337 if (have_csum)
261d2dcb24302b Qu Wenruo 2020-11-03 1338 memcpy(spage->csum,
9053bf58b14388 Qu Wenruo 2022-03-13 1339 original_sblock->sectors[0]->csum,
2ae0c2d80d25da David Sterba 2020-06-30 1340 sctx->fs_info->csum_size);
af8e2d1df9848b Miao Xie 2014-10-23 1341
10f11900167a83 Zhao Lei 2015-01-20 1342 scrub_stripe_index_and_offset(logical,
4c664611791239 Qu Wenruo 2021-09-15 1343 bioc->map_type,
4c664611791239 Qu Wenruo 2021-09-15 1344 bioc->raid_map,
af8e2d1df9848b Miao Xie 2014-10-23 1345 mapped_length,
4c664611791239 Qu Wenruo 2021-09-15 1346 bioc->num_stripes -
4c664611791239 Qu Wenruo 2021-09-15 1347 bioc->num_tgtdevs,
af8e2d1df9848b Miao Xie 2014-10-23 1348 mirror_index,
af8e2d1df9848b Miao Xie 2014-10-23 1349 &stripe_index,
af8e2d1df9848b Miao Xie 2014-10-23 1350 &stripe_offset);
4c664611791239 Qu Wenruo 2021-09-15 1351 spage->physical = bioc->stripes[stripe_index].physical +
af8e2d1df9848b Miao Xie 2014-10-23 1352 stripe_offset;
4c664611791239 Qu Wenruo 2021-09-15 1353 spage->dev = bioc->stripes[stripe_index].dev;
af8e2d1df9848b Miao Xie 2014-10-23 1354
9053bf58b14388 Qu Wenruo 2022-03-13 1355 BUG_ON(sector_index >= original_sblock->sector_count);
261d2dcb24302b Qu Wenruo 2020-11-03 1356 spage->physical_for_dev_replace =
9053bf58b14388 Qu Wenruo 2022-03-13 1357 original_sblock->sectors[sector_index]->
ff023aac31198e Stefan Behrens 2012-11-06 1358 physical_for_dev_replace;
7a9e9987681198 Stefan Behrens 2012-11-02 1359 /* for missing devices, dev->bdev is NULL */
261d2dcb24302b Qu Wenruo 2020-11-03 1360 spage->mirror_num = mirror_index + 1;
9053bf58b14388 Qu Wenruo 2022-03-13 1361 sblock->sector_count++;
261d2dcb24302b Qu Wenruo 2020-11-03 1362 spage->page = alloc_page(GFP_NOFS);
261d2dcb24302b Qu Wenruo 2020-11-03 1363 if (!spage->page)
7a9e9987681198 Stefan Behrens 2012-11-02 1364 goto leave_nomem;
af8e2d1df9848b Miao Xie 2014-10-23 1365
af8e2d1df9848b Miao Xie 2014-10-23 1366 scrub_get_recover(recover);
261d2dcb24302b Qu Wenruo 2020-11-03 1367 spage->recover = recover;
b5d67f64f9bc65 Stefan Behrens 2012-03-27 1368 }
e501bfe323356e Qu Wenruo 2017-03-29 1369 scrub_put_recover(fs_info, recover);
b5d67f64f9bc65 Stefan Behrens 2012-03-27 1370 length -= sublen;
b5d67f64f9bc65 Stefan Behrens 2012-03-27 1371 logical += sublen;
9053bf58b14388 Qu Wenruo 2022-03-13 1372 sector_index++;
b5d67f64f9bc65 Stefan Behrens 2012-03-27 1373 }
a2de733c78fa7a Arne Jansen 2011-03-08 1374
b5d67f64f9bc65 Stefan Behrens 2012-03-27 1375 return 0;
96e369208e65a7 Ilya Dryomov 2011-04-09 1376 }
96e369208e65a7 Ilya Dryomov 2011-04-09 1377
---
0-DAY CI Kernel Test Service
https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH v3 1/3] btrfs: scrub: rename members related to scrub_block::pagev
2022-03-13 10:40 ` [PATCH v3 1/3] btrfs: scrub: rename members related to scrub_block::pagev Qu Wenruo
@ 2022-03-14 13:22 ` David Sterba
0 siblings, 0 replies; 3+ messages in thread
From: David Sterba @ 2022-03-14 13:22 UTC (permalink / raw)
To: Qu Wenruo; +Cc: linux-btrfs
On Sun, Mar 13, 2022 at 06:40:00PM +0800, Qu Wenruo wrote:
> The following will be renamed in this patch:
>
> - scrub_block::pagev -> sectorv
sectors
>
> - scrub_block::page_count -> sector_count
>
> - SCRUB_MAX_PAGES_PER_BLOCK -> SCRUB_MAX_SECTORS_PER_BLOCK
>
> - page_num -> sector_num to iterate scrub_block::sectorv
::sectors
>
> For now scrub_page is not yet renamed, as the current changeset is
> already large enough.
>
> The rename for scrub_page will come in a separate patch.
>
> Signed-off-by: Qu Wenruo <wqu@suse.com>
> ---
> fs/btrfs/scrub.c | 221 +++++++++++++++++++++++------------------------
> 1 file changed, 110 insertions(+), 111 deletions(-)
> @@ -2193,8 +2192,8 @@ static void scrub_missing_raid56_pages(struct scrub_block *sblock)
> {
> struct scrub_ctx *sctx = sblock->sctx;
> struct btrfs_fs_info *fs_info = sctx->fs_info;
> - u64 length = sblock->page_count * PAGE_SIZE;
> - u64 logical = sblock->pagev[0]->logical;
> + u64 length = sblock->sector_count * fs_info->sectorsize;
This should have been also converted to << sectorsize_bits
> + u64 logical = sblock->sectors[0]->logical;
> struct btrfs_io_context *bioc = NULL;
> struct bio *bio;
> struct btrfs_raid_bio *rbio;
> @@ -4058,18 +4057,18 @@ int btrfs_scrub_dev(struct btrfs_fs_info *fs_info, u64 devid, u64 start,
> }
>
> if (fs_info->nodesize >
> - PAGE_SIZE * SCRUB_MAX_PAGES_PER_BLOCK ||
> - fs_info->sectorsize > PAGE_SIZE * SCRUB_MAX_PAGES_PER_BLOCK) {
> + SCRUB_MAX_SECTORS_PER_BLOCK * fs_info->sectorsize ||
And here.
> + fs_info->sectorsize > PAGE_SIZE * SCRUB_MAX_SECTORS_PER_BLOCK) {
> /*
> * would exhaust the array bounds of pagev member in
> * struct scrub_block
> */
> btrfs_err(fs_info,
> - "scrub: size assumption nodesize and sectorsize <= SCRUB_MAX_PAGES_PER_BLOCK (%d <= %d && %d <= %d) fails",
> + "scrub: size assumption nodesize and sectorsize <= SCRUB_MAX_SECTORS_PER_BLOCK (%d <= %d && %d <= %d) fails",
> fs_info->nodesize,
> - SCRUB_MAX_PAGES_PER_BLOCK,
> + SCRUB_MAX_SECTORS_PER_BLOCK,
> fs_info->sectorsize,
> - SCRUB_MAX_PAGES_PER_BLOCK);
> + SCRUB_MAX_SECTORS_PER_BLOCK);
> return -EINVAL;
> }
>
> --
> 2.35.1
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2022-03-14 13:26 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2022-03-13 14:45 [PATCH v3 1/3] btrfs: scrub: rename members related to scrub_block::pagev kernel test robot
-- strict thread matches above, loose matches on Subject: below --
2022-03-13 10:39 [PATCH v3 0/3] btrfs: scrub: big renaming to address the page and sector difference Qu Wenruo
2022-03-13 10:40 ` [PATCH v3 1/3] btrfs: scrub: rename members related to scrub_block::pagev Qu Wenruo
2022-03-14 13:22 ` David Sterba
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.