docs: def _detach(self, fcp, assigner_id, target_wwpn, target_lun,
                  multipath, os_version, mount_point):
          """Detach a volume from a guest"""
          LOG.info('Start to detach device from %s' % assigner_id)
          connections = self.fcp_mgr.decrease_fcp_usage(fcp, assigner_id)
  
          try:
              self._remove_disk(fcp, assigner_id, target_wwpn, target_lun,
                                multipath, os_version, mount_point)
              if not connections:
                  self._undedicate_fcp(fcp, assigner_id)
          except (exception.SDKBaseException,
                  exception.SDKSMTRequestFailed) as err:
              errmsg = 'rollback detach because error:' + err.format_message()
              LOG.error(errmsg)
              self.fcp_mgr.increase_fcp_usage(fcp, assigner_id)
              with zvmutils.ignore_errors():
                  self._add_disk(fcp, assigner_id, target_wwpn, target_lun,
                                 multipath, os_version, mount_point)
              raise exception.SDKBaseException(msg=errmsg)
  
          LOG.info('Detaching device to %s is done.' % assigner_id)