[PATCH] rtslib/tcm: Add NULLIO support for rd_dr/rd_mcp

Sagi Grimberg sagig at mellanox.com
Tue Apr 29 12:01:10 UTC 2014


When the user creates a RAM device with size=0 we
interperet it as implicit NULLIO option (Instead
of modifying size to 1).

We still set the size to a fixed NULLIO_SIZE of 1T
in order to emulate a large storage device to the
fabric.

Signed-off-by: Sagi Grimberg <sagig at mellanox.com>
Reported-by: Slava Shwartsman <valyushash at gmail.com>
---
 rtslib/tcm.py |   25 +++++++++++++++++--------
 1 files changed, 17 insertions(+), 8 deletions(-)

diff --git a/rtslib/tcm.py b/rtslib/tcm.py
index 1b1b8c3..dfe0f7d 100644
--- a/rtslib/tcm.py
+++ b/rtslib/tcm.py
@@ -27,6 +27,9 @@ from utils import convert_scsi_path_to_hctl, convert_scsi_hctl_to_path
 from utils import convert_human_to_bytes, is_dev_in_use, get_block_type
 from utils import is_disk_partition, get_disk_size
 
+# Publish 1T size for NULLIO
+NULLIO_SIZE = 1024 * 1024 * 1024 * 1024 / 4096
+
 class Backstore(CFSNode):
 
     # Backstore private stuff
@@ -715,10 +718,13 @@ class RDDRStorageObject(StorageObject):
     def _configure(self, size, wwn):
         self._check_self()
         size = convert_human_to_bytes(size)
-        # convert to 4k pages
-        size = round(float(size)/4096)
-        if size == 0:
-            size = 1
+	if size == 0:
+            # size 0 given, implicit meaning NULL device
+            self._control("rd_nullio=1")
+            size = NULLIO_SIZE
+        else:
+            # convert to 4k pages
+            size = round(float(size)/4096)
 
         self._control("rd_pages=%d" % size)
         self._enable()
@@ -810,10 +816,13 @@ class RDMCPStorageObject(StorageObject):
     def _configure(self, size, wwn):
         self._check_self()
         size = convert_human_to_bytes(size)
-        # convert to 4k pages
-        size = round(float(size)/4096)
-        if size == 0:
-            size = 1
+	if size == 0:
+            # size 0 given, implicit meaning NULL device
+            self._control("rd_nullio=1")
+            size = NULLIO_SIZE
+        else:
+            # convert to 4k pages
+            size = round(float(size)/4096)
 
         self._control("rd_pages=%d" % size)
         self._enable()
-- 
1.7.1



More information about the targetcli-fb-devel mailing list