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

    Boaz Harrosh
     
  • 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

    Boaz Harrosh
     
  • Signed-off-by: James Smart
    Signed-off-by: James Bottomley

    James Smart
     
  • …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 zone

    Signed-off-by: James Smart <james.smart@emulex.com>
    Signed-off-by: James Bottomley <James.Bottomley@suse.de>

    James Smart
     
  • Signed-off-by: James Smart
    Signed-off-by: James Bottomley

    James Smart
     
  • 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 rsplen

    Signed-off-by: James Smart
    Signed-off-by: James Bottomley

    James Smart
     
  • 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 ID

    Signed-off-by: James Smart
    Signed-off-by: James Bottomley

    James Smart
     
  • 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

    James Smart
     
  • 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

    Mike Christie
     
  • 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

    Mike Christie
     
  • 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

    Mike Christie
     
  • 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

    Mike Christie
     
  • 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

    Mike Christie
     
  • 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

    Mike Christie
     
  • 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

    Mike Christie
     
  • 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

    Takahiro Yasui
     
  • 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

    Mike Christie
     
  • 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

    Mike Christie
     
  • 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

    jack_wang
     
  • 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

    jack_wang
     
  • Signed-off-by: Jack Wang
    Signed-off-by: Lindar Liu
    Signed-off-by: James Bottomley

    jack_wang
     
  • 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 them

    This 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

    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

    Chandra Seetharaman
     
  • `+' 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

    Roel Kluin
     
  • 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

    Joe Eykholt
     
  • 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

    Yi Zou
     
  • 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

    Vasu Dev
     
  • 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

    Chris Leech
     
  • 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

    Yi Zou
     
  • 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

    Mike Christie
     
  • 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

    Yi Zou
     
  • 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

    Yi Zou
     
  • 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

    Yi Zou
     
  • 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

    Joe Eykholt
     
  • 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

    Joe Eykholt
     
  • 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

    Joe Eykholt
     
  • 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

    Joe Eykholt
     
  • 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

    Joe Eykholt
     
  • 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

    Joe Eykholt
     
  • 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

    Joe Eykholt