diff options
Diffstat (limited to 'module')
-rw-r--r-- | module/zcommon/zfs_prop.c | 6 | ||||
-rw-r--r-- | module/zcommon/zprop_common.c | 8 | ||||
-rw-r--r-- | module/zfs/dsl_prop.c | 2 |
3 files changed, 11 insertions, 5 deletions
diff --git a/module/zcommon/zfs_prop.c b/module/zcommon/zfs_prop.c index dd456b59a..d81ff3bc6 100644 --- a/module/zcommon/zfs_prop.c +++ b/module/zcommon/zfs_prop.c @@ -391,7 +391,7 @@ zfs_prop_init(void) PROP_DEFAULT, ZFS_TYPE_FILESYSTEM | ZFS_TYPE_VOLUME, "<size> | none", "RESERV"); zprop_register_number(ZFS_PROP_VOLSIZE, "volsize", 0, PROP_DEFAULT, - ZFS_TYPE_VOLUME, "<size>", "VOLSIZE"); + ZFS_TYPE_SNAPSHOT | ZFS_TYPE_VOLUME, "<size>", "VOLSIZE"); zprop_register_number(ZFS_PROP_REFQUOTA, "refquota", 0, PROP_DEFAULT, ZFS_TYPE_FILESYSTEM, "<size> | none", "REFQUOTA"); zprop_register_number(ZFS_PROP_REFRESERVATION, "refreservation", 0, @@ -555,9 +555,9 @@ zfs_prop_random_value(zfs_prop_t prop, uint64_t seed) * Returns TRUE if the property applies to any of the given dataset types. */ boolean_t -zfs_prop_valid_for_type(int prop, zfs_type_t types) +zfs_prop_valid_for_type(int prop, zfs_type_t types, boolean_t headcheck) { - return (zprop_valid_for_type(prop, types)); + return (zprop_valid_for_type(prop, types, headcheck)); } zprop_type_t diff --git a/module/zcommon/zprop_common.c b/module/zcommon/zprop_common.c index 6d9f89a98..035f3378d 100644 --- a/module/zcommon/zprop_common.c +++ b/module/zcommon/zprop_common.c @@ -351,9 +351,13 @@ zprop_values(int prop, zfs_type_t type) /* * Returns TRUE if the property applies to any of the given dataset types. + * + * If headcheck is set, the check is being made against the head dataset + * type of a snapshot which requires to return B_TRUE when the property + * is only valid for snapshots. */ boolean_t -zprop_valid_for_type(int prop, zfs_type_t type) +zprop_valid_for_type(int prop, zfs_type_t type, boolean_t headcheck) { zprop_desc_t *prop_tbl; @@ -362,6 +366,8 @@ zprop_valid_for_type(int prop, zfs_type_t type) ASSERT(prop < zprop_get_numprops(type)); prop_tbl = zprop_get_proptable(type); + if (headcheck && prop_tbl[prop].pd_types == ZFS_TYPE_SNAPSHOT) + return (B_TRUE); return ((prop_tbl[prop].pd_types & type) != 0); } diff --git a/module/zfs/dsl_prop.c b/module/zfs/dsl_prop.c index 079ef9742..ded0da991 100644 --- a/module/zfs/dsl_prop.c +++ b/module/zfs/dsl_prop.c @@ -925,7 +925,7 @@ dsl_prop_get_all_impl(objset_t *mos, uint64_t propobj, /* Skip properties not valid for this type. */ if ((flags & DSL_PROP_GET_SNAPSHOT) && prop != ZPROP_INVAL && - !zfs_prop_valid_for_type(prop, ZFS_TYPE_SNAPSHOT)) + !zfs_prop_valid_for_type(prop, ZFS_TYPE_SNAPSHOT, B_FALSE)) continue; /* Skip properties already defined. */ |