Mercurial > illumos > illumos-gate
changeset 11689:ac2c63b73009
6917482 zvol_dumpify() needs to ensure no writes are in flight before doing traverse
6851545 zvols do not give correct unit values to the DKIOCINFO ioctl
author | Eric Taylor <Eric.Taylor@Sun.COM> |
---|---|
date | Thu, 18 Feb 2010 10:41:35 -0700 |
parents | ff764624fbc9 |
children | 1c19a1778a4f |
files | usr/src/uts/common/fs/zfs/zvol.c |
diffstat | 1 files changed, 5 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/usr/src/uts/common/fs/zfs/zvol.c Thu Feb 18 12:22:26 2010 -0500 +++ b/usr/src/uts/common/fs/zfs/zvol.c Thu Feb 18 10:41:35 2010 -0700 @@ -300,6 +300,7 @@ static int zvol_get_lbas(zvol_state_t *zv) { + objset_t *os = zv->zv_objset; struct maparg ma; int err; @@ -307,7 +308,9 @@ ma.ma_blks = 0; zvol_free_extents(zv); - err = traverse_dataset(dmu_objset_ds(zv->zv_objset), 0, + /* commit any in-flight changes before traversing the dataset */ + txg_wait_synced(dmu_objset_pool(os), 0); + err = traverse_dataset(dmu_objset_ds(os), 0, TRAVERSE_PRE | TRAVERSE_PREFETCH_METADATA, zvol_map_block, &ma); if (err || ma.ma_blks != (zv->zv_volsize / zv->zv_volblocksize)) { zvol_free_extents(zv); @@ -1465,6 +1468,7 @@ (void) strcpy(dki.dki_cname, "zvol"); (void) strcpy(dki.dki_dname, "zvol"); dki.dki_ctype = DKC_UNKNOWN; + dki.dki_unit = getminor(dev); dki.dki_maxtransfer = 1 << (SPA_MAXBLOCKSHIFT - zv->zv_min_bs); mutex_exit(&zvol_state_lock); if (ddi_copyout(&dki, (void *)arg, sizeof (dki), flag))