aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorZhao Lei <zhaolei@cn.fujitsu.com>2015-08-19 10:39:18 -0400
committerChris Mason <clm@fb.com>2015-11-10 22:27:00 -0500
commit4734b7ed79e1230602927a38bc4d04dbe9dd09c1 (patch)
tree8189e23882ebcf6f8634a626c0d9db4f41df1c78
parent9799d2c32bef6fba098fbef763002bc8d4851a2c (diff)
btrfs: scrub: setup all fields for sblock_to_check
scrub_setup_recheck_block() isn't setup all necessary fields for sblock_to_check because history reason. So current code need more arguments in severial functions, and more local variables, just to passing these lacked values to necessary place. This patch setup above fields to sblock_to_check in scrub_setup_recheck_block(), for: 1: more cleanup for function arg, local variable 2: to make sblock_to_check complete, then we can use sblock_to_check without concern about some uninitialized member. Signed-off-by: Zhao Lei <zhaolei@cn.fujitsu.com> Signed-off-by: Chris Mason <clm@fb.com>
-rw-r--r--fs/btrfs/scrub.c12
1 files changed, 12 insertions, 0 deletions
diff --git a/fs/btrfs/scrub.c b/fs/btrfs/scrub.c
index 3e2755eb0f08..12ed8a77f11c 100644
--- a/fs/btrfs/scrub.c
+++ b/fs/btrfs/scrub.c
@@ -1318,6 +1318,9 @@ static int scrub_setup_recheck_block(struct scrub_block *original_sblock,
1318 struct btrfs_fs_info *fs_info = sctx->dev_root->fs_info; 1318 struct btrfs_fs_info *fs_info = sctx->dev_root->fs_info;
1319 u64 length = original_sblock->page_count * PAGE_SIZE; 1319 u64 length = original_sblock->page_count * PAGE_SIZE;
1320 u64 logical = original_sblock->pagev[0]->logical; 1320 u64 logical = original_sblock->pagev[0]->logical;
1321 u64 generation = original_sblock->pagev[0]->generation;
1322 u64 flags = original_sblock->pagev[0]->flags;
1323 u64 have_csum = original_sblock->pagev[0]->have_csum;
1321 struct scrub_recover *recover; 1324 struct scrub_recover *recover;
1322 struct btrfs_bio *bbio; 1325 struct btrfs_bio *bbio;
1323 u64 sublen; 1326 u64 sublen;
@@ -1372,6 +1375,7 @@ static int scrub_setup_recheck_block(struct scrub_block *original_sblock,
1372 1375
1373 sblock = sblocks_for_recheck + mirror_index; 1376 sblock = sblocks_for_recheck + mirror_index;
1374 sblock->sctx = sctx; 1377 sblock->sctx = sctx;
1378
1375 page = kzalloc(sizeof(*page), GFP_NOFS); 1379 page = kzalloc(sizeof(*page), GFP_NOFS);
1376 if (!page) { 1380 if (!page) {
1377leave_nomem: 1381leave_nomem:
@@ -1383,7 +1387,15 @@ leave_nomem:
1383 } 1387 }
1384 scrub_page_get(page); 1388 scrub_page_get(page);
1385 sblock->pagev[page_index] = page; 1389 sblock->pagev[page_index] = page;
1390 page->sblock = sblock;
1391 page->flags = flags;
1392 page->generation = generation;
1386 page->logical = logical; 1393 page->logical = logical;
1394 page->have_csum = have_csum;
1395 if (have_csum)
1396 memcpy(page->csum,
1397 original_sblock->pagev[0]->csum,
1398 sctx->csum_size);
1387 1399
1388 scrub_stripe_index_and_offset(logical, 1400 scrub_stripe_index_and_offset(logical,
1389 bbio->map_type, 1401 bbio->map_type,