diff options
Diffstat (limited to 'fs/btrfs/scrub.c')
-rw-r--r-- | fs/btrfs/scrub.c | 12 |
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) { |
1377 | leave_nomem: | 1381 | leave_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, |