Print this page
1845 allow disable of UNMAP via stmfadm(1M).
*** 1260,1269 ****
--- 1260,1276 ----
if (disk->writeProtectEnable) {
sbdLu->slu_write_protected = 1;
}
}
+ if (disk->unmapValid) {
+ sbdLu->slu_unmap_valid = 1;
+ if (disk->unmap) {
+ sbdLu->slu_unmap = 1;
+ }
+ }
+
if (disk->writebackCacheDisableValid) {
sbdLu->slu_writeback_cache_disable_valid = 1;
if (disk->writebackCacheDisable) {
sbdLu->slu_writeback_cache_disable = 1;
}
*** 1511,1520 ****
--- 1518,1530 ----
*ret = STMF_ERROR_LU_BUSY;
break;
case SBD_RET_WRITE_CACHE_SET_FAILED:
*ret = STMF_ERROR_WRITE_CACHE_SET;
break;
+ case SBD_RET_UNMAP_SET_FAILED:
+ *ret = STMF_ERROR_UNMAP_SET;
+ break;
case SBD_RET_ACCESS_STATE_FAILED:
*ret = STMF_ERROR_ACCESS_STATE_SET;
break;
default:
*ret = STMF_STATUS_ERROR;
*** 1820,1829 ****
--- 1830,1840 ----
case STMF_LU_PROP_ALIAS:
case STMF_LU_PROP_SIZE:
case STMF_LU_PROP_MGMT_URL:
case STMF_LU_PROP_WRITE_PROTECT:
case STMF_LU_PROP_WRITE_CACHE_DISABLE:
+ case STMF_LU_PROP_UNMAP:
return (STMF_STATUS_SUCCESS);
break;
default:
return (STMF_STATUS_ERROR);
break;
*** 1904,1913 ****
--- 1915,1930 ----
if (disk->luSizeValid) {
sbdLu->mlu_lu_size_valid = 1;
sbdLu->mlu_lu_size = disk->luSize;
}
+ if (disk->unmapValid) {
+ sbdLu->mlu_unmap_valid = 1;
+ if (disk->unmap)
+ sbdLu->mlu_unmap = 1;
+ }
+
if (disk->writeProtectEnableValid) {
sbdLu->mlu_write_protected_valid = 1;
if (disk->writeProtectEnable) {
sbdLu->mlu_write_protected = 1;
}
*** 2341,2350 ****
--- 2358,2371 ----
bcopy(sbdProps->slp_pid, diskLu->pid, sizeof (diskLu->pid));
diskLu->revValid = B_TRUE;
bcopy(sbdProps->slp_rev, diskLu->rev, sizeof (diskLu->rev));
+ diskLu->unmapValid = B_TRUE;
+ if (sbdProps->slp_unmap_cur)
+ diskLu->unmap = B_TRUE;
+
diskLu->writeProtectEnableValid = B_TRUE;
if (sbdProps->slp_write_protected) {
diskLu->writeProtectEnable = B_TRUE;
}
*** 2815,2824 ****
--- 2836,2862 ----
*propLen = reqLen + 1;
return (STMF_ERROR_INVALID_ARG);
}
}
break;
+ case STMF_LU_PROP_UNMAP:
+ if (!diskLu->unmapValid)
+ return (STMF_ERROR_NO_PROP);
+ if (diskLu->unmap) {
+ if ((reqLen = strlcpy(propVal, "true",
+ *propLen)) >= *propLen) {
+ *propLen = reqLen + 1;
+ return (STMF_ERROR_INVALID_ARG);
+ }
+ } else {
+ if ((reqLen = strlcpy(propVal, "false",
+ *propLen)) >= *propLen) {
+ *propLen = reqLen + 1;
+ return (STMF_ERROR_INVALID_ARG);
+ }
+ }
+ break;
case STMF_LU_PROP_WRITE_CACHE_DISABLE:
if (diskLu->writebackCacheDisableValid == B_FALSE) {
return (STMF_ERROR_NO_PROP);
}
if (diskLu->writebackCacheDisable) {
*** 3034,3043 ****
--- 3072,3091 ----
} else {
return (STMF_ERROR_INVALID_ARG);
}
diskLu->writebackCacheDisableValid = B_TRUE;
break;
+ case STMF_LU_PROP_UNMAP:
+ if (strcasecmp(propVal, "TRUE") == 0) {
+ diskLu->unmap = B_TRUE;
+ } else if (strcasecmp(propVal, "FALSE") == 0) {
+ diskLu->unmap = B_FALSE;
+ } else {
+ return (STMF_ERROR_INVALID_ARG);
+ }
+ diskLu->unmapValid = B_TRUE;
+ break;
case STMF_LU_PROP_ACCESS_STATE:
ret = STMF_ERROR_INVALID_PROP;
break;
default:
ret = STMF_ERROR_INVALID_PROP;