usr/src/uts/common/fs/zfs/zfs_ioctl.c
changeset 4603 c7840c367d00
parent 4577 ed36b0e652bc
child 4611 0960c3336815
--- a/usr/src/uts/common/fs/zfs/zfs_ioctl.c	Fri Jul 06 02:39:29 2007 -0700
+++ b/usr/src/uts/common/fs/zfs/zfs_ioctl.c	Fri Jul 06 09:21:26 2007 -0700
@@ -130,8 +130,7 @@
 zfs_log_history(zfs_cmd_t *zc)
 {
 	spa_t *spa;
-	char poolname[MAXNAMELEN];
-	char *buf, *cp;
+	char *buf;
 
 	if (zc->zc_history == NULL)
 		return;
@@ -149,12 +148,7 @@
 
 	buf[HIS_MAX_RECORD_LEN -1] = '\0';
 
-	(void) strlcpy(poolname, zc->zc_name, sizeof (poolname));
-	cp = strpbrk(poolname, "/@");
-	if (cp != NULL)
-		*cp = '\0';
-
-	if (spa_open(poolname, &spa, FTAG) != 0) {
+	if (spa_open(zc->zc_name, &spa, FTAG) != 0) {
 		kmem_free(buf, HIS_MAX_RECORD_LEN);
 		return;
 	}
@@ -1258,19 +1252,9 @@
 			    nvpair_value_uint64(elem, &intval) == 0 &&
 			    intval >= ZIO_COMPRESS_GZIP_1 &&
 			    intval <= ZIO_COMPRESS_GZIP_9) {
-				char buf[MAXNAMELEN];
 				spa_t *spa;
-				const char *p;
 
-				if ((p = strchr(name, '/')) == NULL) {
-					p = name;
-				} else {
-					bcopy(name, buf, p - name);
-					buf[p - name] = '\0';
-					p = buf;
-				}
-
-				if (spa_open(p, &spa, FTAG) == 0) {
+				if (spa_open(name, &spa, FTAG) == 0) {
 					if (spa_version(spa) <
 					    SPA_VERSION_GZIP_COMPRESSION) {
 						spa_close(spa, FTAG);
@@ -1281,6 +1265,21 @@
 				}
 			}
 			break;
+
+		case ZFS_PROP_COPIES:
+		{
+			spa_t *spa;
+
+			if (spa_open(name, &spa, FTAG) == 0) {
+				if (spa_version(spa) <
+				    SPA_VERSION_DITTO_BLOCKS) {
+					spa_close(spa, FTAG);
+					return (ENOTSUP);
+				}
+				spa_close(spa, FTAG);
+			}
+			break;
+		}
 		}
 		if ((error = zfs_secpolicy_setprop(name, prop, cr)) != 0)
 			return (error);