Ejemplo n.º 1
0
static int zfcp_erp_action_enqueue(int want, struct zfcp_adapter *adapter,
				   struct zfcp_port *port,
				   struct zfcp_unit *unit, char *id, void *ref)
{
	int retval = 1, need;
	struct zfcp_erp_action *act = NULL;

	if (!adapter->erp_thread)
		return -EIO;

	need = zfcp_erp_required_act(want, adapter, port, unit);
	if (!need)
		goto out;

	atomic_set_mask(ZFCP_STATUS_ADAPTER_ERP_PENDING, &adapter->status);
	act = zfcp_erp_setup_act(need, adapter, port, unit);
	if (!act)
		goto out;
	++adapter->erp_total_count;
	list_add_tail(&act->list, &adapter->erp_ready_head);
	wake_up(&adapter->erp_ready_wq);
	zfcp_dbf_rec_thread("eracte1", adapter->dbf);
	retval = 0;
 out:
	zfcp_dbf_rec_trigger(id, ref, want, need, act, adapter, port, unit);
	return retval;
}
Ejemplo n.º 2
0
static int zfcp_erp_action_enqueue(int want, struct zfcp_adapter *adapter,
                                   struct zfcp_port *port,
                                   struct scsi_device *sdev,
                                   char *id, u32 act_status)
{
    int retval = 1, need;
    struct zfcp_erp_action *act;

    if (!adapter->erp_thread)
        return -EIO;

    need = zfcp_erp_required_act(want, adapter, port, sdev);
    if (!need)
        goto out;

    act = zfcp_erp_setup_act(need, act_status, adapter, port, sdev);
    if (!act)
        goto out;
    atomic_set_mask(ZFCP_STATUS_ADAPTER_ERP_PENDING, &adapter->status);
    ++adapter->erp_total_count;
    list_add_tail(&act->list, &adapter->erp_ready_head);
    wake_up(&adapter->erp_ready_wq);
    retval = 0;
out:
    zfcp_dbf_rec_trig(id, adapter, port, sdev, want, need);
    return retval;
}