BFA_TRC_FILE(LDRV, BFAD);
DEFINE_MUTEX(bfad_mutex);
-LIST_HEAD(bfad_list);
static int bfad_inst;
static int num_sgpgs_parm;
mutex_lock(&bfad_mutex);
bfad->inst_no = bfad_inst++;
- list_add_tail(&bfad->list_entry, &bfad_list);
mutex_unlock(&bfad_mutex);
/* Initializing the state machine: State set to uninit */
bfad_debugfs_exit(&bfad->pport);
mutex_lock(&bfad_mutex);
bfad_inst--;
- list_del(&bfad->list_entry);
mutex_unlock(&bfad_mutex);
bfad_pci_uninit(pdev, bfad);
out_pci_init_failure:
/* Cleaning the BFAD instance */
mutex_lock(&bfad_mutex);
bfad_inst--;
- list_del(&bfad->list_entry);
mutex_unlock(&bfad_mutex);
bfad_pci_uninit(pdev, bfad);
#include <linux/types.h>
#include <linux/pci.h>
#include <linux/dma-mapping.h>
-#include <linux/idr.h>
#include <linux/interrupt.h>
#include <linux/cdev.h>
#include <linux/fs.h>
*/
struct bfad_s {
bfa_sm_t sm; /* state machine */
- struct list_head list_entry;
struct bfa_s bfa;
struct bfa_fcs_s bfa_fcs;
struct pci_dev *pcidev;
int bfad_get_linkup_delay(struct bfad_s *bfad);
int bfad_install_msix_handler(struct bfad_s *bfad);
-extern struct idr bfad_im_port_index;
extern struct pci_device_id bfad_id_table[];
-extern struct list_head bfad_list;
extern char *os_name;
extern char *os_patch;
extern char *host_name;
*/
#include <linux/export.h>
+#include <linux/idr.h>
#include "bfad_drv.h"
#include "bfad_im.h"
BFA_TRC_FILE(LDRV, IM);
-DEFINE_IDR(bfad_im_port_index);
+static DEFINE_IDA(bfad_im_port_index);
struct scsi_transport_template *bfad_im_scsi_transport_template;
struct scsi_transport_template *bfad_im_scsi_vport_transport_template;
static void bfad_im_itnim_work_handler(struct work_struct *work);
struct bfad_im_port_pointer *im_portp;
int error = 1;
- mutex_lock(&bfad_mutex);
- error = idr_alloc(&bfad_im_port_index, im_port, 0, 0, GFP_KERNEL);
+ error = ida_alloc(&bfad_im_port_index, GFP_KERNEL);
if (error < 0) {
- mutex_unlock(&bfad_mutex);
- printk(KERN_WARNING "idr_alloc failure\n");
+ printk(KERN_WARNING "ID alloc failure\n");
goto out;
}
- im_port->idr_id = error;
- mutex_unlock(&bfad_mutex);
+ im_port->host_id = error;
im_port->shost = bfad_scsi_host_alloc(im_port, bfad);
if (!im_port->shost) {
error = 1;
- goto out_free_idr;
+ goto out_free_id;
}
im_portp = shost_priv(im_port->shost);
im_portp->p = im_port;
- im_port->shost->unique_id = im_port->idr_id;
+ im_port->shost->unique_id = im_port->host_id;
im_port->shost->this_id = -1;
im_port->shost->max_id = MAX_FCP_TARGET;
im_port->shost->max_lun = MAX_FCP_LUN;
out_fc_rel:
scsi_host_put(im_port->shost);
im_port->shost = NULL;
-out_free_idr:
- mutex_lock(&bfad_mutex);
- idr_remove(&bfad_im_port_index, im_port->idr_id);
- mutex_unlock(&bfad_mutex);
+out_free_id:
+ ida_free(&bfad_im_port_index, im_port->host_id);
out:
return error;
}
scsi_remove_host(im_port->shost);
scsi_host_put(im_port->shost);
- mutex_lock(&bfad_mutex);
- idr_remove(&bfad_im_port_index, im_port->idr_id);
- mutex_unlock(&bfad_mutex);
+ ida_free(&bfad_im_port_index, im_port->host_id);
}
static void
if (bfad_im_scsi_vport_transport_template)
fc_release_transport(bfad_im_scsi_vport_transport_template);
-
- idr_destroy(&bfad_im_port_index);
}
void