diff --git a/patches/openstack/cinder/sep-sp-iscsi.patch b/patches/openstack/cinder/sep-sp-iscsi.patch
index 71e3356..6df5e6e 100644
--- a/patches/openstack/cinder/sep-sp-iscsi.patch
+++ b/patches/openstack/cinder/sep-sp-iscsi.patch
@@ -1,39 +1,39 @@
-From 06914652d6de93e3d14209ff6a78b930826f0823 Mon Sep 17 00:00:00 2001
+From bfc35f997b9ad20ac9a7ad0c363594230ab820c8 Mon Sep 17 00:00:00 2001
 From: Peter Penchev <openstack-dev@storpool.com>
 Date: Mon, 12 Mar 2018 12:00:10 +0200
-Subject: [PATCH 9/9] Add iSCSI export support to the StorPool driver
+Subject: [PATCH] Add iSCSI export support to the StorPool driver
 
 Add four new driver options:
-- iscsi_cinder_volume: use StorPool iSCSI attachments whenever
+- storpool_iscsi_cinder_volume: use StorPool iSCSI attachments whenever
   the cinder-volume service needs to attach a volume to the controller,
   e.g. for copying an image to a volume or vice versa
-- iscsi_export_to:
-  - an empty string to use the StorPool native protocol for exporting volumes
-    protocol for exporting volumes)
+- storpool_iscsi_export_to:
+  - an empty string to use the StorPool native protocol for exporting
+    volumes
   - the string "*" to always use iSCSI for exporting volumes
   - an experimental, not fully supported list of IQN patterns to export
     volumes to using iSCSI; this results in a Cinder driver that exports
     different volumes using different storage protocols
-- iscsi_portal_group: the name of the iSCSI portal group defined in
-  the StorPool configuration to use for these export
-- iscsi_learn_initiator_iqns: automatically create StorPool configuration
-  records for an initiator when a volume is first exported to it
+- storpool_iscsi_portal_group: the name of the iSCSI portal group
+  defined in the StorPool configuration to use for these export
+- storpool_iscsi_learn_initiator_iqns: automatically create StorPool
+  configuration records for an initiator when a volume is first exported
+  to it
 
-When exporting volumes via iSCSI, report the storage protocol as "iSCSI" and
-disable multiattach (the StorPool CI failures with iSCSI multiattach may need
-further investigation).
+When exporting volumes via iSCSI, report the storage protocol as
+"iSCSI".
 
 Change-Id: I9de64306e0e6976268df782053b0651dd1cca96f
 ---
- .../unit/volume/drivers/test_storpool.py      | 437 +++++++++++++++++-
- cinder/volume/drivers/storpool.py             | 374 ++++++++++++++-
- .../drivers/storpool-volume-driver.rst        |  60 ++-
- .../storpool-iscsi-cefcfe590a07c5c7.yaml      |  13 +
- 4 files changed, 874 insertions(+), 10 deletions(-)
+ .../unit/volume/drivers/test_storpool.py      | 522 +++++++++++++++++-
+ cinder/volume/drivers/storpool.py             | 379 ++++++++++++-
+ .../drivers/storpool-volume-driver.rst        |  68 ++-
+ .../storpool-iscsi-cefcfe590a07c5c7.yaml      |  15 +
+ 4 files changed, 973 insertions(+), 11 deletions(-)
  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 2dbbe2861..32a5d5c45 100644
+index 80b68a8af..d0bb568a6 100644
 --- a/cinder/tests/unit/volume/drivers/test_storpool.py
 +++ b/cinder/tests/unit/volume/drivers/test_storpool.py
 @@ -14,14 +14,24 @@
@@ -94,7 +94,7 @@
  class MockDisk(object):
      def __init__(self, diskId):
          self.id = diskId
-@@ -194,6 +217,273 @@ def MockVolumeUpdateDesc(size):
+@@ -194,6 +217,315 @@ def MockVolumeUpdateDesc(size):
      return {'size': size}
  
  
@@ -264,6 +264,30 @@
 +            },
 +        )
 +
++    def _handle_delete_export(
++        self,
++        cfg: MockIscsiConfig,
++        cmd: dict[str, Any],
++    ) -> MockIscsiConfig:
++        """Delete an export for an initiator."""
++        self._asrt.assertDictEqual(
++            cmd,
++            {
++                'initiator': _ISCSI_IQN_OURS,
++                'portalGroup': _ISCSI_PORTAL_GROUP,
++                'volumeName': volumeName(fconst.VOLUME_ID),
++            },
++        )
++        self._asrt.assertEqual(cfg.initiators['1'].name, cmd['initiator'])
++        self._asrt.assertListEqual(
++            cfg.initiators['1'].exports,
++            [MockIscsiExport(portalGroup=_ISCSI_PORTAL_GROUP,
++                             target=cfg.targets['1'].name)])
++
++        updated_initiators = cfg.initiators
++        del updated_initiators['1']
++        return dataclasses.replace(cfg, initiators=updated_initiators)
++
 +    def _handle_create_initiator(
 +        self,
 +        cfg: MockIscsiConfig,
@@ -314,6 +338,22 @@
 +            },
 +        )
 +
++    def _handle_delete_target(
++        self,
++        cfg: MockIscsiConfig,
++        cmd: dict[str, Any]
++    ) -> MockIscsiConfig:
++        """Remove a target for a volume."""
++        self._asrt.assertDictEqual(
++            cmd,
++            {'volumeName': volumeName(fconst.VOLUME_ID)},
++        )
++
++        self._asrt.assertListEqual(sorted(cfg.targets), ['0', '1'])
++        updated_targets = cfg.targets
++        del updated_targets['1']
++        return dataclasses.replace(cfg, targets=updated_targets)
++
 +    def _handle_initiator_add_network(
 +        self,
 +        cfg: MockIscsiConfig,
@@ -332,7 +372,9 @@
 +    _CMD_HANDLERS = {
 +        'createInitiator': _handle_create_initiator,
 +        'createTarget': _handle_create_target,
++        'deleteTarget': _handle_delete_target,
 +        'export': _handle_export,
++        'exportDelete': _handle_delete_export,
 +        'initiatorAddNetwork': _handle_initiator_add_network,
 +    }
 +
@@ -368,23 +410,23 @@
  def MockSPConfig(section = 's01'):
      res = {}
      m = re.match('^s0*([A-Za-z0-9]+)$', section)
-@@ -236,7 +526,15 @@ class StorPoolTestCase(test.TestCase):
+@@ -236,7 +568,15 @@ class StorPoolTestCase(test.TestCase):
          self.cfg.volume_backend_name = 'storpool_test'
          self.cfg.storpool_template = None
          self.cfg.storpool_replication = 3
-+        self.cfg.iscsi_cinder_volume = False
-+        self.cfg.iscsi_export_to = ''
-+        self.cfg.iscsi_learn_initiator_iqns = True
-+        self.cfg.iscsi_portal_group = _ISCSI_PORTAL_GROUP
-+
-+        self._setup_test_driver()
++        self.cfg.storpool_iscsi_cinder_volume = False
++        self.cfg.storpool_iscsi_export_to = ''
++        self.cfg.storpool_iscsi_learn_initiator_iqns = True
++        self.cfg.storpool_iscsi_portal_group = _ISCSI_PORTAL_GROUP
  
++        self._setup_test_driver()
++
 +    def _setup_test_driver(self):
 +        """Initialize a StorPool driver as per the current configuration."""
          mock_exec = mock.Mock()
          mock_exec.return_value = ('', '')
  
-@@ -245,7 +543,7 @@ class StorPoolTestCase(test.TestCase):
+@@ -245,7 +585,7 @@ class StorPoolTestCase(test.TestCase):
          self.driver.check_for_setup_error()
  
      @ddt.data(
@@ -393,7 +435,7 @@
          ({'no-host': None}, KeyError),
          ({'host': 'sbad'}, driver.StorPoolConfigurationInvalid),
          ({'host': 's01'}, None),
-@@ -261,7 +559,7 @@ class StorPoolTestCase(test.TestCase):
+@@ -261,7 +601,7 @@ class StorPoolTestCase(test.TestCase):
                                conn)
  
      @ddt.data(
@@ -402,7 +444,7 @@
          ({'no-host': None}, KeyError),
          ({'host': 'sbad'}, driver.StorPoolConfigurationInvalid),
      )
-@@ -300,7 +598,7 @@ class StorPoolTestCase(test.TestCase):
+@@ -300,7 +640,7 @@ class StorPoolTestCase(test.TestCase):
              self.assertEqual(21, pool['total_capacity_gb'])
              self.assertEqual(5, int(pool['free_capacity_gb']))
  
@@ -411,10 +453,10 @@
              self.assertFalse(pool['QoS_support'])
              self.assertFalse(pool['thick_provisioning_support'])
              self.assertTrue(pool['thin_provisioning_support'])
-@@ -656,6 +954,139 @@ class StorPoolTestCase(test.TestCase):
-                              'volume_type': volume_type
-                          }))
- 
+@@ -703,3 +1043,179 @@ class StorPoolTestCase(test.TestCase):
+                                'No such volume',
+                                self.driver.revert_to_snapshot, None,
+                                {'id': vol_id}, {'id': snap_id})
 +
 +    @ddt.data(
 +        # The default values
@@ -434,10 +476,10 @@
 +        (_ISCSI_PAT_BOTH, False, constants.STORPOOL, _ISCSI_IQN_OTHER, True),
 +    )
 +    @ddt.unpack
-+    def test_wants_iscsi(self, iscsi_export_to, use_iscsi, storage_protocol,
-+                         hostname, expected):
++    def test_wants_iscsi(self, storpool_iscsi_export_to, use_iscsi,
++                         storage_protocol, hostname, expected):
 +        """Check the "should this export use iSCSI?" detection."""
-+        self.cfg.iscsi_export_to = iscsi_export_to
++        self.cfg.storpool_iscsi_export_to = storpool_iscsi_export_to
 +        self._setup_test_driver()
 +        self.assertEqual(self.driver._use_iscsi, use_iscsi)
 +
@@ -460,11 +502,12 @@
 +                        expected if initiator is not None and host is not None
 +                        else forced)
 +
-+        # If iscsi_cinder_volume is set and this is the controller, then yes.
++        # If storpool_iscsi_cinder_volume is set and this is the controller,
++        # then yes.
 +        check({"storpool_wants_iscsi": True}, True, True)
 +
-+        # If iscsi_cinder_volume is not set or this is not the controller, then
-+        # look at the specified expected value.
++        # If storpool_iscsi_cinder_volume is not set or this is not the
++        # controller, then look at the specified expected value.
 +        check({"storpool_wants_iscsi": False}, use_iscsi, expected)
 +        check({}, use_iscsi, expected)
 +
@@ -548,11 +591,50 @@
 +            cfg_final.targets['1'].volume,
 +            volumeName(fconst.VOLUME_ID),
 +        )
-     def test_volume_revert(self):
-         vol_id = 'rev1'
-         vol_name = volumeName(vol_id)
++
++    @ddt.data(*_ISCSI_TEST_CASES)
++    def test_remove_iscsi_export(self, tcase: IscsiTestCase):
++        cfg_orig = MockIscsiConfig.build(tcase)
++        configs = [cfg_orig]
++        iapi = MockIscsiAPI(configs, self)
++
++        def _target_exists(cfg: MockIscsiConfig, volume: str) -> bool:
++            for name, target in cfg.targets.items():
++                if target.volume == volumeName(volume):
++                    return True
++            return False
++
++        def _export_exists(cfg: MockIscsiConfig, volume: str) -> bool:
++            for name, initiator in cfg.initiators.items():
++                for export in initiator.exports:
++                    if export.target == targetName(volume):
++                        return True
++            return False
++
++        if tcase.exported:
++            self.assertTrue(
++                _target_exists(iapi.iSCSIConfig().iscsi, tcase.volume))
++            self.assertTrue(
++                _export_exists(iapi.iSCSIConfig().iscsi, tcase.volume))
++
++        with mock.patch.object(self.driver._attach, 'api', new=lambda: iapi):
++            self.driver._remove_iscsi_export(
++                {
++                    'id': fconst.VOLUME_ID,
++                    'display_name': fconst.VOLUME_NAME,
++                },
++                {
++                    'host': _ISCSI_IQN_OURS + '.hostname',
++                    'initiator': _ISCSI_IQN_OURS,
++                },
++            )
++
++        self.assertFalse(
++            _target_exists(iapi.iSCSIConfig().iscsi, tcase.volume))
++        self.assertFalse(
++            _export_exists(iapi.iSCSIConfig().iscsi, tcase.volume))
 diff --git a/cinder/volume/drivers/storpool.py b/cinder/volume/drivers/storpool.py
-index 0051442ed..cb3beaf0c 100644
+index a8200a7f1..d931200f6 100644
 --- a/cinder/volume/drivers/storpool.py
 +++ b/cinder/volume/drivers/storpool.py
 @@ -15,6 +15,7 @@
@@ -563,47 +645,60 @@
  import platform
  
  from oslo_config import cfg
-@@ -43,6 +44,31 @@ if storpool:
+@@ -43,6 +44,32 @@ if storpool:
  
  
  storpool_opts = [
-+    cfg.BoolOpt('iscsi_cinder_volume',
++    cfg.BoolOpt('storpool_iscsi_cinder_volume',
 +                default=False,
 +                help='Let the cinder-volume service use iSCSI instead of '
 +                     'the StorPool block device driver for accessing '
 +                     'StorPool volumes, e.g. when creating a volume from '
 +                     'an image or vice versa.'),
-+    cfg.StrOpt('iscsi_export_to',
++    cfg.StrOpt('storpool_iscsi_export_to',
 +               default='',
 +               help='Whether to export volumes using iSCSI. '
 +                    'An empty string (the default) makes the driver export '
 +                    'all volumes using the StorPool native network protocol. '
 +                    'The value "*" makes the driver export all volumes using '
-+                    'iSCSI. '
-+                    'Any other value leads to an experimental not fully '
-+                    'supported configuration and is interpreted as '
++                    'iSCSI (see the Cinder StorPool driver documentation for '
++                    'how this option and ``storpool_iscsi_cinder_volume`` '
++                    'interact). Any other value leads to an experimental '
++                    'not fully supported configuration and is interpreted as '
 +                    'a whitespace-separated list of patterns for IQNs for '
 +                    'hosts that need volumes to be exported via iSCSI, e.g. '
 +                    '"iqn.1991-05.com.microsoft:\\*" for Windows hosts.'),
-+    cfg.BoolOpt('iscsi_learn_initiator_iqns',
++    cfg.BoolOpt('storpool_iscsi_learn_initiator_iqns',
 +                default=True,
 +                help='Create a StorPool record for a new initiator as soon as '
 +                     'Cinder asks for a volume to be exported to it.'),
-+    cfg.StrOpt('iscsi_portal_group',
++    cfg.StrOpt('storpool_iscsi_portal_group',
 +               default=None,
 +               help='The portal group to export volumes via iSCSI in.'),
      cfg.StrOpt('storpool_template',
                 default=None,
                 help='The StorPool template for volumes with no type.'),
-@@ -105,6 +131,7 @@ class StorPoolDriver(driver.VolumeDriver):
+@@ -93,9 +120,10 @@ class StorPoolDriver(driver.VolumeDriver):
+                   add ignore_errors to the internal _detach_volume() method
+         1.2.3   - Advertise some more driver capabilities.
+         2.0.0   - Implement revert_to_snapshot().
++        2.1.0   - Add iSCSI export support.
+     """
+ 
+-    VERSION = '2.0.0'
++    VERSION = '2.1.0'
+     CI_WIKI_NAME = 'StorPool_distributed_storage_CI'
+ 
+     def __init__(self, *args, **kwargs):
+@@ -105,6 +133,7 @@ class StorPoolDriver(driver.VolumeDriver):
          self._ourId = None
          self._ourIdInt = None
          self._attach = None
-+        self._use_iscsi = None
++        self._use_iscsi = False
  
      @staticmethod
      def get_driver_options():
-@@ -162,10 +189,326 @@ class StorPoolDriver(driver.VolumeDriver):
+@@ -159,10 +188,327 @@ class StorPoolDriver(driver.VolumeDriver):
              raise StorPoolConfigurationInvalid(
                  section=hostname, param='SP_OURID', error=e)
  
@@ -613,7 +708,8 @@
 +        Check the configuration to determine whether this connector is
 +        expected to provide iSCSI exports as opposed to native StorPool
 +        protocol ones.  Match the initiator's IQN against the list of
-+        patterns supplied in the "iscsi_export_to" configuration setting.
++        patterns supplied in the "storpool_iscsi_export_to" configuration
++        setting.
 +        """
 +        if connector is None:
 +            return False
@@ -642,7 +738,7 @@
 +                      'iqn': iqn,
 +                  })
 +
-+        export_to = self.configuration.iscsi_export_to
++        export_to = self.configuration.storpool_iscsi_export_to
 +        if export_to is None:
 +            return False
 +
@@ -668,7 +764,7 @@
 +        """
 +        cfg = self._attach.api().iSCSIConfig()
 +
-+        pg_name = self.configuration.iscsi_portal_group
++        pg_name = self.configuration.storpool_iscsi_portal_group
 +        pg_found = [
 +            pg for pg in cfg.iscsi.portalGroups.values() if pg.name == pg_name
 +        ]
@@ -737,8 +833,8 @@
 +            raise
 +
 +        if cfg['initiator'] is None:
-+            if not (self.configuration.iscsi_learn_initiator_iqns or
-+                    self.configuration.iscsi_cinder_volume and
++            if not (self.configuration.storpool_iscsi_learn_initiator_iqns or
++                    self.configuration.storpool_iscsi_cinder_volume and
 +                    connector.get('storpool_wants_iscsi')):
 +                raise Exception('The "{iqn}" initiator IQN for the "{host}" '
 +                                'host is not defined in the StorPool '
@@ -930,7 +1026,7 @@
          return {'driver_volume_type': 'storpool',
                  'data': {
                      'client_id': self._storpool_client_id(connector),
-@@ -174,6 +517,9 @@ class StorPoolDriver(driver.VolumeDriver):
+@@ -171,6 +517,9 @@ class StorPoolDriver(driver.VolumeDriver):
                  }}
  
      def terminate_connection(self, volume, connector, **kwargs):
@@ -940,7 +1036,7 @@
          pass
  
      def create_snapshot(self, snapshot):
-@@ -275,11 +621,20 @@ class StorPoolDriver(driver.VolumeDriver):
+@@ -272,11 +621,20 @@ class StorPoolDriver(driver.VolumeDriver):
                      )
  
      def create_export(self, context, volume, connector):
@@ -953,7 +1049,7 @@
          pass
  
 +    def _attach_volume(self, context, volume, properties, remote=False):
-+        if self.configuration.iscsi_cinder_volume and not remote:
++        if self.configuration.storpool_iscsi_cinder_volume and not remote:
 +            LOG.debug('- adding the "storpool_wants_iscsi" flag')
 +            properties['storpool_wants_iscsi'] = True
 +
@@ -962,17 +1058,17 @@
      def delete_volume(self, volume):
          name = self._attach.volumeName(volume['id'])
          try:
-@@ -316,6 +671,17 @@ class StorPoolDriver(driver.VolumeDriver):
+@@ -313,6 +671,17 @@ class StorPoolDriver(driver.VolumeDriver):
              LOG.error("StorPoolDriver API initialization failed: %s", e)
              raise
  
-+        export_to = self.configuration.iscsi_export_to
++        export_to = self.configuration.storpool_iscsi_export_to
 +        export_to_set = export_to is not None and export_to.split()
-+        vol_iscsi = self.configuration.iscsi_cinder_volume
-+        pg_name = self.configuration.iscsi_portal_group
++        vol_iscsi = self.configuration.storpool_iscsi_cinder_volume
++        pg_name = self.configuration.storpool_iscsi_portal_group
 +        if (export_to_set or vol_iscsi) and pg_name is None:
-+            msg = _('The "iscsi_portal_group" option is required if '
-+                    'any patterns are listed in "iscsi_export_to"')
++            msg = _('The "storpool_iscsi_portal_group" option is required if '
++                    'any patterns are listed in "storpool_iscsi_export_to"')
 +            raise exception.VolumeDriverException(message=msg)
 +
 +        self._use_iscsi = export_to == "*"
@@ -980,7 +1076,7 @@
      def _update_volume_stats(self):
          try:
              dl = self._attach.api().disksList()
-@@ -341,7 +707,7 @@ class StorPoolDriver(driver.VolumeDriver):
+@@ -338,7 +707,7 @@ class StorPoolDriver(driver.VolumeDriver):
              'total_capacity_gb': total / units.Gi,
              'free_capacity_gb': free / units.Gi,
              'reserved_percentage': 0,
@@ -989,7 +1085,7 @@
              'QoS_support': False,
              'thick_provisioning_support': False,
              'thin_provisioning_support': True,
-@@ -360,7 +726,9 @@ class StorPoolDriver(driver.VolumeDriver):
+@@ -357,7 +726,9 @@ class StorPoolDriver(driver.VolumeDriver):
                  'volume_backend_name') or 'storpool',
              'vendor_name': 'StorPool',
              'driver_version': self.VERSION,
@@ -1001,7 +1097,7 @@
              'clone_across_pools': True,
              'sparse_copy_volume': True,
 diff --git a/doc/source/configuration/block-storage/drivers/storpool-volume-driver.rst b/doc/source/configuration/block-storage/drivers/storpool-volume-driver.rst
-index d2c5895a9..1f3d46cce 100644
+index d2c5895a9..936e83675 100644
 --- a/doc/source/configuration/block-storage/drivers/storpool-volume-driver.rst
 +++ b/doc/source/configuration/block-storage/drivers/storpool-volume-driver.rst
 @@ -19,12 +19,15 @@ Prerequisites
@@ -1024,7 +1120,7 @@
  
  * All nodes that need to access the StorPool API (the compute nodes and
    the node running the ``cinder-volume`` service) must have the following
-@@ -34,6 +37,29 @@ Prerequisites
+@@ -34,6 +37,34 @@ Prerequisites
    * the storpool Python bindings package
    * the storpool.spopenstack Python helper package
  
@@ -1041,20 +1137,25 @@
 +using the standard iSCSI protocol that only requires TCP routing and
 +connectivity between the storage servers and the StorPool clients.
 +The StorPool Cinder driver may be configured to export volumes and
-+snapshots via iSCSI using the ``iscsi_export_to`` and ``iscsi_portal_group``
-+configuration options.
++snapshots via iSCSI using the ``storpool_iscsi_export_to`` and
++``storpool_iscsi_portal_group`` configuration options.
 +
 +Additionally, even if e.g. the hypervisor nodes running Nova will use
 +the StorPool network protocol and run the ``storpool_block`` service
-+(so the ``iscsi_export_to`` option has its default empty string value),
-+the ``iscsi_cinder_volume`` option configures the StorPool Cinder driver
-+so that only the ``cinder-volume`` service will use the iSCSI protocol when
-+attaching volumes and snapshots to transfer data to and from Glance images.
++(so the ``storpool_iscsi_export_to`` option has its default empty string
++value), the ``storpool_iscsi_cinder_volume`` option configures the
++StorPool Cinder driver so that only the ``cinder-volume`` service will
++use the iSCSI protocol when attaching volumes and snapshots to transfer
++data to and from Glance images.
++
++Multiattach support for StorPool is only enabled if iSCSI is used:
++``storpool_iscsi_export_to`` is set to ``*``, that is, when all StorPool
++volumes will be exported via iSCSI to all initiators.
 +
  Configuring the StorPool volume driver
  --------------------------------------
  
-@@ -55,6 +81,32 @@ volume backend definition) and per volume type:
+@@ -55,6 +86,35 @@ volume backend definition) and per volume type:
    with the default placement constraints for the StorPool cluster.
    The default value for the chain replication is 3.
  
@@ -1062,50 +1163,55 @@
 +described in the previous section, the following options may be defined in
 +the ``cinder.conf`` volume backend definition:
 +
-+- ``iscsi_export_to``: if set to the value ``*``, the StorPool Cinder driver
-+  will export volumes and snapshots using the iSCSI protocol instead of
-+  the StorPool network protocol. The ``iscsi_portal_group`` option must also
-+  be specified.
++- ``storpool_iscsi_export_to``: if set to the value ``*``, the StorPool
++  Cinder driver will export volumes and snapshots using the iSCSI
++  protocol instead of the StorPool network protocol. The
++  ``storpool_iscsi_portal_group`` option must also be specified.
 +
-+- ``iscsi_portal_group``: if the ``iscsi_export_to`` option is set to
-+  the value ``*`` or the ``iscsi_cinder_volume`` option is turned on,
-+  this option specifies the name of the iSCSI portal group that Cinder
-+  volumes will be exported to.
++- ``storpool_iscsi_portal_group``: if the ``storpool_iscsi_export_to``
++  option is set to the value ``*`` or the
++  ``storpool_iscsi_cinder_volume`` option is turned on, this option
++  specifies the name of the iSCSI portal group that Cinder volumes will
++  be exported to.
 +
-+- ``iscsi_cinder_volume``: if enabled, even if the ``iscsi_export_to`` option
-+  has its default empty value, the ``cinder-volume`` service will use iSCSI
-+  to attach the volumes and snapshots for transferring data to and from
-+  Glance images.
++- ``storpool_iscsi_cinder_volume``: if enabled, even if the
++  ``storpool_iscsi_export_to`` option has its default empty value, the
++  ``cinder-volume`` service will use iSCSI to attach the volumes and
++  snapshots for transferring data to and from Glance images if Glance is
++  configured to use the Cinder glance_store.
 +
-+- ``iscsi_learn_initiator_iqns``: if enabled, the StorPool Cinder driver will
-+  automatically use the StorPool API to create definitions for new initiators
-+  in the StorPool cluster's configuration. This is the default behavior of
-+  the driver; it may be disabled in the rare case if, e.g. because of site
-+  policy, OpenStack iSCSI initiators (e.g. Nova hypervisors) need to be
-+  explicitly allowed to use the StorPool iSCSI targets.
++- ``storpool_iscsi_learn_initiator_iqns``: if enabled, the StorPool
++  Cinder driver will automatically use the StorPool API to create
++  definitions for new initiators in the StorPool cluster's
++  configuration. This is the default behavior of the driver; it may be
++  disabled in the rare case if, e.g. because of site policy, OpenStack
++  iSCSI initiators (e.g. Nova hypervisors) need to be explicitly allowed
++  to use the StorPool iSCSI targets.
 +
  Using the StorPool volume driver
  --------------------------------
  
 diff --git a/releasenotes/notes/storpool-iscsi-cefcfe590a07c5c7.yaml b/releasenotes/notes/storpool-iscsi-cefcfe590a07c5c7.yaml
 new file mode 100644
-index 000000000..edf46d298
+index 000000000..3863e4099
 --- /dev/null
 +++ b/releasenotes/notes/storpool-iscsi-cefcfe590a07c5c7.yaml
-@@ -0,0 +1,13 @@
-+---
+@@ -0,0 +1,15 @@
 +features:
 +  - |
-+    StorPool driver: Added support for exporting the StorPool-backed volumes
-+    using the iSCSI protocol, so that the Cinder volume service and/or
-+    the Nova or Glance consumers do not need to have the StorPool block
-+    device third-party service installed. See the StorPool driver section in
-+    the Cinder documentation for more information on the ``iscsi_export_to``,
-+    ``iscsi_portal_group``, ``iscsi_cinder_volume``, and
-+    ``iscsi_learn_initiator_iqns`` options.
-+    Note that multiattach support for StorPool is now only enabled if
-+    ``iscsi_export_to`` is set to ``*`, that is, all StorPool volumes will be
-+    exported via iSCSI to all initiators.
++    StorPool driver: Added support for exporting the StorPool-backed
++    volumes using the iSCSI protocol, so that the Cinder volume service
++    and/or the Nova or Glance consumers do not need to have the StorPool
++    block device third-party service installed. See the StorPool driver
++    section in the Cinder documentation for more information on the
++    ``storpool_iscsi_export_to``, ``storpool_iscsi_portal_group``,
++    ``storpool_iscsi_cinder_volume``, and
++    ``storpool_iscsi_learn_initiator_iqns`` options.
++
++    .. note::
++       Multiattach support for StorPool is now only enabled if
++       ``storpool_iscsi_export_to`` is set to ``*``, that is, when all
++       StorPool volumes will be exported via iSCSI to all initiators.
 -- 
-2.25.1
+2.43.0
 
