HomeFreeBSD

ddt: ensure ddt objects exist before trying to get stats from them

Description

ddt: ensure ddt objects exist before trying to get stats from them

ddt_get_dedup_histogram() was actually checking it, just in an extremely
cursed way. ddt_get_dedup_object_stats() wasn't, but wasn't being called
from a dangerous place so no one noticed.

These checks are necessary, because spa_ddt[] is not populated until
spa_load(), but the spa can exist before that, while being created, and
as vdevs and metaslabs are initialised the space accounting functions
will be called to update pool space counts.

Probably the whole create path doesn't need to go asking for space
accounting from metadata subsystems until after the pool is created.
This will at least catch misuse.

Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Signed-off-by: Rob Norris <rob.norris@klarasystems.com>
Sponsored-by: Klara, Inc.
Sponsored-by: iXsystems, Inc.
Closes #15887

Details

Provenance
rob.norris_klarasystems.comAuthored on Jun 15 2023, 6:10 AM
Brian Behlendorf <behlendorf1@llnl.gov>Committed on Feb 15 2024, 7:45 PM
Parents
rG3bad70040a7b: ddt: remove struct names and forward declarations
Branches
Unknown
Tags
Unknown