diff --git a/src/lib/libzfs/libzfs_dataset.c b/src/lib/libzfs/libzfs_dataset.c
index fea911d..17df500 100644
--- a/src/lib/libzfs/libzfs_dataset.c
+++ b/src/lib/libzfs/libzfs_dataset.c
@@ -2330,6 +2330,8 @@ zfs_iter_filesystems(zfs_handle_t *zhp, zfs_iter_f func, void *data)
 			zcmd_free_nvlists(&zc);
 			return (ret);
 		}
+		// next child is allowed to use the full size !!!
+		zc.zc_nvlist_dst_size = 4096;
 	}
 	zcmd_free_nvlists(&zc);
 	return ((ret < 0) ? ret : 0);
diff --git a/src/zfs-fuse/zfs_ioctl.c b/src/zfs-fuse/zfs_ioctl.c
index a8bd40d..91f96b5 100644
--- a/src/zfs-fuse/zfs_ioctl.c
+++ b/src/zfs-fuse/zfs_ioctl.c
@@ -834,11 +834,7 @@ put_nvlist(zfs_cmd_t *zc, nvlist_t *nvl)
 		  syslog(LOG_WARNING,"put_nvlist: error %s on xcopyout",strerror(error));
 	}
 
-	/* zc->zc_nvlist_dst_size = size; */
-	/* This commented allocation was probably some kind of optimization
-	since this zc is sent to the socket. Except that put_nvlist is sometimes
-	called recursively and in this case we get very fast an out of memory error
-	in this function. Simply commenting out the allocation fixes the problem */
+	zc->zc_nvlist_dst_size = size;
 	return (error);
 }
 

