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-scsi" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html