diff options
author | Brian Behlendorf <[email protected]> | 2017-04-13 09:40:00 -0700 |
---|---|---|
committer | GitHub <[email protected]> | 2017-04-13 09:40:00 -0700 |
commit | e550644f0cdd5c3f312e8fc92846b8b1fc4290f2 (patch) | |
tree | 2c9c5cf7610bb908d40489edd3c67ae199955265 /module/zfs/vdev.c | |
parent | a167aa7cd45b045047a75c07e06f3697bed8440c (diff) |
OpenZFS 5120 - zfs should allow large block/gzip/raidz boot pool (loader project)
Authored by: Toomas Soome <[email protected]>
Reviewed by: George Wilson <[email protected]>
Reviewed by: Yuri Pankov <[email protected]>
Reviewed by: Andrew Stormont <[email protected]>
Reviewed by: Matthew Ahrens <[email protected]>
Approved by: Robert Mustacchi <[email protected]>
Reviewed-by: Giuseppe Di Natale <[email protected]>
Reviewed-by: George Melikov <[email protected]>
Reviewed-by: Don Brady <[email protected]>
Ported-by: Brian Behlendorf <[email protected]>
Porting Notes:
- grub-2.02-beta2-422-gcad5cc0 includes support for large blocks.
- Commit 8aab121 allowed GZIP[1-9].
- Grub allows pools with multiple top-level vdevs.
OpenZFS-issue: https://www.illumos.org/issues/5120
OpenZFS-commit: https://github.com/openzfs/openzfs/commit/c8811bd
Closes #6007
Diffstat (limited to 'module/zfs/vdev.c')
-rw-r--r-- | module/zfs/vdev.c | 24 |
1 files changed, 6 insertions, 18 deletions
diff --git a/module/zfs/vdev.c b/module/zfs/vdev.c index 40293ec1f..caf92899d 100644 --- a/module/zfs/vdev.c +++ b/module/zfs/vdev.c @@ -23,6 +23,8 @@ * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2011, 2015 by Delphix. All rights reserved. * Copyright 2015 Nexenta Systems, Inc. All rights reserved. + * Copyright (c) 2014 Integros [integros.com] + * Copyright 2016 Toomas Soome <[email protected]> */ #include <sys/zfs_context.h> @@ -3542,36 +3544,22 @@ vdev_set_state(vdev_t *vd, boolean_t isopen, vdev_state_t state, vdev_aux_t aux) /* * Check the vdev configuration to ensure that it's capable of supporting - * a root pool. + * a root pool. We do not support partial configuration. */ boolean_t vdev_is_bootable(vdev_t *vd) { -#if defined(__sun__) || defined(__sun) - /* - * Currently, we do not support RAID-Z or partial configuration. - * In addition, only a single top-level vdev is allowed and none of the - * leaves can be wholedisks. - */ - int c; - if (!vd->vdev_ops->vdev_op_leaf) { - char *vdev_type = vd->vdev_ops->vdev_op_type; + const char *vdev_type = vd->vdev_ops->vdev_op_type; - if (strcmp(vdev_type, VDEV_TYPE_ROOT) == 0 && - vd->vdev_children > 1) { + if (strcmp(vdev_type, VDEV_TYPE_MISSING) == 0) return (B_FALSE); - } else if (strcmp(vdev_type, VDEV_TYPE_RAIDZ) == 0 || - strcmp(vdev_type, VDEV_TYPE_MISSING) == 0) { - return (B_FALSE); - } } - for (c = 0; c < vd->vdev_children; c++) { + for (int c = 0; c < vd->vdev_children; c++) { if (!vdev_is_bootable(vd->vdev_child[c])) return (B_FALSE); } -#endif /* __sun__ || __sun */ return (B_TRUE); } |