Add zvol_open() error handling for readonly property

Rather than ASSERT when for some reason the readonly property of
a zvol can't be read cleanly handle the failure.

Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>
Closes #1343
This commit is contained in:
Brian Behlendorf 2014-12-19 16:28:48 -08:00
parent f9f431cd28
commit a127e841de
1 changed files with 4 additions and 1 deletions

View File

@ -932,6 +932,10 @@ zvol_first_open(zvol_state_t *zv)
return (-SET_ERROR(ERESTARTSYS)); return (-SET_ERROR(ERESTARTSYS));
} }
error = dsl_prop_get_integer(zv->zv_name, "readonly", &ro, NULL);
if (error)
goto out_mutex;
/* lie and say we're read-only */ /* lie and say we're read-only */
error = dmu_objset_own(zv->zv_name, DMU_OST_ZVOL, 1, zvol_tag, &os); error = dmu_objset_own(zv->zv_name, DMU_OST_ZVOL, 1, zvol_tag, &os);
if (error) if (error)
@ -954,7 +958,6 @@ zvol_first_open(zvol_state_t *zv)
zv->zv_volsize = volsize; zv->zv_volsize = volsize;
zv->zv_zilog = zil_open(os, zvol_get_data); zv->zv_zilog = zil_open(os, zvol_get_data);
VERIFY(dsl_prop_get_integer(zv->zv_name, "readonly", &ro, NULL) == 0);
if (ro || dmu_objset_is_snapshot(os) || if (ro || dmu_objset_is_snapshot(os) ||
!spa_writeable(dmu_objset_spa(os))) { !spa_writeable(dmu_objset_spa(os))) {
set_disk_ro(zv->zv_disk, 1); set_disk_ro(zv->zv_disk, 1);