OpenZFS 9454 - ::zfs_blkstats should count embedded blocks
When we do a scrub or resilver, ZFS counts the different types of blocks,
which can be printed by the ::zfs_blkstats mdb dcmd. However, it fails to
count embedded blocks.
Porting notes:
* Commit d4a72f23
moved count_blocks under a BP_IS_EMBEDDED conditional
as part of the sequential resilver functionality. Since phys_birth
would be zero that case should never happen as described above. This
is confirmed by the code coverage analysis. Remove the conditional
to realign that aspect of this function with OpenZFS.
Authored by: Matthew Ahrens <mahrens@delphix.com>
Reviewed by: Dan Kimmel <dan.kimmel@delphix.com>
Reviewed by: George Wilson <george.wilson@delphix.com>
Reviewed by: George Melikov <mail@gmelikov.ru>
Reviewed by: Tom Caputi <tcaputi@datto.com>
Ported-by: Brian Behlendorf <behlendorf1@llnl.gov>
Approved by: Robert Mustacchi <rm@joyent.com>
OpenZFS-issue: https://www.illumos.org/issues/9454
OpenZFS-commit: https://github.com/openzfs/openzfs/commit/d8a447a7
Closes #7697
This commit is contained in:
parent
ab11916583
commit
00c405b4b5
|
@ -3565,14 +3565,14 @@ dsl_scan_scrub_cb(dsl_pool_t *dp,
|
|||
boolean_t needs_io = B_FALSE;
|
||||
int zio_flags = ZIO_FLAG_SCAN_THREAD | ZIO_FLAG_RAW | ZIO_FLAG_CANFAIL;
|
||||
|
||||
count_block(scn, dp->dp_blkstats, bp);
|
||||
|
||||
if (phys_birth <= scn->scn_phys.scn_min_txg ||
|
||||
phys_birth >= scn->scn_phys.scn_max_txg)
|
||||
return (0);
|
||||
|
||||
if (BP_IS_EMBEDDED(bp)) {
|
||||
count_block(scn, dp->dp_blkstats, bp);
|
||||
return (0);
|
||||
}
|
||||
/* Embedded BP's have phys_birth==0, so we reject them above. */
|
||||
ASSERT(!BP_IS_EMBEDDED(bp));
|
||||
|
||||
ASSERT(DSL_SCAN_IS_SCRUB_RESILVER(scn));
|
||||
if (scn->scn_phys.scn_func == POOL_SCAN_SCRUB) {
|
||||
|
|
Loading…
Reference in New Issue