From: Michael Reed <mdr@sgi.com>
To: James.Smart@Emulex.Com
Cc: Andrew Vasquez <andrew.vasquez@qlogic.com>,
Linux-SCSI Mailing List <linux-scsi@vger.kernel.org>
Subject: Re: [PATCH] fc_transport: stop creating duplicate rport entries.
Date: Fri, 24 Feb 2006 17:37:36 -0600 [thread overview]
Message-ID: <43FF98C0.5000209@sgi.com> (raw)
In-Reply-To: <43FB902C.6060205@emulex.com>
James Smart wrote:
> Is it necessary - e.g. register w/o role, then update it ? No, if
> the lldd wants to plogi then wait for prli to occur before registering
> the rport - that's fine.
>
> However, I've found it easier, especially for non-FCP entities, to
> register the rport as soon as it was detected (works for anything, non-FCP
> included), then when prli completes update the role (works only w/ FCP).
>
> mptfc is fine to register once with the roles already known.
I have figured out a significant difference between these two sequences
rid->roles = FC_RPORT_ROLE_UNKNOWN | FC_RPORT_ROLE_FCP_TARGET;
rport = fc_remote_port_add(host,channel,rid);
-and-
rid->roles = FC_RPORT_ROLE_UNKNOWN;
rport = fc_remote_port_add(host,channel,rid);
rid->roles |= FC_RPORT_ROLE_FCP_TARGET;
fc_remote_port_rolechg(rport,rid->roles);
The difference is that the former case will schedule rport->scan_work
IMMEDIATELY after the fc_remote_port_add() and the latter will wait
until the fc_remote_port_rolechg().
Why is this significant? Because the fc_remote_port_add() clears the
dd_data. In the first case it is possible for the scan_work to begin
prior to the driver filling in the dd_data and possibly causing a panic.
The second case allows for this sequence:
rid->roles = FC_RPORT_ROLE_UNKNOWN;
rport = fc_remote_port_add(host,channel,rid);
rport->dd_data = some_important_data_item;
rid->roles |= FC_RPORT_ROLE_FCP_TARGET;
fc_remote_port_rolechg(rport,rid->roles);
It seems wrong, somehow, for the scan to be kicked off by the add.
Perhaps the driver should be responsible for kicking off the scan
after it knows its infrastructure is fully in place.
fc_remote_port_initiate_target_scan(rport);
The proposed function would kick off a scan if the rport's role
include FCP_TARGET. Otherwise, NOP.
Alternately, I suppose fc_remote_port_add() could be modified
to accept an argument pointing to the data to be placed in
dd_data (presuming dd_fcrport_size is non-zero).
fc_remote_port_add(host,channel,rid,dd_data);
Thanks for thinking about this.
Mike
>
> -- james
>
>
> Michael Reed wrote:
>>
>> James Smart wrote:
>>> Good Catch!
>>>
>>> -- james s
>>>
>>> Andrew Vasquez wrote:
>>>> Current fc_transport consumers initially register rports
>>>> with an UNKNOWN role-state and follow-up with a call to
>>>> fc_remote_port_rolechg().
>>
>> So, is the above sequence necessary? Why not just register
>> the rport with appropriate role and state? This is what
>> LSI fusion driver (mptfc) does. "roles" has target and
>> initiator set. (Is fusion broken?)
>>
>> (Not saying the fix shouldn't be there.)
>>
>> Mike
prev parent reply other threads:[~2006-02-24 23:37 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-02-14 22:22 [PATCH] fc_transport: stop creating duplicate rport entries Andrew Vasquez
2006-02-15 13:54 ` James Smart
2006-02-21 21:52 ` Michael Reed
2006-02-21 22:07 ` Michael Reed
2006-02-21 22:11 ` James Smart
2006-02-24 23:37 ` Michael Reed [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=43FF98C0.5000209@sgi.com \
--to=mdr@sgi.com \
--cc=James.Smart@Emulex.Com \
--cc=andrew.vasquez@qlogic.com \
--cc=linux-scsi@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).