05 Dec, 2009
40 commits
-
Add one more important cdb_field_offset that can be returned with
scsi_invalid_field_in_cdb. It is the offset of the permissions_bit_mask
field in the capabilities structure.Interestingly, the offset is the same for V1/V2
Signed-off-by: Boaz Harrosh
Signed-off-by: James Bottomley -
define a new osd_dev_is_ver1 that operates on devices
and the old osd_req_is_ver1 uses that new API.Signed-off-by: Boaz Harrosh
Signed-off-by: James Bottomley -
Signed-off-by: James Smart
Signed-off-by: James Bottomley -
…ons and devloss timout fixes
This patch includes the following changes:
- Fixed Panic/Hang when using polling mode for fcp commands
- Added support for Read_rev mbox bits indicating FIP mode of HBA
- Optimize performance of slow-path handling of els responses
- Add code to cleanup orphaned unsolicited receive sequences
- Fixed Devloss timeout when multiple initiators are in same zoneSigned-off-by: James Smart <james.smart@emulex.com>
Signed-off-by: James Bottomley <James.Bottomley@suse.de> -
Signed-off-by: James Smart
Signed-off-by: James Bottomley -
This patch include the following fixes and changes:
- Fix crash when "error" is echoed to board_mode sysfs parameter
- Fix FCoE Parameter parsing in regions 23
- Fix driver crash when creating vport with large number of targets on SLI4
- Fix bug with npiv message being logged when it is not supported by the adapter
- Fix a potential dereferencing mailbox structure after free bug
- Fix firmware crash after vport create with high target count
- Error out requests to set board_mode to warm restart via sysfs on SLI4 HBAs
- Fix Block guard logging
- Fix a memory corruption issue during GID_FT IO prep
- Fix crash while processing unsolicited FC frames
- Fix failed to allocate XRI message is not a critical failure
- Update and fix formatting in some log messages
- Fix missing new line characters in log messages
- Removed the use of the locally defined FC transport layer related macros
- Check the rsplen in lpfc_handle_fcp_err function before using rsplenSigned-off-by: James Smart
Signed-off-by: James Bottomley -
This patch includes the following fixes and new features:
- Fix mask size for CT field in WQE
- Fix VPI base not used when unregistering VPI on port 1.
- Fix UNREG_VPI mailbox command to unreg the correct VPI
- Fixed Check for aborted els command
- Fix error when trying to load driver with wrong firmware on FCoE HBA.
- Fix bug with probe_one routines not putting the Scsi_Host back upon error
- Add support for Clear Virtual Link Async Events
- Add support for unsolicited CT exchange sequence abort
- Add 0x0714 OCeXXXXX PCI IDSigned-off-by: James Smart
Signed-off-by: James Bottomley -
This patch includes the following fixes:
- Fixed panic during HBA reset.
- Fixed FCoE event tag passed in resume_rpi.
- Fix out of order ELS commands
- Fixed discovery issues found during VLAN testing.
- Fix UNREG_VPI failure on extended link pull
- Fixed crash while processing unsolicited FC frames.
- Clear retry count in the delayed ELS handler
- Fixed discovery failure during quick link bounce.Signed-off-by: James Smart
Signed-off-by: James Bottomley -
It is rare to get a queue full with iscsi, because targets seem to
just reduce the iscsi cmd window. However, there is at least
one iscsi target that will throw a queue full when overloaded.
This hooks the iscsi code in to the ramp up/down code, so we
can handle it.Signed-off-by: Mike Christie
Signed-off-by: James Bottomley -
When iser enabled lu reset support it did not set the
bit to allow userspace to get/set the timeout. This
sets the tgt and lu reset timeout bits.Signed-off-by: Mike Christie
Signed-off-by: James Bottomley -
This patch modifies the replacement/recovery_timeout so it works
more like the fc fast io fail tmo.If userspace tries to set the replacement/recovery_timeout to less than
zero, we will turn off the forced recovery cleanup.If userspace sets the value to 0 then we will force the recovery
cleanup immediately.Signed-off-by: Mike Christie
Signed-off-by: James Bottomley -
This implements warm target reset tmf support for
the scsi-ml target reset callback. Previously we would
just drop the session in that callback. This patch will
now try a target reset and if that fails drop the session.Signed-off-by: Mike Christie
Signed-off-by: James Bottomley -
Patch and mail from both MikeC and HannesR:
Before we're trying to send a PDU we have to check whether a TMF
is active. If so and if the PDU will be affected by the TMF
we should allow only Data-out PDUs to be sent.If fast_abort is set, no Data-out PDUs will be sent while
a LUN reset is being processed for a affected LUN.fast_abort is now ingored during a ABORT TASK tmf. We will not
send any Data-outs for a task if the task is being aborted.Signed-off-by: Mike Christie
Signed-off-by: Hannes Reinecke
Signed-off-by: James Bottomley -
For some reason we used to check for the the immediate bit
set and the opcocde in many places instead of just masking
the opcode. In the passthrough code this is a problem
because userspace may or may not have set the immediate bit
and it does not have to. This fixes up the opcode checks
in the passthrough code, so we mask off the opcode then
check against the iscsi proto definition like is done in
other places.Signed-off-by: Mike Christie
Signed-off-by: James Bottomley -
This just has bnx2i use the iscsi_suspend_queue helper.
The suspend works as follows:
When ep_poll has succeeed iscsid will call conn_bind, the LLD will
then call iscsi_conn_bind which will clear the suspend bit.
When ep_disconnect is called (or if there is a conn error) we set
the suspend bit. For the ep_disconnect case I added a helper
in the previous kernel that will take the session lock to make sure
iscsi_queuecommand/xmit_task is not running and it will set
the suspend bit.Signed-off-by: Mike Christie
Acked-by: Anil Veerabhadrappa
Signed-off-by: James Bottomley -
Four models, OPEN-/DF400/DF500/DISK-SUBSYSTEM, can handle REPORT_LUN,
and the BLIST_REPORTLUN2 flag needs to be set. And DF600 doesn't require
any flags because it returns ANSI 03h (SPC).Signed-off-by: Takahiro Yasui
Signed-off-by: James Bottomley -
The scsi ioctl code path was missing scsi target reset
support. This patch just adds it.Signed-off-by: Mike Christie
Signed-off-by: James Bottomley -
If the port state is blocked and the fast io fail tmo has
fired then this patch will fail bsg requests immediately.
This is needed if userspace is sending IOs to test the transport
like with fcping, so it will not have to wait for the dev loss tmo.
With this patch he bsg req fast io fail code behaves like the normal
and sg io/passthrough fast io fail.Signed-off-by: Mike Christie
Acked-By: James Smart
Signed-off-by: James Bottomley -
Allocate right size for bitmap tag,fix error goto and cleanup print
message and undocable commemts. patch attached.Signed-off-by: Lindar Liu
Signed-off-by: Jack Wang
Signed-off-by: James Bottomley -
We set interupt cascading count of outbound queue to get better
performance, correct some unnecessary return values and some noisy
print messages. patch attached.Signed-off-by: Jack Wang
Signed-off-by: Lindar Liu
Signed-off-by: James Bottomley -
Signed-off-by: Jack Wang
Signed-off-by: Lindar Liu
Signed-off-by: James Bottomley -
Some of our virtual SCSI hosts don't have a proper bus parent at the
top, which can be a problem for doing DMA on themThis patch makes the host device cache a pointer to the physical bus
device and provides an extra API for setting it (the normal API picks
it up from the parent). This patch also modifies the qla2xxx and lpfc
vport logic to use the new DMA host setting API.Acked-By: James Smart
Cc: Stable Tree
Signed-off-by: James Bottomley -
Create the sysfs file, dh_state even if the new SCSI device is not
in the any of the device handler's internal lists.Signed-Off-by: Chandra Seetharaman
Acked-by: Hannes Reinecke
Signed-off-by: James Bottomley -
`+' has a higher precedence than `?' so the condition always
evaluates to true and this is preprocessed to `7*((ql) - 1)'Signed-off-by: Roel Kluin
Acked-by: David S. Miller
Signed-off-by: James Bottomley -
The FC-LS spec. says ELS timeouts should be 2 x R_A_TOV.
The FC-GS spec. says CT timeouts should be 3 x R_A_TOV.We've been using E_D_TOV for both of those.
Change for all ELS and CT requests except FLOGI, which we
leave at 2 seconds (using E_D_TOV). One could argue that
R_A_TOV is locally determined until after FLOGI succeeds.This does change FLOGI for vports which becomes FDISC.
This does not change the REC/SRR timeout which is 2 seconds.Signed-off-by: Joe Eykholt
Signed-off-by: Robert Love
Signed-off-by: James Bottomley -
According to the FC-BB-5 Rev2.0, 7.8.6.2, we should not pad FIP keep-alive
frames.Signed-off-by: Yi Zou
Signed-off-by: Robert Love
Signed-off-by: James Bottomley -
All exches must be freed before its EM mempool destroyed in this
case but currently some exches could be still pending in their
scheduled delayed work after EM mempool is destroyed causing
this issue discussed and reported in this latest email thread:-http://www.open-fcoe.org/pipermail/devel/2009-October/004788.html
This patch fixes this issue by adding dedicated work queue thread
fc_exch_workqueue for exch delayed work and then flush this work
queue before destroying EM mempool.The cancel_delayed_work_sync cannot be called during final
fc_exch_reset due to lport and exch locking ordering, so removes
related comment block not relevant any more with this patch.Reported-by: Joe Eykholt
Signed-off-by: Vasu Dev
Signed-off-by: Robert Love
Signed-off-by: James Bottomley -
There are cases outside of our control that may result in a transmit
skb being linearized in dev_queue_xmit. There are a couple of bugs
in libfc/fcoe that can result in a panic at that point. This patch
contains two fixes to prevent those panics.1) use fast cloning instead of shared skbs with dev_queue_xmit
dev_queue_xmit doen't want shared skbuffs being passed in, and
__skb_linearize will BUG if the skb is shared. FCoE is holding an extra
reference around the call to dev_queue_xmit, so that when it returns an
error code indicating the frame has been dropped it can maintain it's
own backlog and retransmit. Switch to using fast skb cloning for this
instead.2) don't append compound pages as > PAGE_SIZE skb fragments
fc_fcp_send_data will append pages from a scatterlist to the nr_frags[]
if the netdev supports it. But, it's using > PAGE_SIZE compound pages
as a single skb_frag. In the highmem linearize case that page will be
passed to kmap_atomic to get a mapping to copy out of, but
kmap_atomic will only allow access to the first PAGE_SIZE part.
The memcpy will keep going and cause a page fault once is crosses the
first boundary.If fc_fcp_send_data uses linear buffers from the start, it calls
kmap_atomic one PAGE_SIZE at a time. That same logic needs to be
applied when setting up skb_frags.Signed-off-by: Chris Leech
Signed-off-by: Robert Love
Signed-off-by: James Bottomley -
If the underlying netdev is a VLAN device, make sure the VLAN ID is integrated
into the WWNN/WWPN name generation. Also added/updated the comments to reflect
this change.Signed-off-by: Yi Zou
Signed-off-by: Robert Love
Signed-off-by: James Bottomley -
DID_NO_CONNECT is not a nice value to use for pkt alloc failures,
because you can probably retry and IO will become available again.
For the device reset callout, we do not want to set the scsi command
result for the above reason, and because we do not need to set
the scsi_cmd->result in this path. We and other drivers do not set it
for success for example, and we do not set it for other failure.
And scsi-ml does not send every command through this path, and it is
not expecting us to use the scsi_cmnd struct like a cmd coming thruogh
queuecommand. I think it is more for storage in case we need a cmd
struct for a tmf and to give us certain params like the LUN.Patch was made over scsi-misc today.
Signed-off-by: Mike Christie
Signed-off-by: Robert Love
Signed-off-by: James Bottomley -
We are still using netdev->dev_addr to generate lport's WWNN/WWPN even if the
LLD has support for NETDEV_HW_ADDR_T_SAN. Instead, we should just use the
fip->ctl_src_addr, which is the NETDEV_HW_ADDR_T_SAN if LLD supports it or it
is just the netdev->dev_addr if it does not.Signed-off-by: Yi Zou
Signed-off-by: Robert Love
Signed-off-by: James Bottomley -
Make sure we are get the SAN MAC address from the real netdev if the input
netdev is a VLAN device.Signed-off-by: Yi Zou
Signed-off-by: Robert Love
Signed-off-by: James Bottomley -
This was fixed before in 7a7f0c7 but it's introduced again recently.
Signed-off-by: Yi Zou
Signed-off-by: Robert Love
Signed-off-by: James Bottomley -
Add initialization of .bsg_request in the scsi_transport_fc
template so that fcping works.Signed-off-by: Joe Eykholt
Signed-off-by: Robert Love
Signed-off-by: James Bottomley -
Customers and certification tests have pointed out that we don't
show up on the switch management software as an initiator.On some MDS switches 'show fcns database' command shows libfc
initiators as 'fcp' not 'fcp:init' like other initiators.On others switches, I think the switch gets the features by doing a PRLI,
but it may be only certain models or under certain configurations.Fix this by registering our FC4 features with the RFF_ID CT request
after local port login and after the RFT_ID.Signed-off-by: Joe Eykholt
Signed-off-by: Robert Love
Signed-off-by: James Bottomley -
Use libfcoe as a common FIP implementation with fcoe.
FIP or non-FIP mode is fully automatic if the firmware
supports and enables it.Even if FIP is not supported, this uses libfcoe for the non-FIP
handling of FLOGI and its response.Use the new lport_set_port_id() notification to capture
successful FLOGI responses and port_id resets.While transitioning between Ethernet and FC mode, all rx and
tx FC frames are queued. In Ethernet mode, all frames are
passed to the exchange manager to capture FLOGI responses.Change to set data_src_addr to the ctl_src_addr whenever it
would have previously been zero because we're not logged in.
This seems safer so we'll never send a frame with a 0 source MAC.
This also eliminates a special case for sending FLOGI frames.Signed-off-by: Joe Eykholt
Signed-off-by: Robert Love
Signed-off-by: James Bottomley -
There was a locking problem where the fip->lock was held during
the call to update_mac(). The rtnl_lock() must be taken before
the fip->lock, not the other way around. This fixes that.Now that fcoe_ctlr_recv_flog() is called only from the response handler
to a FLOGI request, some checking can be eliminated. Instead of calling
update_mac(), just fill in the granted_mac address for the passed-in
frame (skb).Eliminate the passed-in source MAC address since it is also in the skb.
Also, in fcoe, call fcoe_set_src_mac() directly instead of going thru
the fip function pointer. This will generate less code.
Then, since fip isn't needed for LOGO response, use lport as the arg.Signed-off-by: Joe Eykholt
Signed-off-by: Robert Love
Signed-off-by: James Bottomley -
The libfc link up/down messages don't indicate which port is changing.
The Port ID will often be 0.Signed-off-by: Joe Eykholt
Signed-off-by: Robert Love
Signed-off-by: James Bottomley -
This is to notify the LLD when an FC_ID is assigned to the local port.
The fnic driver needs to push the assigned FC_ID to firmware.
It currently does this by intercepting the FLOGI responses, and
in order to make that code more common with FIP and NPIV, it
makes more sense to wait until the local port has completely
handled the FLOGI or FDISC response. Also, when we fix
point-to-point FC_ID assignment, we'll need this callback as well.Add a call to the libfc template, which is called whenever
the local port FC_ID is being assigned. It defaults to
fc_lport_set_fid(), supplied by libfc.As additional benefit of this function, the LLD may determine
the MAC address that caused the change by looking at the received frame.We also print the assigned port ID as long as it isn't 0.
Setting port ID to 0 happens often in reset while retrying FLOGI,
and would be uninteresting. This replaces the previous message
which didn't identify the host adapter instance.patch v2 note: changed one word in a comment. "intercepted" -> "provided".
Signed-off-by: Joe Eykholt
Signed-off-by: Robert Love
Signed-off-by: James Bottomley -
Local port debug messages were using fc_els_resp_type() which showed
all CT responses as rejects.Handle CT responses correctly based by inspecting fh_type.
I decided not to rename the function to keep the patch smaller.
We could call it just fc_resp_type() or fc_elsct_resp_type().Signed-off-by: Joe Eykholt
Signed-off-by: Robert Love
Signed-off-by: James Bottomley