Minor spa portability fixes

- FreeBSD's rootpool import code uses spa_config_parse
- Move the zvol_create_minors call out from under the
  spa_namespace_lock in spa_import. It isn't needed and it causes
  a lock order reversal on FreeBSD.

Reviewed-by: Igor Kozhukhov <igor@dilos.org>
Reviewed-by: Jorgen Lundman <lundman@lundman.net>
Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Signed-off-by: Matt Macy <mmacy@FreeBSD.org>
Closes #9499
This commit is contained in:
Matthew Macy 2019-10-28 09:51:53 -07:00 committed by Brian Behlendorf
parent 7125a109dc
commit 4a22ba5be0
2 changed files with 6 additions and 3 deletions

View File

@ -845,6 +845,9 @@ extern void spa_config_set(spa_t *spa, nvlist_t *config);
extern nvlist_t *spa_config_generate(spa_t *spa, vdev_t *vd, uint64_t txg, extern nvlist_t *spa_config_generate(spa_t *spa, vdev_t *vd, uint64_t txg,
int getstats); int getstats);
extern void spa_config_update(spa_t *spa, int what); extern void spa_config_update(spa_t *spa, int what);
extern int spa_config_parse(spa_t *spa, vdev_t **vdp, nvlist_t *nv,
vdev_t *parent, uint_t id, int atype);
/* /*
* Miscellaneous SPA routines in spa_misc.c * Miscellaneous SPA routines in spa_misc.c

View File

@ -1406,7 +1406,7 @@ spa_deactivate(spa_t *spa)
* in the CLOSED state. This will prep the pool before open/creation/import. * in the CLOSED state. This will prep the pool before open/creation/import.
* All vdev validation is done by the vdev_alloc() routine. * All vdev validation is done by the vdev_alloc() routine.
*/ */
static int int
spa_config_parse(spa_t *spa, vdev_t **vdp, nvlist_t *nv, vdev_t *parent, spa_config_parse(spa_t *spa, vdev_t **vdp, nvlist_t *nv, vdev_t *parent,
uint_t id, int atype) uint_t id, int atype)
{ {
@ -6081,10 +6081,10 @@ spa_import(char *pool, nvlist_t *config, nvlist_t *props, uint64_t flags)
spa_event_notify(spa, NULL, NULL, ESC_ZFS_POOL_IMPORT); spa_event_notify(spa, NULL, NULL, ESC_ZFS_POOL_IMPORT);
zvol_create_minors(spa, pool, B_TRUE);
mutex_exit(&spa_namespace_lock); mutex_exit(&spa_namespace_lock);
zvol_create_minors(spa, pool, B_TRUE);
return (0); return (0);
} }