]> xenbits.xensource.com Git - libvirt.git/commitdiff
storage: refactor volume capacity in iscsi-direct backend
authorClementine Hayat <clem@lse.epita.fr>
Sun, 12 Aug 2018 22:26:16 +0000 (00:26 +0200)
committerMichal Privoznik <mprivozn@redhat.com>
Mon, 13 Aug 2018 06:09:03 +0000 (08:09 +0200)
The size of blocks inside a volume and the number of blocks are needed
later. Having a function that return thoses information will avoid code
duplication.

Signed-off-by: Clementine Hayat <clem@lse.epita.fr>
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
src/storage/storage_backend_iscsi_direct.c

index 0764356b623e7fcd0cea17137e3460821c019c94..26f960e7bc0166b3a0ec3135c589b312cb96262b 100644 (file)
@@ -237,13 +237,13 @@ virISCSIDirectSetVolumeAttributes(virStoragePoolObjPtr pool,
 }
 
 static int
-virISCSIDirectSetVolumeCapacity(struct iscsi_context *iscsi,
-                                virStorageVolDefPtr vol,
-                                int lun)
+virISCSIDirectGetVolumeCapacity(struct iscsi_context *iscsi,
+                                int lun,
+                                uint32_t *block_size,
+                                uint32_t *nb_block)
 {
     struct scsi_task *task = NULL;
     struct scsi_inquiry_standard *inq = NULL;
-    long long size = 0;
     int ret = -1;
 
     if (!(task = iscsi_inquiry_sync(iscsi, lun, 0, 0, 64)) ||
@@ -282,10 +282,8 @@ virISCSIDirectSetVolumeCapacity(struct iscsi_context *iscsi,
             goto cleanup;
         }
 
-        size  = rc10->block_size;
-        size *= rc10->lba;
-        vol->target.capacity = size;
-        vol->target.allocation = size;
+        *block_size  = rc10->block_size;
+        *nb_block = rc10->lba;
 
     }
 
@@ -303,6 +301,8 @@ virISCSIDirectRefreshVol(virStoragePoolObjPtr pool,
 {
     virStoragePoolDefPtr def = virStoragePoolObjGetDef(pool);
     virStorageVolDefPtr vol = NULL;
+    uint32_t block_size;
+    uint32_t nb_block;
     int ret = -1;
 
     virStoragePoolObjClearVols(pool);
@@ -314,9 +314,11 @@ virISCSIDirectRefreshVol(virStoragePoolObjPtr pool,
 
     vol->type = VIR_STORAGE_VOL_NETWORK;
 
-    if (virISCSIDirectSetVolumeCapacity(iscsi, vol, lun) < 0)
+    if (virISCSIDirectGetVolumeCapacity(iscsi, lun, &block_size, &nb_block) < 0)
         goto cleanup;
 
+    vol->target.capacity = block_size * nb_block;
+    vol->target.allocation = block_size * nb_block;
     def->capacity += vol->target.capacity;
     def->allocation += vol->target.allocation;