git://git.camperquake.de
/
zfs.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Linux 3.8 compat: Support CONFIG_UIDGID_STRICT_TYPE_CHECKS
[zfs.git]
/
module
/
zfs
/
zfeature.c
diff --git
a/module/zfs/zfeature.c
b/module/zfs/zfeature.c
index
de9d165
..
c09b32d
100644
(file)
--- a/
module/zfs/zfeature.c
+++ b/
module/zfs/zfeature.c
@@
-173,7
+173,7
@@
typedef enum {
*/
boolean_t
feature_is_supported(objset_t *os, uint64_t obj, uint64_t desc_obj,
*/
boolean_t
feature_is_supported(objset_t *os, uint64_t obj, uint64_t desc_obj,
- nvlist_t *unsup_feat)
+ nvlist_t *unsup_feat
, nvlist_t *enabled_feat
)
{
boolean_t supported;
zap_cursor_t *zc;
{
boolean_t supported;
zap_cursor_t *zc;
@@
-191,11
+191,16
@@
feature_is_supported(objset_t *os, uint64_t obj, uint64_t desc_obj,
ASSERT(za->za_integer_length == sizeof (uint64_t) &&
za->za_num_integers == 1);
ASSERT(za->za_integer_length == sizeof (uint64_t) &&
za->za_num_integers == 1);
+ if (NULL != enabled_feat) {
+ fnvlist_add_uint64(enabled_feat, za->za_name,
+ za->za_first_integer);
+ }
+
if (za->za_first_integer != 0 &&
!zfeature_is_supported(za->za_name)) {
supported = B_FALSE;
if (za->za_first_integer != 0 &&
!zfeature_is_supported(za->za_name)) {
supported = B_FALSE;
- if (
unsup_feat != NULL
) {
+ if (
NULL != unsup_feat
) {
char *desc = "";
if (zap_lookup(os, desc_obj, za->za_name,
char *desc = "";
if (zap_lookup(os, desc_obj, za->za_name,
@@
-224,7
+229,12
@@
feature_get_refcount(objset_t *os, uint64_t read_obj, uint64_t write_obj,
uint64_t refcount;
uint64_t zapobj = feature->fi_can_readonly ? write_obj : read_obj;
uint64_t refcount;
uint64_t zapobj = feature->fi_can_readonly ? write_obj : read_obj;
- ASSERT(0 != zapobj);
+ /*
+ * If the pool is currently being created, the feature objects may not
+ * have been allocated yet. Act as though all features are disabled.
+ */
+ if (zapobj == 0)
+ return (ENOTSUP);
err = zap_lookup(os, zapobj, feature->fi_guid, sizeof (uint64_t), 1,
&refcount);
err = zap_lookup(os, zapobj, feature->fi_guid, sizeof (uint64_t), 1,
&refcount);