/** * zfcp_adapter_debug_unregister - unregisters debug feature for an adapter * @adapter: pointer to adapter for which debug features should be unregistered */ void zfcp_dbf_adapter_unregister(struct zfcp_adapter *adapter) { struct zfcp_dbf *dbf = adapter->dbf; adapter->dbf = NULL; zfcp_dbf_unregister(dbf); }
/** * zfcp_adapter_debug_register - registers debug feature for an adapter * @adapter: pointer to adapter for which debug features should be registered * return: -ENOMEM on error, 0 otherwise */ int zfcp_dbf_adapter_register(struct zfcp_adapter *adapter) { char name[DEBUG_MAX_NAME_LEN]; struct zfcp_dbf *dbf; dbf = kzalloc(sizeof(struct zfcp_dbf), GFP_KERNEL); if (!dbf) return -ENOMEM; spin_lock_init(&dbf->pay_lock); spin_lock_init(&dbf->hba_lock); spin_lock_init(&dbf->san_lock); spin_lock_init(&dbf->scsi_lock); spin_lock_init(&dbf->rec_lock); /* debug feature area which records recovery activity */ sprintf(name, "zfcp_%s_rec", dev_name(&adapter->ccw_device->dev)); dbf->rec = zfcp_dbf_reg(name, dbfsize, sizeof(struct zfcp_dbf_rec)); if (!dbf->rec) goto err_out; /* debug feature area which records HBA (FSF and QDIO) conditions */ sprintf(name, "zfcp_%s_hba", dev_name(&adapter->ccw_device->dev)); dbf->hba = zfcp_dbf_reg(name, dbfsize, sizeof(struct zfcp_dbf_hba)); if (!dbf->hba) goto err_out; /* debug feature area which records payload info */ sprintf(name, "zfcp_%s_pay", dev_name(&adapter->ccw_device->dev)); dbf->pay = zfcp_dbf_reg(name, dbfsize * 2, sizeof(struct zfcp_dbf_pay)); if (!dbf->pay) goto err_out; /* debug feature area which records SAN command failures and recovery */ sprintf(name, "zfcp_%s_san", dev_name(&adapter->ccw_device->dev)); dbf->san = zfcp_dbf_reg(name, dbfsize, sizeof(struct zfcp_dbf_san)); if (!dbf->san) goto err_out; /* debug feature area which records SCSI command failures and recovery */ sprintf(name, "zfcp_%s_scsi", dev_name(&adapter->ccw_device->dev)); dbf->scsi = zfcp_dbf_reg(name, dbfsize, sizeof(struct zfcp_dbf_scsi)); if (!dbf->scsi) goto err_out; adapter->dbf = dbf; return 0; err_out: zfcp_dbf_unregister(dbf); return -ENOMEM; }
int zfcp_dbf_adapter_register(struct zfcp_adapter *adapter) { char name[DEBUG_MAX_NAME_LEN]; struct zfcp_dbf *dbf; dbf = kzalloc(sizeof(struct zfcp_dbf), GFP_KERNEL); if (!dbf) return -ENOMEM; spin_lock_init(&dbf->pay_lock); spin_lock_init(&dbf->hba_lock); spin_lock_init(&dbf->san_lock); spin_lock_init(&dbf->scsi_lock); spin_lock_init(&dbf->rec_lock); sprintf(name, "zfcp_%s_rec", dev_name(&adapter->ccw_device->dev)); dbf->rec = zfcp_dbf_reg(name, dbfsize, sizeof(struct zfcp_dbf_rec)); if (!dbf->rec) goto err_out; sprintf(name, "zfcp_%s_hba", dev_name(&adapter->ccw_device->dev)); dbf->hba = zfcp_dbf_reg(name, dbfsize, sizeof(struct zfcp_dbf_hba)); if (!dbf->hba) goto err_out; sprintf(name, "zfcp_%s_pay", dev_name(&adapter->ccw_device->dev)); dbf->pay = zfcp_dbf_reg(name, dbfsize * 2, sizeof(struct zfcp_dbf_pay)); if (!dbf->pay) goto err_out; sprintf(name, "zfcp_%s_san", dev_name(&adapter->ccw_device->dev)); dbf->san = zfcp_dbf_reg(name, dbfsize, sizeof(struct zfcp_dbf_san)); if (!dbf->san) goto err_out; sprintf(name, "zfcp_%s_scsi", dev_name(&adapter->ccw_device->dev)); dbf->scsi = zfcp_dbf_reg(name, dbfsize, sizeof(struct zfcp_dbf_scsi)); if (!dbf->scsi) goto err_out; adapter->dbf = dbf; return 0; err_out: zfcp_dbf_unregister(dbf); return -ENOMEM; }