diff --git a/patches/openstack/cinder/sep-sp-iscsi.patch b/patches/openstack/cinder/sep-sp-iscsi.patch
index 819055a..71e3356 100644
--- a/patches/openstack/cinder/sep-sp-iscsi.patch
+++ b/patches/openstack/cinder/sep-sp-iscsi.patch
@@ -33,7 +33,7 @@
  create mode 100644 releasenotes/notes/storpool-iscsi-cefcfe590a07c5c7.yaml
 
 diff --git a/cinder/tests/unit/volume/drivers/test_storpool.py b/cinder/tests/unit/volume/drivers/test_storpool.py
-index a6c894ab9..78c9f14a8 100644
+index 2dbbe2861..32a5d5c45 100644
 --- a/cinder/tests/unit/volume/drivers/test_storpool.py
 +++ b/cinder/tests/unit/volume/drivers/test_storpool.py
 @@ -14,14 +14,24 @@
@@ -83,7 +83,7 @@
  volume_types = {
      1: {},
      2: {'storpool_template': 'ssd'},
-@@ -73,6 +92,10 @@ def snapshotName(vtype, vid):
+@@ -70,6 +89,10 @@ def snapshotName(vtype, vid):
      return 'os--snap--{t}--{id}'.format(t=vtype, id=vid)
  
  
@@ -94,7 +94,7 @@
  class MockDisk(object):
      def __init__(self, diskId):
          self.id = diskId
-@@ -197,6 +220,273 @@ def MockVolumeUpdateDesc(size):
+@@ -194,6 +217,273 @@ def MockVolumeUpdateDesc(size):
      return {'size': size}
  
  
@@ -368,7 +368,7 @@
  def MockSPConfig(section = 's01'):
      res = {}
      m = re.match('^s0*([A-Za-z0-9]+)$', section)
-@@ -239,7 +529,15 @@ class StorPoolTestCase(test.TestCase):
+@@ -236,7 +526,15 @@ class StorPoolTestCase(test.TestCase):
          self.cfg.volume_backend_name = 'storpool_test'
          self.cfg.storpool_template = None
          self.cfg.storpool_replication = 3
@@ -384,7 +384,7 @@
          mock_exec = mock.Mock()
          mock_exec.return_value = ('', '')
  
-@@ -248,7 +546,7 @@ class StorPoolTestCase(test.TestCase):
+@@ -245,7 +543,7 @@ class StorPoolTestCase(test.TestCase):
          self.driver.check_for_setup_error()
  
      @ddt.data(
@@ -393,7 +393,7 @@
          ({'no-host': None}, KeyError),
          ({'host': 'sbad'}, driver.StorPoolConfigurationInvalid),
          ({'host': 's01'}, None),
-@@ -264,7 +562,7 @@ class StorPoolTestCase(test.TestCase):
+@@ -261,7 +559,7 @@ class StorPoolTestCase(test.TestCase):
                                conn)
  
      @ddt.data(
@@ -402,7 +402,7 @@
          ({'no-host': None}, KeyError),
          ({'host': 'sbad'}, driver.StorPoolConfigurationInvalid),
      )
-@@ -317,7 +615,7 @@ class StorPoolTestCase(test.TestCase):
+@@ -300,7 +598,7 @@ class StorPoolTestCase(test.TestCase):
              self.assertEqual(21, pool['total_capacity_gb'])
              self.assertEqual(5, int(pool['free_capacity_gb']))
  
@@ -411,7 +411,7 @@
              self.assertFalse(pool['QoS_support'])
              self.assertFalse(pool['thick_provisioning_support'])
              self.assertTrue(pool['thin_provisioning_support'])
-@@ -735,6 +1033,139 @@ class StorPoolTestCase(test.TestCase):
+@@ -656,6 +954,139 @@ class StorPoolTestCase(test.TestCase):
                               'volume_type': volume_type
                           }))
  
@@ -548,11 +548,11 @@
 +            cfg_final.targets['1'].volume,
 +            volumeName(fconst.VOLUME_ID),
 +        )
-     @mock_volume_types
      def test_volume_revert(self):
          vol_id = 'rev1'
+         vol_name = volumeName(vol_id)
 diff --git a/cinder/volume/drivers/storpool.py b/cinder/volume/drivers/storpool.py
-index a30e918cb..021e72322 100644
+index 0051442ed..cb3beaf0c 100644
 --- a/cinder/volume/drivers/storpool.py
 +++ b/cinder/volume/drivers/storpool.py
 @@ -15,6 +15,7 @@
@@ -595,7 +595,7 @@
      cfg.StrOpt('storpool_template',
                 default=None,
                 help='The StorPool template for volumes with no type.'),
-@@ -109,6 +135,7 @@ class StorPoolDriver(driver.VolumeDriver):
+@@ -105,6 +131,7 @@ class StorPoolDriver(driver.VolumeDriver):
          self._ourId = None
          self._ourIdInt = None
          self._attach = None
@@ -603,7 +603,7 @@
  
      @staticmethod
      def get_driver_options():
-@@ -177,10 +204,326 @@ class StorPoolDriver(driver.VolumeDriver):
+@@ -162,10 +189,326 @@ class StorPoolDriver(driver.VolumeDriver):
              raise StorPoolConfigurationInvalid(
                  section=hostname, param='SP_OURID', error=e)
  
@@ -930,7 +930,7 @@
          return {'driver_volume_type': 'storpool',
                  'data': {
                      'client_id': self._storpool_client_id(connector),
-@@ -189,6 +532,9 @@ class StorPoolDriver(driver.VolumeDriver):
+@@ -174,6 +517,9 @@ class StorPoolDriver(driver.VolumeDriver):
                  }}
  
      def terminate_connection(self, volume, connector, **kwargs):
@@ -940,7 +940,7 @@
          pass
  
      def create_snapshot(self, snapshot):
-@@ -293,11 +639,20 @@ class StorPoolDriver(driver.VolumeDriver):
+@@ -275,11 +621,20 @@ class StorPoolDriver(driver.VolumeDriver):
                      )
  
      def create_export(self, context, volume, connector):
@@ -962,7 +962,7 @@
      def delete_volume(self, volume):
          name = self._attach.volumeName(volume['id'])
          try:
-@@ -334,6 +689,17 @@ class StorPoolDriver(driver.VolumeDriver):
+@@ -316,6 +671,17 @@ class StorPoolDriver(driver.VolumeDriver):
              LOG.error("StorPoolDriver API initialization failed: %s", e)
              raise
  
@@ -980,7 +980,7 @@
      def _update_volume_stats(self):
          try:
              dl = self._attach.api().disksList()
-@@ -359,7 +725,7 @@ class StorPoolDriver(driver.VolumeDriver):
+@@ -341,7 +707,7 @@ class StorPoolDriver(driver.VolumeDriver):
              'total_capacity_gb': total / units.Gi,
              'free_capacity_gb': free / units.Gi,
              'reserved_percentage': 0,
@@ -989,7 +989,7 @@
              'QoS_support': False,
              'thick_provisioning_support': False,
              'thin_provisioning_support': True,
-@@ -378,7 +744,9 @@ class StorPoolDriver(driver.VolumeDriver):
+@@ -360,7 +726,9 @@ class StorPoolDriver(driver.VolumeDriver):
                  'volume_backend_name') or 'storpool',
              'vendor_name': 'StorPool',
              'driver_version': self.VERSION,
@@ -1107,5 +1107,5 @@
 +    ``iscsi_export_to`` is set to ``*`, that is, all StorPool volumes will be
 +    exported via iSCSI to all initiators.
 -- 
-2.43.0
+2.25.1
 
