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 | |
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')
-rw-r--r-- | module/zfs/spa.c | 8 | ||||
-rw-r--r-- | module/zfs/vdev.c | 24 | ||||
-rw-r--r-- | module/zfs/zfs_ioctl.c | 12 |
3 files changed, 10 insertions, 34 deletions
diff --git a/module/zfs/spa.c b/module/zfs/spa.c index f573fe0d7..638ec59ef 100644 --- a/module/zfs/spa.c +++ b/module/zfs/spa.c @@ -26,6 +26,8 @@ * Copyright (c) 2013, 2014, Nexenta Systems, Inc. All rights reserved. * Copyright (c) 2014 Spectra Logic Corporation, All rights reserved. * Copyright 2013 Saso Kiselkov. All rights reserved. + * Copyright (c) 2014 Integros [integros.com] + * Copyright 2016 Toomas Soome <[email protected]> * Copyright (c) 2016 Actifio, Inc. All rights reserved. */ @@ -536,12 +538,6 @@ spa_prop_validate(spa_t *spa, nvlist_t *props) error = SET_ERROR(ENOTSUP); } else if ((error = dsl_prop_get_int_ds(dmu_objset_ds(os), - zfs_prop_to_name(ZFS_PROP_RECORDSIZE), - &propval)) == 0 && - propval > SPA_OLD_MAXBLOCKSIZE) { - error = SET_ERROR(ENOTSUP); - } else if ((error = - dsl_prop_get_int_ds(dmu_objset_ds(os), zfs_prop_to_name(ZFS_PROP_DNODESIZE), &propval)) == 0 && propval != ZFS_DNSIZE_LEGACY) { 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); } diff --git a/module/zfs/zfs_ioctl.c b/module/zfs/zfs_ioctl.c index 6df61fecb..534df5a06 100644 --- a/module/zfs/zfs_ioctl.c +++ b/module/zfs/zfs_ioctl.c @@ -30,6 +30,8 @@ * Copyright (c) 2011, 2015 by Delphix. All rights reserved. * Copyright (c) 2013 by Saso Kiselkov. All rights reserved. * Copyright (c) 2013 Steven Hartland. All rights reserved. + * Copyright (c) 2014 Integros [integros.com] + * Copyright 2016 Toomas Soome <[email protected]> * Copyright (c) 2016 Actifio, Inc. All rights reserved. */ @@ -3857,16 +3859,6 @@ zfs_check_settable(const char *dsname, nvpair_t *pair, cred_t *cr) spa_t *spa; /* - * If this is a bootable dataset then - * we don't allow large (>128K) blocks, - * because GRUB doesn't support them. - */ - if (zfs_is_bootfs(dsname) && - intval > SPA_OLD_MAXBLOCKSIZE) { - return (SET_ERROR(ERANGE)); - } - - /* * We don't allow setting the property above 1MB, * unless the tunable has been changed. */ |