mirror of
https://git.proxmox.com/git/mirror_zfs.git
synced 2026-05-24 19:28:53 +03:00
Illumos #3875
3875 panic in zfs_root() after failed rollback Reviewed by: Jerry Jelinek <jerry.jelinek@joyent.com> Reviewed by: Matthew Ahrens <mahrens@delphix.com> Approved by: Gordon Ross <gwr@nexenta.com> References: https://www.illumos.org/issues/3875 illumos/illumos-gate@91948b51b8 Ported-by: Richard Yao <ryao@gentoo.org> Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov> Issue #1775
This commit is contained in:
committed by
Brian Behlendorf
parent
1958067629
commit
831baf06ef
@@ -517,6 +517,38 @@ dmu_objset_rele(objset_t *os, void *tag)
|
||||
dsl_pool_rele(dp, tag);
|
||||
}
|
||||
|
||||
/*
|
||||
* When we are called, os MUST refer to an objset associated with a dataset
|
||||
* that is owned by 'tag'; that is, is held and long held by 'tag' and ds_owner
|
||||
* == tag. We will then release and reacquire ownership of the dataset while
|
||||
* holding the pool config_rwlock to avoid intervening namespace or ownership
|
||||
* changes may occur.
|
||||
*
|
||||
* This exists solely to accommodate zfs_ioc_userspace_upgrade()'s desire to
|
||||
* release the hold on its dataset and acquire a new one on the dataset of the
|
||||
* same name so that it can be partially torn down and reconstructed.
|
||||
*/
|
||||
void
|
||||
dmu_objset_refresh_ownership(objset_t *os, void *tag)
|
||||
{
|
||||
dsl_pool_t *dp;
|
||||
dsl_dataset_t *ds, *newds;
|
||||
char name[MAXNAMELEN];
|
||||
|
||||
ds = os->os_dsl_dataset;
|
||||
VERIFY3P(ds, !=, NULL);
|
||||
VERIFY3P(ds->ds_owner, ==, tag);
|
||||
VERIFY(dsl_dataset_long_held(ds));
|
||||
|
||||
dsl_dataset_name(ds, name);
|
||||
dp = dmu_objset_pool(os);
|
||||
dsl_pool_config_enter(dp, FTAG);
|
||||
dmu_objset_disown(os, tag);
|
||||
VERIFY0(dsl_dataset_own(dp, name, tag, &newds));
|
||||
VERIFY3P(newds, ==, os->os_dsl_dataset);
|
||||
dsl_pool_config_exit(dp, FTAG);
|
||||
}
|
||||
|
||||
void
|
||||
dmu_objset_disown(objset_t *os, void *tag)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user