svn commit: r205198 - in head/cddl/contrib/opensolaris: cmd/zfs
lib/libzfs/common
Andriy Gapon
avg at freebsd.org
Sat Apr 3 15:29:55 UTC 2010
on 03/04/2010 18:19 Andriy Gapon said the following:
> It seems that this commit causes a crash in zfs(1) when e.g. 'zfs list' is
> executed and one of the filesystems has a user property set on it.
>
> The crash is in zfs_prune_proplist function at
> cddl/contrib/opensolaris/lib/libzfs/common/libzfs_dataset.c:4291.
>
> Relevant code snippet:
> 4286
> 4287 while (curr) {
> 4288 zfs_prop_t zfs_prop = zfs_name_to_prop(nvpair_name(curr));
> 4289 nvpair_t *next = nvlist_next_nvpair(zhp->zfs_props, curr);
> 4290
> 4291 if (props[zfs_prop] == B_FALSE)
> 4292 (void) nvlist_remove(zhp->zfs_props,
> 4293 nvpair_name(curr), nvpair_type(curr));
> 4294 curr = next;
> 4295 }
>
> zfs_prop is (-1) and nvpair_name(curr) is my custom property "avg:nobackup".
> Not sure if this was fixed in OpenSolaris or what.
BTW, I use this simplistic change for time being, not sure if this is a correct fix.
--- a/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_dataset.c
+++ b/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_dataset.c
@@ -4288,7 +4288,7 @@ zfs_prune_proplist(zfs_handle_t *zhp, uint8_t *props)
zfs_prop_t zfs_prop = zfs_name_to_prop(nvpair_name(curr));
nvpair_t *next = nvlist_next_nvpair(zhp->zfs_props, curr);
- if (props[zfs_prop] == B_FALSE)
+ if (zfs_prop != ZPROP_INVAL && props[zfs_prop] == B_FALSE)
(void) nvlist_remove(zhp->zfs_props,
nvpair_name(curr), nvpair_type(curr));
curr = next;
--
Andriy Gapon
More information about the svn-src-all
mailing list