[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: <49C7C423.5010202@cs.wisc.edu>
Date: Mon, 23 Mar 2009 12:17:23 -0500
From: Mike Christie <michaelc@...wisc.edu>
To: Jing Huang <huangj@...cade.COM>
CC: James.Bottomley@...senPartnership.com,
Krishna Gudipati <kgudipat@...cade.COM>,
linux-kernel@...r.kernel.org, linux-scsi@...r.kernel.org,
Ramkumar Vadivelu <rvadivel@...cade.COM>,
Vinodh Ravindran <vravindr@...cade.COM>
Subject: Re: [PATCH 1/5] bfa: Brocade BFA FC SCSI driver (bfad)
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@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists