diff options
author | Matthew Ahrens <[email protected]> | 2012-08-24 07:12:46 -0700 |
---|---|---|
committer | Brian Behlendorf <[email protected]> | 2012-10-03 13:59:02 -0700 |
commit | 04434775b7f3aa55fbbcf2064cfb9f5f5c436e64 (patch) | |
tree | 21331d944ad68c5ba83cd01cfea94cbfcb001566 /module/zfs/zvol.c | |
parent | 0677cb6f52a1df13976fa144e46f07af2f48b6b9 (diff) |
Illumos #3100: zvol rename fails with EBUSY when dirty.
illumos/illumos-gate@2e2c135528b3edfe9aaf67d1f004dc0202fa1a54
Illumos changeset: 13780:6da32a929222
3100 zvol rename fails with EBUSY when dirty
Reviewed by: Christopher Siden <[email protected]>
Reviewed by: Adam H. Leventhal <[email protected]>
Reviewed by: George Wilson <[email protected]>
Reviewed by: Garrett D'Amore <[email protected]>
Approved by: Eric Schrock <[email protected]>
Ported-by: Etienne Dechamps <[email protected]>
Signed-off-by: Brian Behlendorf <[email protected]>
Closes #995
Diffstat (limited to 'module/zfs/zvol.c')
-rw-r--r-- | module/zfs/zvol.c | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/module/zfs/zvol.c b/module/zfs/zvol.c index a182f79d3..5668e1dc0 100644 --- a/module/zfs/zvol.c +++ b/module/zfs/zvol.c @@ -901,8 +901,18 @@ zvol_last_close(zvol_state_t *zv) { zil_close(zv->zv_zilog); zv->zv_zilog = NULL; + dmu_buf_rele(zv->zv_dbuf, zvol_tag); zv->zv_dbuf = NULL; + + /* + * Evict cached data + */ + if (dsl_dataset_is_dirty(dmu_objset_ds(zv->zv_objset)) && + !(zv->zv_flags & ZVOL_RDONLY)) + txg_wait_synced(dmu_objset_pool(zv->zv_objset), 0); + (void) dmu_objset_evict_dbufs(zv->zv_objset); + dmu_objset_disown(zv->zv_objset, zvol_tag); zv->zv_objset = NULL; } |