Fix a regression introduced in r274337 (large block support)
In dsl_dataset_hold_obj() we used zap_contains(.., DS_FIELD_LARGE_BLOCKS) to determine whether the extensible (zapifyed) dataset have large blocks. The code expects the result be either 0 (found) or ENOENT (not found), however reused the variable 'err' which later code expects to be 0. Fix this by adopting similar code construct that is used later for DS_FIELD_BOOKMARK_NAMES, which uses a temporary variable zaperr to catch errors from zap_* rountines. Reported by: Peter J. Creath (on FreeNAS; FreeNAS bug #6848) Illumos issue: 5393 spurious failures from dsl_dataset_hold_obj() Reviewed by: mahrens Sponsored by: iXsystems, Inc. X-MFC with: r274337
This commit is contained in:
parent
01ca58b23c
commit
26f96d922b
@ -409,11 +409,11 @@ dsl_dataset_hold_obj(dsl_pool_t *dp, uint64_t dsobj, void *tag,
|
||||
offsetof(dmu_sendarg_t, dsa_link));
|
||||
|
||||
if (doi.doi_type == DMU_OTN_ZAP_METADATA) {
|
||||
err = zap_contains(mos, dsobj, DS_FIELD_LARGE_BLOCKS);
|
||||
if (err == 0)
|
||||
int zaperr = zap_contains(mos, dsobj, DS_FIELD_LARGE_BLOCKS);
|
||||
if (zaperr != ENOENT) {
|
||||
VERIFY0(zaperr);
|
||||
ds->ds_large_blocks = B_TRUE;
|
||||
else
|
||||
ASSERT3U(err, ==, ENOENT);
|
||||
}
|
||||
}
|
||||
|
||||
if (err == 0) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user