05 Dec, 2009

40 commits

  • While the target reset task management function has been deprecated in
    newer specs, it is still in use by SCSI FC drivers and there is no
    real replacement. Add the target reset flag to the FCP header file to
    allow usage of this definition in SCSI FC drivers.

    Reviewed-by: Swen Schillig
    Signed-off-by: Christof Schmitt
    Signed-off-by: James Bottomley

    Christof Schmitt
     
  • Upon receiving ELS_RLS, send the Link Error Status Block (LESB) back.

    Signed-off-by: Yi Zou
    Signed-off-by: Robert Love
    Signed-off-by: James Bottomley

    Yi Zou
     
  • Add a member function pointer as get_lesb to libfc_function_template so LLD
    can fill the LESB based on its own statistics. For fcoe, it fills the LESB
    as a fcoe_fc_els_lesb struct according to FC-BB-5.

    Signed-off-by: Yi Zou
    Signed-off-by: Robert Love
    Signed-off-by: James Bottomley

    Yi Zou
     
  • Add struct fcoe_fc_els_lesb as described in FC-BB-5 LESB for FCoE. It has
    the same size as LESB defined in FC-FS-3 (struct fc_els_lesb) but members
    have different meanings according to FC-BB-5.

    Signed-off-by: Yi Zou
    Signed-off-by: Robert Love
    Signed-off-by: James Bottomley

    Yi Zou
     
  • Add tracking the Missing Discovery Advertisement count for FIP Fiber Channel
    Forwarder (FCF) as described in FC-BB-5 Rev2.0 for LESB. The time is 1.5 times
    the FKA_ADV_PERIOD of the corresponding FCF.

    Signed-off-by: Yi Zou
    Signed-off-by: Robert Love
    Signed-off-by: James Bottomley

    Yi Zou
     
  • Add tracking the Virtual Link Failure count when either we have found
    the FCF as "aged" or we are receiving FIP Clear Virtual Link from the
    FCF.

    Signed-off-by: Yi Zou
    Signed-off-by: Robert Love
    Signed-off-by: James Bottomley

    Yi Zou
     
  • When the D bit is set if the FKA_ADV_Period of the FIP Discovery
    Advertisement, the ENode should not transmit period ENode FIP Keep Alive and
    VN_Port FIP Keep Alive (FC-BB-5 Rev2, 7.8.3.13).

    Note that fcf->flags is taken directly from the fip_header, I am claiming one
    bit for the purpose of the FIP_FKA_Period D bit as FIP_FL_FK_ADV_B, and use
    FIP_HEADER_FLAGS as bitmask for bits used in fip_header.

    Signed-off-by: Yi Zou
    Signed-off-by: Robert Love
    Signed-off-by: James Bottomley

    Yi Zou
     
  • FC-BB-5 Rev2.0, Clause 7.10 extends the FC-LS-3 LESB for FC-BB_E. We are
    already tracking Link Failure Count so add the rest in this patch.

    For VLinkFailureCount and MissDiscAdvCount, they are part of the per-cpu
    fcoe_dev_stats. For SymbolErrorCount, ErroredBlockCount, and FCSErrorCount,
    they are defined in IEEE 802.3-2008 and are per LLD. They are expected to
    come from LLD.

    Signed-off-by: Yi Zou
    Signed-off-by: Robert Love
    Signed-off-by: James Bottomley

    Yi Zou
     
  • Allow FCP frames to bypass the FCoE receive processing threads and handle
    them directly in softirq context, if they are received on the correct CPU.
    This preserves the queuing to threads for scaling out receive processing
    to multiple CPUs, but allows FCoE-aware multi-queue network drivers that
    direct frames to the originating CPUs to handle FCP processing with less
    scheduling latency.

    Only FCP is handled directly, because libfc makes use of mutexes in ELS
    handling routines.

    The bulk of this change is just moving the FCoE receive processing out of
    the receive thread function, leaving behind just the thread and queue
    management. The interesting bits are in fcoe_rcv()

    Signed-off-by: Chris Leech
    Signed-off-by: Robert Love
    Signed-off-by: James Bottomley

    Chris Leech
     
  • Frame header room is already incluced, just pass the length of payload.

    Signed-off-by: Yi Zou
    Signed-off-by: Robert Love
    Signed-off-by: James Bottomley

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

    James Smart
     
  • Hardware related Fixes and Changes.
    - Added new Adapter IDs and update default Adapter names.
    - Added PCI read after EQarm doorbell PCI write to flush the write
    and avoid spurrious interrupts when in INTx mode.
    - Phase out use of ONLINE registers.
    - Fix for lost MSI interrupt

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

    James Smart
     
  • Fix errors relating to crashes and hangs.
    - Fix crash due to list corruption while unloading driver.
    - Fix panic during pci-hot-plug testing.
    - Fix panic when unmapping luns.
    - Fixed total_scsi_bufs counting could cause exhausted memory.
    - Fixed locking issue causing hang.
    - Fixed the call from lpfc_new_scsi_buf_s3 to use lpfc_release_scsi_buf_s3.

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

    James Smart
     
  • Fix AER issues.
    - Made AER sysfs entry point return "Operation not permitted" to
    OneConnect HBAs
    - Stop and abort all I/Os on HBA for AER uncorrectable non-fatal error
    handling

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

    James Smart
     
  • FC protocol fixes.
    - Fix send sequence logic to handle multi SGL IOCBs.
    - Fix FDISC completion always setting VPORT state to failed.
    - Ported the fix on reporting of max_vpi to uppper layer.
    - Fix incorrect number of Vports allowed to be created.
    - Fixed Dead FCoE port after creating vports.
    - Added handling of ELS request for Reinstate Recovery Qualifier (RRQ)
    - Handle unsolicited CT exchange initiator receiving CT exchange ABTS
    - Migrate LUN queue depth ramp up code to scsi mid-layer.
    - Made ABTS WQE go to the same WQ as the WQE to be aborted.
    - Fix Vport does not rediscover after FCF goes away.
    - Fixed lpfc_unreg_vfi failure after devloss timeout.
    - Fixed RPI bit leak.
    - Fix hbq pointer corruption during target discovery.

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

    James Smart
     
  • FCoE Protocol fixes.
    - Fixed FIP frame designation for ELS commands.
    - Fix CVL received on Port 1 not processed by driver.
    - Fix Zeroed frame on wire after FLOGI
    - Fix vport keep-alive does not contain the correct WWN.

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

    James Smart
     
  • value cannot logically be less than START and greater than BUFFERSIZE.

    #define EXTENDED_SENSE_START 18

    // vi include/scsi/scsi_cmnd.h +105
    #define SCSI_SENSE_BUFFERSIZE 96

    [akpm@linux-foundation.org: fix warning]
    Signed-off-by: Roel Kluin
    Signed-off-by: Andrew Morton
    Acked-by: Kai Makisara
    Signed-off-by: James Bottomley

    Roel Kluin
     
  • Fix scsi_devinfo.c kernel-doc function names to match actual function
    names.

    Signed-off-by: Randy Dunlap
    Signed-off-by: Andrew Morton
    Signed-off-by: James Bottomley

    Randy Dunlap
     
  • include/scsi/osd_protocol.h uses ALIGN() without an #include
    , leading to:
    | include/scsi/osd_protocol.h:362: error: implicit declaration of function 'ALIGN'

    Signed-off-by: Martin Michlmayr
    Signed-off-by: Boaz Harrosh
    Cc: Stable Tree
    Signed-off-by: James Bottomley

    Martin Michlmayr
     
  • Administer some love to the osd_req_decode_sense function

    * Fix a bad bug with osd_req_decode_sense(). If there was no scsi
    residual, .i.e the request never reached the target, then all the
    osd_sense_info members where garbage.

    * Add grossly missing in/out_resid to osd_sense_info and fill them in
    properly.

    * Define an osd_err_priority enum which divides the possible errors into
    7 categories in ascending severity. Each category is also assigned a
    Linux return code translation.

    Analyze the different osd/scsi/block returned errors and set the
    proper osd_err_priority and Linux return code accordingly.

    * extra check a few situations so not to get stuck with inconsistent
    error view. Example an empty residual with an error code, and other
    places ...

    Lots of libosd's osd_req_decode_sense clients had this logic in some
    form or another. Consolidate all these into one place that should
    actually know about osd returns. Thous translating it to a more
    abstract error.

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

    Boaz Harrosh
     
  • When an error was detected in an attribute list do to
    a target bug. We would print an error but spin endlessly
    regardless. Fix it.

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

    Boaz Harrosh
     
  • The (never tested) osd_sense_attribute_identification case
    has never worked. The loop was never advanced on.
    Fix it to work as intended.

    On 10/30/2009 04:39 PM, Roel Kluin wrote:
    I found this by code analysis, searching for while
    loops that test a local variable, but do not modify
    the variable.

    Reported-by: Roel Kluin
    Signed-off-by: Boaz Harrosh
    Signed-off-by: James Bottomley

    Boaz Harrosh
     
  • Define an osd_dev_info structure that Uniquely identifies an OSD
    device lun on the network. The identification is built from unique
    target attributes and is the same for all network/SAN machines.

    osduld_info_lookup() - NEW
    New API that will lookup an osd_dev by its osd_dev_info.
    This is used by pNFS-objects for cross network global device
    identification. And by exofs multy-device support, the device
    info is specified in the on-disk exofs device table.

    osduld_device_info() - NEW
    Given an osd_dev handle returns its associated osd_dev_info.
    The ULD fetches this information at startup and hangs it on
    each OSD device. (This is a fast operation that can be called
    at any condition)

    osduld_device_same() - NEW
    With a given osd_dev at one hand and an osd_dev_info
    at another, we would like to know if they are the same
    device.
    Two osd_dev handles can be checked by:
    osduld_device_same(od1, osduld_device_info(od2));

    osd_auto_detect_ver() - REVISED
    Now returns an osd_dev_info structure. Is only called once
    by ULD as before. See added comments for how to use.

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

    Boaz Harrosh
     
  • The true logic of this patch will be clear in the next patch where we
    use the class_find_device() API. When doing so the use of an internal
    kref leaves us a narrow window where a find is started while the actual
    object can go away. Using the device's kobj reference solves this
    problem because now the same kref is used for both operations. (Remove
    and find)

    Core changes
    * Embed a struct device in uld_ structure and use device_register
    instead of devie_create. Set __remove to be the device release
    function.
    * __uld_get/put is just get_/put_device. Now every thing is accounted
    for on the device object. Internal kref is removed.
    * At __remove() we can safely de-allocate the uld_ structure. (The
    function has moved to avoid forward declaration)

    Some cleanups
    * Use class register/unregister is cleaner for this driver now.
    * cdev ref-counting games are no longer necessary

    I have incremented the device version string in case of new bugs.

    Note: Previous bugfix of taking the reference around fput() still
    applies.

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

    Boaz Harrosh
     
  • If scsi has released the device (logout), and exofs has last
    reference on the osduld_device it will be freed by
    osd_uld_release() within the call to fput(). But this will
    oops in cdev_release() which is called after the fops->release.
    (cdev is embedded within osduld_device). __uld_get/put pair
    makes sure we have a cdev for the duration of fput()

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

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