code: def _attach(self, fcp, assigner_id, target_wwpn, target_lun,
                  multipath, os_version, mount_point):
          
          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)
docs: 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