docs: def _attach(self, fcp, assigner_id, target_wwpn, target_lun,
                  multipath, os_version, mount_point):
          """Attach a volume
  
          First, we need translate fcp into local wwpn, then
          dedicate fcp to the user if it's needed, after that
          call smt layer to call linux command
          """
          LOG.info('Start to attach device to %s' % assigner_id)
          self.fcp_mgr.init_fcp(assigner_id)
          new = self.fcp_mgr.increase_fcp_usage(fcp, assigner_id)
          try:
              if new:
                  self._dedicate_fcp(fcp, assigner_id)
  
              self._add_disk(fcp, assigner_id, target_wwpn, target_lun,
                             multipath, os_version, mount_point)
          except exception.SDKBaseException as err:
              errmsg = 'rollback attach because error:' + err.format_message()
              LOG.error(errmsg)
              connections = self.fcp_mgr.decrease_fcp_usage(fcp, assigner_id)
              # if connections less than 1, undedicate the device
              if not connections:
                  with zvmutils.ignore_errors():
                      self._undedicate_fcp(fcp, assigner_id)
              raise exception.SDKBaseException(msg=errmsg)
          # TODO: other exceptions?
  
          LOG.info('Attaching device to %s is done.' % assigner_id)