--- ./source/private_module/scsi/standard/scsi_sbc.c	2018-03-17 06:37:23.000000000 +0000
+++ ./source/private_module/scsi/standard/scsi_sbc.c.hotpatch	2019-07-01 08:41:18.000000000 +0000
@@ -1438,7 +1438,6 @@
     {
         return RETURN_OK;
     }
-
  
     ret = scsiGetThinCapInfoItf(tgtCmd->uiDevLunId,
                                &uiChunkSize,
@@ -1451,21 +1450,22 @@
         SCSI_SET_RSP_BUSY(tgtCmd);
         SCSI_PRINT_INFO_LOW(LOG_ID_0282, SCSI_CMD_STRING("BUSY",
                     "Can not get thin info.", tgtCmd)); 
-
         return RETURN_ERROR;
+    }   
+    /*For thick lun,unmap is changed to write zero.*/
+    if (unlikely(!bIsThinLun))
+    {
+        DBG_LogDebug(LOG_ID_0289,SCSI_CMD_STRING("INFO","thick lun recv unmap cmd,which is changed to write zero.", tgtCmd));
+        return RETURN_OK;
     }
-    
-    uiChunkSize = uiChunkSize >> SECTOR_SHIFT;
-
-    /*ͨlunյunmapظǷ*/
-    if (unlikely((!bIsThinLun) || (!bIsUnmapAllowed)))
+    if (unlikely(!bIsUnmapAllowed))
     {
         scsiSetSenseData(tgtCmd, SCSI_SENSE_INVALID_FIELD_IN_CDB);
         SCSI_PRINT_INFO_LOW(LOG_ID_0283,
                     SCSI_CMD_STRING("CHECK", "Only thin LUN support this cmd.", tgtCmd));
         return RETURN_ERROR;
     }
-
+    uiChunkSize = uiChunkSize >> SECTOR_SHIFT;
     /* modify by l90006363 for SR-0000341803,windows 2012֤TPbegin */    
     /*add by z90006263  for DTS2014042302362 begin*/
     if (unlikely(0 == uiChunkSize))
@@ -1730,7 +1730,6 @@
     }
 
     cdb = SCSI_GET_CDB_FROM_TGTCMD(tgtCmd);
-
     /*֧ANCHOR*/
     if (unlikely(cdb[1] & UNMAP_ANCHOR_MASK))
     {
@@ -1739,8 +1738,16 @@
             "Cdb parameter UNMAP_ANCHOR_MASK unsuppoted.",tgtCmd)); 
         return RETURN_ERROR;
     }
+    /* modify by l90006363 for SR-0000341803,windows 2012֤TPbegin */
+    if (unlikely(8 > tgtCmd->uiCdbAllocLen))
+    {
+        scsiSetSenseData(tgtCmd, SCSI_SENSE_INVALID_FIELD_IN_PARAM_LIST);
+        SCSI_PRINT_INFO_LOW(LOG_ID_028E,
+                    SCSI_CMD_STRING("CHECK", "Invalid param length for unmap.", tgtCmd));
+        return RETURN_ERROR;
 
-
+    }       
+    /* modify by l90006363 for SR-0000341803,windows 2012֤TPend */
     bRet = scsiGetThinCapInfoItf(tgtCmd->uiDevLunId,
                                &uiChunkSize,
                                &ulMaxReclaimSize,
@@ -1757,27 +1764,20 @@
          /*add by z90006263  for DTS2014043001414 end */
         return RETURN_ERROR;
     }
-
-    /*ͨlunյunmapظǷ*/
-    if (unlikely((!bIsThinLun) || (!bIsUnmapAllowed)))
+    /*For thick lun,unmap is changed to write zero.*/
+    if (unlikely(!bIsThinLun))
     {
-        scsiSetSenseData(tgtCmd, SCSI_SENSE_INVALID_FIELD_IN_CDB);
-        SCSI_PRINT_INFO_LOW(LOG_ID_028D,
-                    SCSI_CMD_STRING("CHECK", "Only thin LUN support the this cmd.", tgtCmd));
-        return RETURN_ERROR;
+        DBG_LogDebug(LOG_ID_0289,SCSI_CMD_STRING("INFO","thick lun recv unmap cmd,which is changed to write zero.", tgtCmd));
+        return RETURN_OK;
     }
-    /* modify by l90006363 for SR-0000341803,windows 2012֤TPbegin */
-    /* modified by l90006363, for DTS2014061904891 begin */
-    /* modified by l90006363, for DTS2014061904891 end */
-    if (unlikely(8 > tgtCmd->uiCdbAllocLen))
+    /*for thin lun,need to judge lun status*/
+    if (unlikely(!bIsUnmapAllowed))
     {
-        scsiSetSenseData(tgtCmd, SCSI_SENSE_INVALID_FIELD_IN_PARAM_LIST);
-        SCSI_PRINT_INFO_LOW(LOG_ID_028E,
-                    SCSI_CMD_STRING("CHECK", "Invalid param length for unmap.", tgtCmd));
+        scsiSetSenseData(tgtCmd, SCSI_SENSE_INVALID_FIELD_IN_CDB);
+        SCSI_PRINT_INFO_LOW(LOG_ID_028D,SCSI_CMD_STRING("CHECK", "Thin LUN is not allowed to unmap.", tgtCmd));
         return RETURN_ERROR;
+    }
 
-    }       
-    /* modify by l90006363 for SR-0000341803,windows 2012֤TPend */
     return RETURN_OK;
 }
 
