HomeFreeBSD

Add ddt_object_count() error handling

Description

Add ddt_object_count() error handling

The interface for the ddt_zap_count() function assumes it can
never fail. However, internally ddt_zap_count() is implemented
with zap_count() which can potentially fail. Now because there
was no way to return the error to the caller a VERIFY was used
to ensure this case never happens.

Unfortunately, it has been observed that pools can be damaged in
such a way that zap_count() fails. The result is that the pool can
not be imported without hitting the VERIFY and crashing the system.

This patch reworks ddt_object_count() so the error can be safely
caught and returned to the caller. This allows a pool which has
be damaged in this way to be safely rewound for import.

Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>
Closes #910

Details

Provenance
Brian Behlendorf <behlendorf1@llnl.gov>Authored on Oct 26 2012, 5:01 PM
Parents
rG178e73b37629: Revert "Don't ashift-align vdev read requests."
Branches
Unknown
Tags
Unknown

Event Timeline

Brian Behlendorf <behlendorf1@llnl.gov> committed rGe8fd45a0f975: Add ddt_object_count() error handling (authored by Brian Behlendorf <behlendorf1@llnl.gov>).Oct 29 2012, 3:57 PM