Mercurial > illumos > git > illumos-joyent
changeset 25599:2382a653be35
13358 dmu_objset_upgrade_stop() needs to wait
12397 12254 broke the zfs test suite for older python versions
Portions contributed by: Tom Caputi <tcaputi@datto.com>
Portions contributed by: Nasf-Fan <fan.yong@intel.com>
Portions contributed by: Gvozden Neskovic <neskovic@gmail.com>
Reviewed by: Jason King <jason.king@joyent.com>
Reviewed by: Igor Kozhukhov <igor@dilos.org>
Approved by: Dan McDonald <danmcd@joyent.com>
author | Andy Fiddaman <omnios@citrus-it.co.uk> |
---|---|
date | Sat, 12 Dec 2020 00:38:47 +0000 |
parents | 1ac626b08c2e |
children | 37aafd26785f |
files | usr/src/test/test-runner/cmd/run usr/src/uts/common/fs/zfs/dmu_objset.c |
diffstat | 2 files changed, 13 insertions(+), 5 deletions(-) [+] |
line wrap: on
line diff
--- a/usr/src/test/test-runner/cmd/run Sat Jan 11 11:00:06 2020 +0000 +++ b/usr/src/test/test-runner/cmd/run Sat Dec 12 00:38:47 2020 +0000 @@ -148,7 +148,7 @@ for easy sorting/merging later. """ fd = self.fileno() - buf = os.read(fd, 4096).decode('utf-8') + buf = os.read(fd, 4096).decode('utf-8', errors='ignore') if not buf: return None if '\n' not in buf:
--- a/usr/src/uts/common/fs/zfs/dmu_objset.c Sat Jan 11 11:00:06 2020 +0000 +++ b/usr/src/uts/common/fs/zfs/dmu_objset.c Sat Dec 12 00:38:47 2020 +0000 @@ -854,7 +854,7 @@ dp = ds->ds_dir->dd_pool; dsl_pool_config_enter(dp, FTAG); - dsl_dataset_disown(ds, 0, tag); + dsl_dataset_disown(ds, decrypt, tag); VERIFY0(dsl_dataset_own(dp, name, (decrypt) ? DS_HOLD_FLAG_DECRYPT : 0, tag, newds)); dsl_pool_config_exit(dp, FTAG); @@ -983,6 +983,7 @@ mutex_destroy(&os->os_userused_lock); mutex_destroy(&os->os_obj_lock); mutex_destroy(&os->os_user_ptr_lock); + mutex_destroy(&os->os_upgrade_lock); for (int i = 0; i < TXG_SIZE; i++) { multilist_destroy(os->os_dirty_dnodes[i]); } @@ -1479,10 +1480,15 @@ mutex_enter(&os->os_upgrade_lock); os->os_upgrade_status = EINTR; if (!os->os_upgrade_exit) { + int status; + mutex_exit(&os->os_upgrade_lock); - os->os_upgrade_status = os->os_upgrade_cb(os); + status = os->os_upgrade_cb(os); + mutex_enter(&os->os_upgrade_lock); + + os->os_upgrade_status = status; } os->os_upgrade_exit = B_TRUE; os->os_upgrade_id = 0; @@ -1510,6 +1516,8 @@ dsl_dataset_long_rele(dmu_objset_ds(os), upgrade_tag); os->os_upgrade_status = ENOMEM; } + } else { + dsl_dataset_long_rele(dmu_objset_ds(os), upgrade_tag); } mutex_exit(&os->os_upgrade_lock); } @@ -1522,10 +1530,10 @@ if (os->os_upgrade_id != 0) { taskqid_t tid = os->os_upgrade_id; - os->os_upgrade_id = 0; mutex_exit(&os->os_upgrade_lock); taskq_wait_id(os->os_spa->spa_upgrade_taskq, tid); + txg_wait_synced(os->os_spa->spa_dsl_pool, 0); } else { mutex_exit(&os->os_upgrade_lock); } @@ -2226,7 +2234,7 @@ if (flags & DN_ID_OLD_EXIST) { dn->dn_newuid = dn->dn_olduid; dn->dn_newgid = dn->dn_oldgid; - dn->dn_newgid = dn->dn_oldprojid; + dn->dn_newprojid = dn->dn_oldprojid; } else { dn->dn_newuid = 0; dn->dn_newgid = 0;