[NEW PATCH] [WIP] BZ#732980 Handle 4K block size LUN properly (via gerrit-bot)

Federico Simoncelli fsimonce at redhat.com
Fri Aug 26 15:26:31 UTC 2011


New patch submitted by Federico Simoncelli (fsimonce at redhat.com)

You can review this change at: http://gerrit.usersys.redhat.com/855

commit 00475aaf5591a23cf5c3215dd9c659503bc3d979
Author: Federico Simoncelli <fsimonce at redhat.com>
Date:   Fri Aug 26 15:16:15 2011 +0000

    [WIP] BZ#732980 Handle 4K block size LUN properly
    
    Change-Id: If303fac85a29bed7b989b0b6302fc4c83075f500

diff --git a/vdsm/storage/hsm.py b/vdsm/storage/hsm.py
index f83316c..c7b3288 100644
--- a/vdsm/storage/hsm.py
+++ b/vdsm/storage/hsm.py
@@ -757,6 +757,7 @@ class HSM:
                         'devtype': dev.get("devtype", ""),
                         'pathstatus': dev.get("paths", []),
                         'pathlist': dev.get("connections", []),
+                        'blocksize': dev.get("blocksize", ""),
                         'partitioned': partitioned}
                 for path in devInfo["pathstatus"]:
                     path["lun"] = path["hbtl"].lun
@@ -838,14 +839,20 @@ class HSM:
         knowndevs = list(multipath.getMPDevNamesIter())
         devices = []
         devSizes = []
+        devBlkSz = set()
 
         for dev in devlist:
             if dev in knowndevs:
                 devices.append(dev)
                 devSizes.append(multipath.getDeviceSize(devicemapper.getDmId(dev)))
+                devBlkSz.add(multipath.getDeviceBlockSizes(devicemapper.getDmId(dev)))
             else:
                 raise se.InvalidPhysDev(dev)
 
+        # Block size check
+        if len(devBlkSz) != 1:
+            raise se.VolumeGroupBlockSizeError("VG devices must have the same block size")
+
         #Minimal size check
         size = sum(devSizes)
         if size < MINIMALVGSIZE:
diff --git a/vdsm/storage/multipath.py b/vdsm/storage/multipath.py
index 269e0e3..6a026c9 100644
--- a/vdsm/storage/multipath.py
+++ b/vdsm/storage/multipath.py
@@ -226,6 +226,7 @@ def pathListIter(filterGuids=None):
                 "vendor" : "",
                 "product" :"",
                 "fwrev" : "",
+                "blocksize" : "",
                 }
 
 
@@ -252,6 +253,13 @@ def pathListIter(filterGuids=None):
                 except Exception:
                     log.warn("Problem getting fwrev from device `%s`", slave, exc_info=True)
 
+            if not devInfo["blocksize"]:
+                try:
+                    logBlkSize, phyBlkSize = getDeviceBlockSizes(slave)
+                    devInfo["blocksize"] = "%i:%i" % (logBlkSize, phyBlkSize)
+                except  Exception:
+                    log.warn("Problem getting blocksize from device `%s`", slave, exc_info=True)
+
             pathInfo = {}
             pathInfo["physdev"] = slave
             pathInfo["state"] = pathStatuses.get(slave, "failed")
diff --git a/vdsm/storage/storage_exception.py b/vdsm/storage/storage_exception.py
index 421737b..2b6c586 100644
--- a/vdsm/storage/storage_exception.py
+++ b/vdsm/storage/storage_exception.py
@@ -999,6 +999,10 @@ class VolumeGroupReplaceTagError(StorageException):
     code = 516
     message = "Replace Volume Group tag error"
 
+class VolumeGroupBlockSizeError(StorageException):
+    code = 517
+    message = "Volume Group block size error"
+
 class CannotCreateLogicalVolume(StorageException):
     code = 550
     message = "Cannot create Logical Volume"




More information about the vdsm-patches mailing list