Re: [PATCH 1/5] bfa: Brocade BFA FC SCSI driver (bfad)

From: Mike Christie
Date: Mon Mar 23 2009 - 13:17:48 EST


Jing Huang wrote:
+
+ im_port->shost->hostdata[0] = (unsigned long)im_port;


I think I asked about this before. Why do you just not allocate the
bfad
or im_port in the hostdata? What is the struct hierarchy? Do you have
one bfad for the entire HBA/pci_device then have a im_port for each
port
on the hba?


Thanks for review the code again. Yes, we have one bfad for each HBA
port/pci device, and one im_port (im stands for initiator mode) for each
scsi_host/vport. We can certainly allocate im_port in scsi_host_alloc()
as you suggest, but currently we allocate all possible fc4 port
(initiator/tgt/ipfc) in one function, and it is just more convenient to
do it in one place.

I think the refcounting is off though. For example in the shutdown case, if someone is accessing a scsi host sysfs attr, bfad_im_scsi_host_free would release the drivers refcounts on the scsi_host and free the im_port, but the sysfs code could still be accessing the im port. The shost would still be there because the sysfs code took a refcount on kobject/kref, but the im port is now gone. When you allocate the port struct in the hostdata with scsi_host_alloc this type of issue is handled for you.
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/