mirror of
https://git.proxmox.com/git/mirror_zfs.git
synced 2026-05-25 19:57:43 +03:00
Rebase master to b121
This commit is contained in:
+22
-27
@@ -1574,9 +1574,12 @@ spa_load(spa_t *spa, nvlist_t *config, spa_load_state_t state, int mosconfig)
|
||||
/*
|
||||
* If the config cache is stale, or we have uninitialized
|
||||
* metaslabs (see spa_vdev_add()), then update the config.
|
||||
*
|
||||
* If spa_load_verbatim is true, trust the current
|
||||
* in-core spa_config and update the disk labels.
|
||||
*/
|
||||
if (config_cache_txg != spa->spa_config_txg ||
|
||||
state == SPA_LOAD_IMPORT)
|
||||
state == SPA_LOAD_IMPORT || spa->spa_load_verbatim)
|
||||
need_update = B_TRUE;
|
||||
|
||||
for (int c = 0; c < rvd->vdev_children; c++)
|
||||
@@ -2271,6 +2274,7 @@ spa_create(const char *pool, nvlist_t *nvroot, nvlist_t *props,
|
||||
|
||||
if (version >= SPA_VERSION_ZPOOL_HISTORY && history_str != NULL)
|
||||
(void) spa_history_log(spa, history_str, LOG_CMD_POOL_CREATE);
|
||||
spa_history_log_version(spa, LOG_POOL_CREATE);
|
||||
|
||||
spa->spa_minref = refcount_count(&spa->spa_refcount);
|
||||
|
||||
@@ -2404,6 +2408,7 @@ spa_import_rootpool(char *devpath, char *devid)
|
||||
|
||||
spa = spa_add(pname, NULL);
|
||||
spa->spa_is_root = B_TRUE;
|
||||
spa->spa_load_verbatim = B_TRUE;
|
||||
|
||||
/*
|
||||
* Build up a vdev tree based on the boot device's label config.
|
||||
@@ -2459,6 +2464,7 @@ spa_import_rootpool(char *devpath, char *devid)
|
||||
|
||||
VERIFY(nvlist_dup(config, &spa->spa_config, 0) == 0);
|
||||
error = 0;
|
||||
spa_history_log_version(spa, LOG_POOL_IMPORT);
|
||||
out:
|
||||
spa_config_enter(spa, SCL_ALL, FTAG, RW_WRITER);
|
||||
vdev_free(rvd);
|
||||
@@ -2491,6 +2497,8 @@ spa_import_verbatim(const char *pool, nvlist_t *config, nvlist_t *props)
|
||||
zpool_prop_to_name(ZPOOL_PROP_ALTROOT), &altroot);
|
||||
spa = spa_add(pool, altroot);
|
||||
|
||||
spa->spa_load_verbatim = B_TRUE;
|
||||
|
||||
VERIFY(nvlist_dup(config, &spa->spa_config, 0) == 0);
|
||||
|
||||
if (props != NULL)
|
||||
@@ -2499,6 +2507,7 @@ spa_import_verbatim(const char *pool, nvlist_t *config, nvlist_t *props)
|
||||
spa_config_sync(spa, B_FALSE, B_TRUE);
|
||||
|
||||
mutex_exit(&spa_namespace_lock);
|
||||
spa_history_log_version(spa, LOG_POOL_IMPORT);
|
||||
|
||||
return (0);
|
||||
}
|
||||
@@ -2624,7 +2633,7 @@ spa_import(const char *pool, nvlist_t *config, nvlist_t *props)
|
||||
/*
|
||||
* Update the config cache to include the newly-imported pool.
|
||||
*/
|
||||
spa_config_update_common(spa, SPA_CONFIG_UPDATE_POOL, B_FALSE);
|
||||
spa_config_update(spa, SPA_CONFIG_UPDATE_POOL);
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -2634,6 +2643,7 @@ spa_import(const char *pool, nvlist_t *config, nvlist_t *props)
|
||||
spa_async_request(spa, SPA_ASYNC_AUTOEXPAND);
|
||||
|
||||
mutex_exit(&spa_namespace_lock);
|
||||
spa_history_log_version(spa, LOG_POOL_IMPORT);
|
||||
|
||||
return (0);
|
||||
}
|
||||
@@ -2991,7 +3001,6 @@ spa_vdev_attach(spa_t *spa, uint64_t guid, nvlist_t *nvroot, int replacing)
|
||||
vdev_t *rvd = spa->spa_root_vdev;
|
||||
vdev_t *oldvd, *newvd, *newrootvd, *pvd, *tvd;
|
||||
vdev_ops_t *pvops;
|
||||
dmu_tx_t *tx;
|
||||
char *oldvdpath, *newvdpath;
|
||||
int newvd_isspare;
|
||||
int error;
|
||||
@@ -3147,17 +3156,11 @@ spa_vdev_attach(spa_t *spa, uint64_t guid, nvlist_t *nvroot, int replacing)
|
||||
|
||||
(void) spa_vdev_exit(spa, newrootvd, open_txg, 0);
|
||||
|
||||
tx = dmu_tx_create_dd(spa_get_dsl(spa)->dp_mos_dir);
|
||||
if (dmu_tx_assign(tx, TXG_WAIT) == 0) {
|
||||
spa_history_internal_log(LOG_POOL_VDEV_ATTACH, spa, tx,
|
||||
CRED(), "%s vdev=%s %s vdev=%s",
|
||||
replacing && newvd_isspare ? "spare in" :
|
||||
replacing ? "replace" : "attach", newvdpath,
|
||||
replacing ? "for" : "to", oldvdpath);
|
||||
dmu_tx_commit(tx);
|
||||
} else {
|
||||
dmu_tx_abort(tx);
|
||||
}
|
||||
spa_history_internal_log(LOG_POOL_VDEV_ATTACH, spa, NULL,
|
||||
CRED(), "%s vdev=%s %s vdev=%s",
|
||||
replacing && newvd_isspare ? "spare in" :
|
||||
replacing ? "replace" : "attach", newvdpath,
|
||||
replacing ? "for" : "to", oldvdpath);
|
||||
|
||||
spa_strfree(oldvdpath);
|
||||
spa_strfree(newvdpath);
|
||||
@@ -3747,19 +3750,11 @@ spa_async_thread(spa_t *spa)
|
||||
* then log an internal history event.
|
||||
*/
|
||||
if (space_update) {
|
||||
dmu_tx_t *tx;
|
||||
|
||||
tx = dmu_tx_create_dd(spa_get_dsl(spa)->dp_mos_dir);
|
||||
if (dmu_tx_assign(tx, TXG_WAIT) == 0) {
|
||||
spa_history_internal_log(LOG_POOL_VDEV_ONLINE,
|
||||
spa, tx, CRED(),
|
||||
"pool '%s' size: %llu(+%llu)",
|
||||
spa_name(spa), spa_get_space(spa),
|
||||
space_update);
|
||||
dmu_tx_commit(tx);
|
||||
} else {
|
||||
dmu_tx_abort(tx);
|
||||
}
|
||||
spa_history_internal_log(LOG_POOL_VDEV_ONLINE,
|
||||
spa, NULL, CRED(),
|
||||
"pool '%s' size: %llu(+%llu)",
|
||||
spa_name(spa), spa_get_space(spa),
|
||||
space_update);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user