Print this page
1845 allow disable of UNMAP via stmfadm(1M).

Split Close
Expand all
Collapse all
          --- old/usr/src/lib/libstmf/common/stmf.c
          +++ new/usr/src/lib/libstmf/common/stmf.c
↓ open down ↓ 1254 lines elided ↑ open up ↑
1255 1255                  sbdLu->slu_blksize_valid = 1;
1256 1256                  sbdLu->slu_blksize = disk->blkSize;
1257 1257          }
1258 1258  
1259 1259          if (disk->writeProtectEnableValid) {
1260 1260                  if (disk->writeProtectEnable) {
1261 1261                          sbdLu->slu_write_protected = 1;
1262 1262                  }
1263 1263          }
1264 1264  
     1265 +        if (disk->unmapValid) {
     1266 +                sbdLu->slu_unmap_valid = 1;
     1267 +                if (disk->unmap) {
     1268 +                        sbdLu->slu_unmap = 1;
     1269 +                }
     1270 +        }
     1271 +
1265 1272          if (disk->writebackCacheDisableValid) {
1266 1273                  sbdLu->slu_writeback_cache_disable_valid = 1;
1267 1274                  if (disk->writebackCacheDisable) {
1268 1275                          sbdLu->slu_writeback_cache_disable = 1;
1269 1276                  }
1270 1277          }
1271 1278  
1272 1279          sbdIoctl.stmf_version = STMF_VERSION_1;
1273 1280          sbdIoctl.stmf_ibuf_size = sbdLu->slu_struct_size;
1274 1281          sbdIoctl.stmf_ibuf = (uint64_t)(unsigned long)sbdLu;
↓ open down ↓ 231 lines elided ↑ open up ↑
1506 1513                          break;
1507 1514                  case SBD_RET_SIZE_OUT_OF_RANGE:
1508 1515                          *ret = STMF_ERROR_SIZE_OUT_OF_RANGE;
1509 1516                          break;
1510 1517                  case SBD_RET_LU_BUSY:
1511 1518                          *ret = STMF_ERROR_LU_BUSY;
1512 1519                          break;
1513 1520                  case SBD_RET_WRITE_CACHE_SET_FAILED:
1514 1521                          *ret = STMF_ERROR_WRITE_CACHE_SET;
1515 1522                          break;
     1523 +                case SBD_RET_UNMAP_SET_FAILED:
     1524 +                        *ret = STMF_ERROR_UNMAP_SET;
     1525 +                        break;
1516 1526                  case SBD_RET_ACCESS_STATE_FAILED:
1517 1527                          *ret = STMF_ERROR_ACCESS_STATE_SET;
1518 1528                          break;
1519 1529                  default:
1520 1530                          *ret = STMF_STATUS_ERROR;
1521 1531                          break;
1522 1532          }
1523 1533  }
1524 1534  
1525 1535  /*
↓ open down ↓ 289 lines elided ↑ open up ↑
1815 1825  
1816 1826  static int
1817 1827  validateModifyDiskProp(uint32_t prop)
1818 1828  {
1819 1829          switch (prop) {
1820 1830                  case STMF_LU_PROP_ALIAS:
1821 1831                  case STMF_LU_PROP_SIZE:
1822 1832                  case STMF_LU_PROP_MGMT_URL:
1823 1833                  case STMF_LU_PROP_WRITE_PROTECT:
1824 1834                  case STMF_LU_PROP_WRITE_CACHE_DISABLE:
     1835 +                case STMF_LU_PROP_UNMAP:
1825 1836                          return (STMF_STATUS_SUCCESS);
1826 1837                          break;
1827 1838                  default:
1828 1839                          return (STMF_STATUS_ERROR);
1829 1840                          break;
1830 1841          }
1831 1842  }
1832 1843  
1833 1844  static int
1834 1845  modifyDiskLu(diskResource *disk, stmfGuid *luGuid, const char *fname)
↓ open down ↓ 64 lines elided ↑ open up ↑
1899 1910                  bcopy(disk->luMgmtUrl, &(sbdLu->mlu_buf[bufOffset]),
1900 1911                      luMgmtUrlLen + 1);
1901 1912                  bufOffset += luMgmtUrlLen + 1;
1902 1913          }
1903 1914  
1904 1915          if (disk->luSizeValid) {
1905 1916                  sbdLu->mlu_lu_size_valid = 1;
1906 1917                  sbdLu->mlu_lu_size = disk->luSize;
1907 1918          }
1908 1919  
     1920 +        if (disk->unmapValid) {
     1921 +                sbdLu->mlu_unmap_valid = 1;
     1922 +                if (disk->unmap)
     1923 +                        sbdLu->mlu_unmap = 1;
     1924 +        }
     1925 +
1909 1926          if (disk->writeProtectEnableValid) {
1910 1927                  sbdLu->mlu_write_protected_valid = 1;
1911 1928                  if (disk->writeProtectEnable) {
1912 1929                          sbdLu->mlu_write_protected = 1;
1913 1930                  }
1914 1931          }
1915 1932  
1916 1933          if (disk->writebackCacheDisableValid) {
1917 1934                  sbdLu->mlu_writeback_cache_disable_valid = 1;
1918 1935                  if (disk->writebackCacheDisable) {
↓ open down ↓ 417 lines elided ↑ open up ↑
2336 2353  
2337 2354          diskLu->vidValid = B_TRUE;
2338 2355          bcopy(sbdProps->slp_vid, diskLu->vid, sizeof (diskLu->vid));
2339 2356  
2340 2357          diskLu->pidValid = B_TRUE;
2341 2358          bcopy(sbdProps->slp_pid, diskLu->pid, sizeof (diskLu->pid));
2342 2359  
2343 2360          diskLu->revValid = B_TRUE;
2344 2361          bcopy(sbdProps->slp_rev, diskLu->rev, sizeof (diskLu->rev));
2345 2362  
     2363 +        diskLu->unmapValid = B_TRUE;
     2364 +        if (sbdProps->slp_unmap_cur)
     2365 +                diskLu->unmap = B_TRUE;
     2366 +
2346 2367          diskLu->writeProtectEnableValid = B_TRUE;
2347 2368          if (sbdProps->slp_write_protected) {
2348 2369                  diskLu->writeProtectEnable = B_TRUE;
2349 2370          }
2350 2371  
2351 2372          diskLu->writebackCacheDisableValid = B_TRUE;
2352 2373          if (sbdProps->slp_writeback_cache_disable_cur) {
2353 2374                  diskLu->writebackCacheDisable = B_TRUE;
2354 2375          }
2355 2376  
↓ open down ↓ 454 lines elided ↑ open up ↑
2810 2831                                          return (STMF_ERROR_INVALID_ARG);
2811 2832                                  }
2812 2833                          } else {
2813 2834                                  if ((reqLen = strlcpy(propVal, "false",
2814 2835                                      *propLen)) >= *propLen) {
2815 2836                                          *propLen = reqLen + 1;
2816 2837                                          return (STMF_ERROR_INVALID_ARG);
2817 2838                                  }
2818 2839                          }
2819 2840                          break;
     2841 +                case STMF_LU_PROP_UNMAP:
     2842 +                        if (!diskLu->unmapValid)
     2843 +                                return (STMF_ERROR_NO_PROP);
     2844 +                        if (diskLu->unmap) {
     2845 +                                if ((reqLen = strlcpy(propVal, "true",
     2846 +                                    *propLen)) >= *propLen) {
     2847 +                                        *propLen = reqLen + 1;
     2848 +                                        return (STMF_ERROR_INVALID_ARG);
     2849 +                                }
     2850 +                        } else {
     2851 +                                if ((reqLen = strlcpy(propVal, "false",
     2852 +                                    *propLen)) >= *propLen) {
     2853 +                                        *propLen = reqLen + 1;
     2854 +                                        return (STMF_ERROR_INVALID_ARG);
     2855 +                                }
     2856 +                        }
     2857 +                        break;
2820 2858                  case STMF_LU_PROP_WRITE_CACHE_DISABLE:
2821 2859                          if (diskLu->writebackCacheDisableValid == B_FALSE) {
2822 2860                                  return (STMF_ERROR_NO_PROP);
2823 2861                          }
2824 2862                          if (diskLu->writebackCacheDisable) {
2825 2863                                  if ((reqLen = strlcpy(propVal, "true",
2826 2864                                      *propLen)) >= *propLen) {
2827 2865                                          *propLen = reqLen + 1;
2828 2866                                          return (STMF_ERROR_INVALID_ARG);
2829 2867                                  }
↓ open down ↓ 199 lines elided ↑ open up ↑
3029 3067                  case STMF_LU_PROP_WRITE_CACHE_DISABLE:
3030 3068                          if (strcasecmp(propVal, "TRUE") == 0) {
3031 3069                                  diskLu->writebackCacheDisable = B_TRUE;
3032 3070                          } else if (strcasecmp(propVal, "FALSE") == 0) {
3033 3071                                  diskLu->writebackCacheDisable = B_FALSE;
3034 3072                          } else {
3035 3073                                  return (STMF_ERROR_INVALID_ARG);
3036 3074                          }
3037 3075                          diskLu->writebackCacheDisableValid = B_TRUE;
3038 3076                          break;
     3077 +                case STMF_LU_PROP_UNMAP:
     3078 +                        if (strcasecmp(propVal, "TRUE") == 0) {
     3079 +                                diskLu->unmap = B_TRUE;
     3080 +                        } else if (strcasecmp(propVal, "FALSE") == 0) {
     3081 +                                diskLu->unmap = B_FALSE;
     3082 +                        } else {
     3083 +                                return (STMF_ERROR_INVALID_ARG);
     3084 +                        }
     3085 +                        diskLu->unmapValid = B_TRUE;
     3086 +                        break;
3039 3087                  case STMF_LU_PROP_ACCESS_STATE:
3040 3088                          ret = STMF_ERROR_INVALID_PROP;
3041 3089                          break;
3042 3090                  default:
3043 3091                          ret = STMF_ERROR_INVALID_PROP;
3044 3092                          break;
3045 3093          }
3046 3094          return (ret);
3047 3095  }
3048 3096  
↓ open down ↓ 3903 lines elided ↑ open up ↑
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX