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;