SCSI fixes for 2.6.28-rc8
James Bottomley
maintainerPATCH 1/1 SCSI fixes for 2.6.28-rc8
This is basically a set of qla2xxx fixes (vport handling, and other assorted small things) and a fix for an enterprise array spin up. It also includes a much larger set of updates to fcoe/libfc. The reason for the latter is that fcoe/libfc was new in the 2.6.29 merge window, so there's never been an actual kernel containing it released and it qualifies under our merge window exemption for new drivers.
The patch is available here:
master.kernel.org:/pub/scm/linux/kernel/git/jejb/scsi-rc-fixes-2.6.git
The short changelog is:
Abhijeet Joglekar (2):
libfc: when rport goes away (re-plogi), clean up exchanges to/from rport
libfc: Pass lport in exch_mgr_reset
Andrew Vasquez (4):
qla2xxx: Update version number to 8.03.00-k4.
qla2xxx: Correct overwrite of pre-assigned init-control-block structure si
qla2xxx: Correct truncation in return-code status checking.
qla2xxx: Correct address range checking for option-rom updates.
Anirban Chakraborty (1):
qla2xxx: Correct vport delete bug.
Chris Leech (2):
fcoe: fix handling of pending queue, prevent out of order frames (v3)
libfc: rport retry on LS_RJT from certain ELS
Lalit Chandivade (1):
qla2xxx: Use correct value for max vport in LOOP topology.
Matthew Wilcox (1):
sd: Don't try to spin up drives that are connected to an inactive port
Robert Love (11):
fcoe: Change fcoe receive thread nice value from 19 (lowest priority) to -
fcoe: Correct fcoe_transports initialization vs. registration
fcoe: Use setup_timer() and mod_timer()
libfc, fcoe: Remove unnecessary cast by removing inline wrapper libfc, fcoe: Cleanup function formatting and minor typos libfc, fcoe: Fix kerneldoc comments
libfc: Cleanup libfc_function_template comments
libfc: check for err when recv and state is incorrect
libfc: rename rp to rdata in fc_disc_new_target()
libfc: correct RPORT_TO_PRIV usage
libfc: Don't violate transport template for rogue port creation
Roel Kluin (1):
fcoe: fix kfree(skb)
Steve Ma (1):
libfc: exch mgr is freed while lport still retrying sequences
Vasu Dev (5):
fcoe: Out of order tx frames was causing several check condition SCSI stat
libfc: fixed a read IO data integrity issue when a IO data frame lost libfc, fcoe: fixed locking issues with lport->lp_mutex around lport->link_
libfc: fixed a soft lockup issue in fc_exch_recv_abts
libfc: handle RRQ exch timeout
Yi Zou (2):
fcoe: ETH_P_8021Q is already in if_ether and fcoe is not using it anyway
libfc: do not change the fh_rx_id of a recevied frame
The diffstat excluding libfc/fcoe is:
drivers/scsi/qla2xxx/qla_attr.c | 9 +-------- drivers/scsi/qla2xxx/qla_init.c | 19 +++++++++++++------ drivers/scsi/qla2xxx/qla_mbx.c | 3 ++- drivers/scsi/qla2xxx/qla_mid.c | 10 ++++++---- drivers/scsi/qla2xxx/qla_os.c | 6 +----- drivers/scsi/qla2xxx/qla_version.h | 2 +- drivers/scsi/sd.c | 26 +++++++++++--------------- 7 files changed, 35 insertions(+), 40 deletions(-)
And the full diffstat is:
drivers/scsi/fcoe/fc_transport_fcoe.c | 91 ++++----- drivers/scsi/fcoe/fcoe_sw.c | 56 +++-- drivers/scsi/fcoe/libfcoe.c | 318 ++++++++++++++-------------------- drivers/scsi/libfc/fc_disc.c | 63 +++--- drivers/scsi/libfc/fc_exch.c | 32 --- drivers/scsi/libfc/fc_fcp.c | 56 ++--- drivers/scsi/libfc/fc_lport.c | 173 ++++++++---------- drivers/scsi/libfc/fc_rport.c | 197 +++++++++++---------- drivers/scsi/qla2xxx/qla_attr.c | 9 drivers/scsi/qla2xxx/qla_init.c | 19 +- drivers/scsi/qla2xxx/qla_mbx.c | 3 drivers/scsi/qla2xxx/qla_mid.c | 10 - drivers/scsi/qla2xxx/qla_os.c | 6 drivers/scsi/qla2xxx/qla_version.h | 2 drivers/scsi/sd.c | 26 +- include/scsi/fc/fc_fcoe.h | 4 include/scsi/fc/fc_fs.h | 5 include/scsi/libfc.h | 138 ++++++++------ include/scsi/libfcoe.h | 9 19 files changed, 586 insertions(+), 631 deletions(-)
The patch is attached below.
James
---
drivers/scsi/fcoe/fc_transport_fcoe.c +44 -47
@@ -33,19 +33,19 @@ static LIST_HEAD(fcoe_transports);static DEFINE_MUTEX (fcoe_transports_lock);/** -* fcoe_transport_default - returns ptr to the default transport fcoe_sw -**/ +* fcoe_transport_default() - Returns ptr to the default transport fcoe_sw +*/ struct fcoe_transport *fcoe_transport_default (void ) {return &fcoe_sw_transport; }/** -* fcoe_transport_to_pcidev - get the pci dev from a netdev +* fcoe_transport_to_pcidev() - get the pci dev from a netdev * @netdev: the netdev that pci dev will be retrived from * * Returns: NULL or the corrsponding pci_dev -**/ +*/ struct pci_dev *fcoe_transport_pcidev (const struct net_device *netdev) {if (!netdev->dev.parent)
@@ -54,18 +54,17 @@ struct pci_dev *fcoe_transport_pcidev(const struct net_device *netdev) }/** -* fcoe_transport_device_lookup - find out netdev is managed by the -* transport -* assign a transport to a device +* fcoe_transport_device_lookup() - Lookup a transport * @netdev: the netdev the transport to be attached to * * This will look for existing offload driver, if not found, it falls back to * the default sw hba (fcoe_sw) as its fcoe transport. * * Returns: 0 for success -**/ -static struct fcoe_transport_internal *fcoe_transport_device_lookup ( -struct fcoe_transport *t,struct net_device *netdev) +*/ +static struct fcoe_transport_internal * +fcoe_transport_device_lookup (struct fcoe_transport *t, +struct net_device *netdev) {struct fcoe_transport_internal *ti;
@@ -81,14 +80,14 @@ static struct fcoe_transport_internal *fcoe_transport_device_lookup(return NULL ; }/** -* fcoe_transport_device_add - assign a transport to a device +* fcoe_transport_device_add() - Assign a transport to a device * @netdev: the netdev the transport to be attached to * * This will look for existing offload driver, if not found, it falls back to * the default sw hba (fcoe_sw) as its fcoe transport. * * Returns: 0 for success -**/ +*/ static int fcoe_transport_device_add (struct fcoe_transport *t,struct net_device *netdev) {
@@ -123,14 +122,14 @@ static int fcoe_transport_device_add(struct fcoe_transport *t, }/** -* fcoe_transport_device_remove - remove a device from its transport +* fcoe_transport_device_remove() - Remove a device from its transport * @netdev: the netdev the transport to be attached to * -* this removes the device from the transport so the given transport will +* This removes the device from the transport so the given transport will * not manage this device any more * * Returns: 0 for success -**/ +*/ static int fcoe_transport_device_remove (struct fcoe_transport *t,struct net_device *netdev) {
@@ -155,13 +154,13 @@ static int fcoe_transport_device_remove(struct fcoe_transport *t, }/** -* fcoe_transport_device_remove_all - remove all from transport devlist +* fcoe_transport_device_remove_all() - Remove all from transport devlist * -* this removes the device from the transport so the given transport will +* This removes the device from the transport so the given transport will * not manage this device any more * * Returns: 0 for success -**/ +*/ static void fcoe_transport_device_remove_all (struct fcoe_transport *t) {struct fcoe_transport_internal *ti, *tmp;
@@ -175,18 +174,18 @@ static void fcoe_transport_device_remove_all(struct fcoe_transport *t) }/** -* fcoe_transport_match - use the bus device match function to match the hw -* @t: the fcoe transport -* @netdev: +* fcoe_transport_match() - Use the bus device match function to match the hw +* @t: The fcoe transport to check +* @netdev: The netdev to match against * -* This function is used to check if the givne transport wants to manage the +* This function is used to check if the given transport wants to manage the * input netdev. if the transports implements the match function, it will be * called, o.w. we just compare the pci vendor and device id. * * Returns: true for match up -**/ +*/ static bool fcoe_transport_match (struct fcoe_transport *t, -struct net_device *netdev) +struct net_device *netdev) {/* match transport by vendor and device id */ struct pci_dev *pci;
@@ -210,17 +209,17 @@ static bool fcoe_transport_match(struct fcoe_transport *t, }/** -* fcoe_transport_lookup - check if the transport is already registered +* fcoe_transport_lookup() - Check if the transport is already registered * @t: the transport to be looked up * * This compares the parent device (pci) vendor and device id * * Returns: NULL if not found * -* TODO - return default sw transport if no other transport is found -**/ -static struct fcoe_transport *fcoe_transport_lookup ( -struct net_device *netdev) +* TODO: return default sw transport if no other transport is found +*/ +static struct fcoe_transport * +fcoe_transport_lookup (struct net_device *netdev) {struct fcoe_transport *t;
@@ -239,11 +238,11 @@ static struct fcoe_transport *fcoe_transport_lookup( }/** -* fcoe_transport_register - adds a fcoe transport to the fcoe transports list +* fcoe_transport_register() - Adds a fcoe transport to the fcoe transports list * @t: ptr to the fcoe transport to be added * * Returns: 0 for success -**/ +*/ int fcoe_transport_register (struct fcoe_transport *t) {struct fcoe_transport *tt;
@@ -259,9 +258,6 @@ int fcoe_transport_register(struct fcoe_transport *t)list_add_tail (&t->list, &fcoe_transports);mutex_unlock (&fcoe_transports_lock); -mutex_init (&t->devlock); -INIT_LIST_HEAD (&t->devlist); -printk (KERN_DEBUG "fcoe_transport_register:%s\n" , t->name);return 0 ;
@@ -269,11 +265,11 @@ int fcoe_transport_register(struct fcoe_transport *t)EXPORT_SYMBOL_GPL (fcoe_transport_register);/** -* fcoe_transport_unregister - remove the tranport fro the fcoe transports list +* fcoe_transport_unregister() - Remove the tranport fro the fcoe transports list * @t: ptr to the fcoe transport to be removed * * Returns: 0 for success -**/ +*/ int fcoe_transport_unregister (struct fcoe_transport *t) {struct fcoe_transport *tt, *tmp;
@@ -294,8 +290,8 @@ int fcoe_transport_unregister(struct fcoe_transport *t) }EXPORT_SYMBOL_GPL (fcoe_transport_unregister); -/* -* fcoe_load_transport_driver - load an offload driver by alias name +/** +* fcoe_load_transport_driver() - Load an offload driver by alias name * @netdev: the target net device * * Requests for an offload driver module as the fcoe transport, if fails, it
@@ -307,7 +303,7 @@ EXPORT_SYMBOL_GPL(fcoe_transport_unregister);* 3. pure hw fcoe hba may not have netdev * * Returns: 0 for success -**/ +*/ int fcoe_load_transport_driver (struct net_device *netdev) {struct pci_dev *pci;
@@ -335,14 +331,14 @@ int fcoe_load_transport_driver(struct net_device *netdev)EXPORT_SYMBOL_GPL (fcoe_load_transport_driver);/** -* fcoe_transport_attach - load transport to fcoe +* fcoe_transport_attach() - Load transport to fcoe * @netdev: the netdev the transport to be attached to * * This will look for existing offload driver, if not found, it falls back to * the default sw hba (fcoe_sw) as its fcoe transport. * * Returns: 0 for success -**/ +*/ int fcoe_transport_attach (struct net_device *netdev) {struct fcoe_transport *t;
@@ -373,11 +369,11 @@ int fcoe_transport_attach(struct net_device *netdev)EXPORT_SYMBOL_GPL (fcoe_transport_attach);/** -* fcoe_transport_release - unload transport from fcoe +* fcoe_transport_release() - Unload transport from fcoe * @netdev: the net device on which fcoe is to be released * * Returns: 0 for success -**/ +*/ int fcoe_transport_release (struct net_device *netdev) {struct fcoe_transport *t;
@@ -410,12 +406,12 @@ int fcoe_transport_release(struct net_device *netdev)EXPORT_SYMBOL_GPL (fcoe_transport_release);/** -* fcoe_transport_init - initializes fcoe transport layer +* fcoe_transport_init() - Initializes fcoe transport layer * * This prepares for the fcoe transport layer * * Returns: none -**/ +*/ int __init fcoe_transport_init (void ) {INIT_LIST_HEAD (&fcoe_transports);
@@ -424,12 +420,13 @@ int __init fcoe_transport_init(void) }/** -* fcoe_transport_exit - cleans up the fcoe transport layer +* fcoe_transport_exit() - Cleans up the fcoe transport layer +* * This cleans up the fcoe transport layer. removing any transport on the list, * note that the transport destroy func is not called here. * * Returns: none -**/ +*/ int __exit fcoe_transport_exit(void) {struct fcoe_transport *t, *tmp;
drivers/scsi/fcoe/fcoe_sw.c +29 -27
159 lines not on this page · raw message
drivers/scsi/fcoe/libfcoe.c +136 -182
751 lines not on this page · raw message
drivers/scsi/libfc/fc_disc.c +32 -31
223 lines not on this page · raw message
drivers/scsi/libfc/fc_exch.c +9 -23
@@ -32,8 +32,6 @@#include <scsi/libfc.h> #include <scsi/fc_encode.h> -#define FC_DEF_R_A_TOV (10 * 1000)/* resource allocation timeout */ -/* * fc_exch_debug can be set in debugger or at compile time to get more logs. */
@@ -627,7 +625,6 @@ static struct fc_exch *fc_exch_resp(struct fc_exch_mgr *mp, struct fc_frame *fp) {struct fc_exch *ep;struct fc_frame_header *fh; -u16 rxid; ep = mp->lp->tt.exch_get (mp->lp, fp);if (ep) {
@@ -654,18 +651,6 @@ static struct fc_exch *fc_exch_resp(struct fc_exch_mgr *mp, struct fc_frame *fp)if ((ntoh24 (fh->fh_f_ctl) &FC_FC_SEQ_INIT ) ==0 ) ep->esb_stat &= ~ESB_ST_SEQ_INIT ; -/* -* Set the responder ID in the frame header. -* The old one should've been 0xffff. -* If it isn't, don't assign one. -* Incoming basic link service frames may specify -* a referenced RX_ID. -*/ -if (fh->fh_type !=FC_TYPE_BLS ) { - rxid =ntohs (fh->fh_rx_id); -WARN_ON (rxid !=FC_XID_UNKNOWN ); - fh->fh_rx_id =htons (ep->rxid); - }fc_exch_hold (ep);/* hold for caller */ spin_unlock_bh (&ep->ex_lock);/* lock from exch_get */ }
@@ -677,8 +662,8 @@ static struct fc_exch *fc_exch_resp(struct fc_exch_mgr *mp, struct fc_frame *fp)* If fc_pf_rjt_reason is FC_RJT_NONE then this function will have a hold * on the ep that should be released by the caller. */ -static enum fc_pf_rjt_reason -fc_seq_lookup_recip (struct fc_exch_mgr *mp,struct fc_frame *fp) +static enum fc_pf_rjt_reason fc_seq_lookup_recip (struct fc_exch_mgr *mp, +struct fc_frame *fp) {struct fc_frame_header *fh =fc_frame_header_get (fp);struct fc_exch *ep =NULL ;
@@ -996,9 +981,9 @@ static void fc_seq_send_ack(struct fc_seq *sp, const struct fc_frame *rx_fp)* Send BLS Reject. * This is for rejecting BA_ABTS only. */ -static void -fc_exch_send_ba_rjt (struct fc_frame *rx_fp,enum fc_ba_rjt_reason reason, -enum fc_ba_rjt_explan explan) +static void fc_exch_send_ba_rjt (struct fc_frame *rx_fp, +enum fc_ba_rjt_reason reason, +enum fc_ba_rjt_explan explan) {struct fc_frame *fp;struct fc_frame_header *rx_fh;
@@ -1096,7 +1081,7 @@ static void fc_exch_recv_abts(struct fc_exch *ep, struct fc_frame *rx_fp) ap->ba_high_seq_cnt = fh->fh_seq_cnt; ap->ba_low_seq_cnt =htons (sp->cnt); } - sp =fc_seq_start_next (sp); + sp =fc_seq_start_next_locked (sp);spin_unlock_bh (&ep->ex_lock);fc_seq_send_last (sp, fp,FC_RCTL_BA_ACC ,FC_TYPE_BLS );fc_frame_free (rx_fp);
@@ -1480,10 +1465,11 @@ static void fc_exch_reset(struct fc_exch *ep)* If sid is non-zero, reset only exchanges we source from that FID. * If did is non-zero, reset only exchanges destined to that FID. */ -void fc_exch_mgr_reset (struct fc_exch_mgr *mp,u32 sid,u32 did) +void fc_exch_mgr_reset (struct fc_lport *lp,u32 sid,u32 did) {struct fc_exch *ep;struct fc_exch *next; +struct fc_exch_mgr *mp = lp->emp;spin_lock_bh (&mp->em_lock); restart:
@@ -1607,7 +1593,7 @@ static void fc_exch_rrq_resp(struct fc_seq *sp, struct fc_frame *fp, void *arg)if (IS_ERR (fp)) {int err =PTR_ERR (fp); -if (err == -FC_EX_CLOSED ) +if (err == -FC_EX_CLOSED || err == -FC_EX_TIMEOUT ) goto cleanup;FC_DBG ("Cannot process RRQ, because of frame error %d\n" , err);return ;
drivers/scsi/libfc/fc_fcp.c +28 -28
175 lines not on this page · raw message
drivers/scsi/libfc/fc_lport.c +75 -98
498 lines not on this page · raw message
drivers/scsi/libfc/fc_rport.c +111 -86
462 lines not on this page · raw message
drivers/scsi/qla2xxx/qla_attr.c +1 -8
@@ -244,12 +244,6 @@ qla2x00_sysfs_write_optrom_ctl(struct kobject *kobj,if (ha->optrom_state !=QLA_SWAITING )break ; -if (start &0xfff ) { -qla_printk (KERN_WARNING , ha, -"Invalid start region 0x%x/0x%x.\n" , start, size); -return -EINVAL ; - } - ha->optrom_region_start = start; ha->optrom_region_size = start + size > ha->optrom_size ? ha->optrom_size - start : size;
@@ -303,8 +297,7 @@ qla2x00_sysfs_write_optrom_ctl(struct kobject *kobj,else if (start == (ha->flt_region_boot *4 ) || start == (ha->flt_region_fw *4 )) valid =1 ; -else if ((IS_QLA25XX (ha) ||IS_QLA81XX (ha)) && - start == (ha->flt_region_vpd_nvram *4 )) +else if (IS_QLA25XX (ha) ||IS_QLA81XX (ha)) valid =1 ;if (!valid) { qla_printk(KERN_WARNING, ha,
drivers/scsi/qla2xxx/qla_init.c +13 -6
@@ -1308,8 +1308,12 @@ qla2x00_init_rings(scsi_qla_host_t *vha)DEBUG (printk ("scsi(%ld): Issue init firmware.\n" , vha->host_no)); -if (ha->flags.npiv_supported) +if (ha->flags.npiv_supported) { +if (ha->operating_mode ==LOOP ) + ha->max_npiv_vports =MIN_MULTI_ID_FABRIC -1 ; mid_init_cb->count =cpu_to_le16 (ha->max_npiv_vports); + } + mid_init_cb->options =__constant_cpu_to_le16 (BIT_1 );
@@ -2610,6 +2614,7 @@ qla2x00_find_all_fabric_devs(scsi_qla_host_t *vha,port_id_t wrap, nxt_d_id;struct qla_hw_data *ha = vha->hw;struct scsi_qla_host *vp, *base_vha =pci_get_drvdata (ha->pdev); +struct scsi_qla_host *tvp; rval =QLA_SUCCESS ;
@@ -2709,7 +2714,7 @@ qla2x00_find_all_fabric_devs(scsi_qla_host_t *vha,/* Bypass virtual ports of the same host. */ found =0 ;if (ha->num_vhosts) { -list_for_each_entry (vp, &ha->vp_list, list) { +list_for_each_entry_safe (vp, tvp, &ha->vp_list, list) {if (new_fcport->d_id.b24 == vp->d_id.b24) { found =1 ;break ;
@@ -2832,6 +2837,7 @@ qla2x00_find_new_loop_id(scsi_qla_host_t *vha, fc_port_t *dev)uint16_t first_loop_id;struct qla_hw_data *ha = vha->hw;struct scsi_qla_host *vp; +struct scsi_qla_host *tvp; rval =QLA_SUCCESS ;
@@ -2856,7 +2862,7 @@ qla2x00_find_new_loop_id(scsi_qla_host_t *vha, fc_port_t *dev)/* Check for loop ID being already in use. */ found =0 ; fcport =NULL ; -list_for_each_entry (vp, &ha->vp_list, list) { +list_for_each_entry_safe (vp, tvp, &ha->vp_list, list) {list_for_each_entry (fcport, &vp->vp_fcports, list) {if (fcport->loop_id == dev->loop_id && fcport != dev) {
@@ -3291,6 +3297,7 @@ qla2x00_abort_isp(scsi_qla_host_t *vha)uint8_t status =0 ;struct qla_hw_data *ha = vha->hw;struct scsi_qla_host *vp; +struct scsi_qla_host *tvp;struct req_que *req = ha->req_q_map[0 ];if (vha->flags.online) {
@@ -3306,7 +3313,7 @@ qla2x00_abort_isp(scsi_qla_host_t *vha)if (atomic_read (&vha->loop_state) !=LOOP_DOWN ) {atomic_set (&vha->loop_state,LOOP_DOWN );qla2x00_mark_all_devices_lost (vha,0 ); -list_for_each_entry (vp, &ha->vp_list, list) +list_for_each_entry_safe (vp, tvp, &ha->vp_list, list)qla2x00_mark_all_devices_lost (vp,0 ); }else {if (!atomic_read (&vha->loop_down_timer))
@@ -3403,7 +3410,7 @@ qla2x00_abort_isp(scsi_qla_host_t *vha)DEBUG (printk (KERN_INFO "qla2x00_abort_isp(%ld): succeeded.\n" , vha->host_no)); -list_for_each_entry (vp, &ha->vp_list, list) { +list_for_each_entry_safe (vp, tvp, &ha->vp_list, list) {if (vp->vp_idx)qla2x00_vp_abort_isp (vp); }
@@ -3428,7 +3435,7 @@ qla2x00_abort_isp(scsi_qla_host_t *vha)static int qla2x00_restart_isp (scsi_qla_host_t *vha) { -uint8_t status =0 ; +int status =0 ;uint32_t wait_time;struct qla_hw_data *ha = vha->hw;struct req_que *req = ha->req_q_map[0 ];
drivers/scsi/qla2xxx/qla_mbx.c +2 -1
@@ -2685,6 +2685,7 @@ qla24xx_report_id_acquisition(scsi_qla_host_t *vha,uint16_t stat =le16_to_cpu (rptid_entry->vp_idx);struct qla_hw_data *ha = vha->hw;scsi_qla_host_t *vp; +scsi_qla_host_t *tvp;if (rptid_entry->entry_status !=0 )return ;
@@ -2710,7 +2711,7 @@ qla24xx_report_id_acquisition(scsi_qla_host_t *vha,if (MSB (stat) ==1 )return ; -list_for_each_entry (vp, &ha->vp_list, list) +list_for_each_entry_safe (vp, tvp, &ha->vp_list, list)if (vp_idx == vp->vp_idx)break ;if (!vp)
drivers/scsi/qla2xxx/qla_mid.c +6 -4
@@ -69,9 +69,10 @@ static scsi_qla_host_t * qla24xx_find_vhost_by_name(struct qla_hw_data *ha, uint8_t *port_name) { scsi_qla_host_t *vha; +struct scsi_qla_host *tvha;/* Locate matching device in database. */ -list_for_each_entry (vha, &ha->vp_list, list) { +list_for_each_entry_safe (vha, tvha, &ha->vp_list, list) {if (!memcmp (port_name, vha->port_name,WWN_SIZE ))return vha; }
@@ -194,11 +195,11 @@ qla24xx_configure_vp(scsi_qla_host_t *vha)void qla2x00_alert_all_vps (struct rsp_que *rsp,uint16_t *mb) { -scsi_qla_host_t *vha; +scsi_qla_host_t *vha, *tvha;struct qla_hw_data *ha = rsp->hw;int i =0 ; -list_for_each_entry (vha, &ha->vp_list, list) { +list_for_each_entry_safe (vha, tvha, &ha->vp_list, list) {if (vha->vp_idx) {switch (mb[0 ]) {case MBA_LIP_OCCURRED :
@@ -300,6 +301,7 @@ qla2x00_do_dpc_all_vps(scsi_qla_host_t *vha)int ret;struct qla_hw_data *ha = vha->hw;scsi_qla_host_t *vp; +struct scsi_qla_host *tvp;if (vha->vp_idx)return ;
@@ -308,7 +310,7 @@ qla2x00_do_dpc_all_vps(scsi_qla_host_t *vha)clear_bit (VP_DPC_NEEDED , &vha->dpc_flags); -list_for_each_entry (vp, &ha->vp_list, list) { +list_for_each_entry_safe (vp, tvp, &ha->vp_list, list) {if (vp->vp_idx) ret =qla2x00_do_dpc_vp (vp); }
drivers/scsi/qla2xxx/qla_os.c +1 -5
@@ -2222,10 +2222,6 @@ qla2x00_mem_alloc(struct qla_hw_data *ha, uint16_t req_len, uint16_t rsp_len, {char name[16 ]; - ha->init_cb_size =sizeof (init_cb_t); -if (IS_QLA2XXX_MIDTYPE (ha)) - ha->init_cb_size =sizeof (struct mid_init_cb_24xx ); - ha->init_cb =dma_alloc_coherent (&ha->pdev->dev, ha->init_cb_size, &ha->init_cb_dma,GFP_KERNEL );if (!ha->init_cb)
@@ -2568,7 +2564,7 @@ qla2x00_do_work(struct scsi_qla_host *vha)void qla2x00_relogin (struct scsi_qla_host *vha) {fc_port_t *fcport; -uint8_t status; +int status;uint16_t next_loopid =0 ;struct qla_hw_data *ha = vha->hw;
drivers/scsi/qla2xxx/qla_version.h +1 -1
@@ -7,7 +7,7 @@/* * Driver version */ -#define QLA2XXX_VERSION "8.03.00-k3" +#define QLA2XXX_VERSION "8.03.00-k4"#define QLA_DRIVER_MAJOR_VER 8#define QLA_DRIVER_MINOR_VER 3
drivers/scsi/sd.c +11 -15
@@ -1167,23 +1167,19 @@ sd_spinup_disk(struct scsi_disk *sdkp)/* * The device does not want the automatic start to be issued. */ -if (sdkp->device->no_start_on_add) { +if (sdkp->device->no_start_on_add)break ; - } - -/* -* If manual intervention is required, or this is an -* absent USB storage device, a spinup is meaningless. -*/ -if (sense_valid && - sshdr.sense_key ==NOT_READY && - sshdr.asc ==4 && sshdr.ascq ==3 ) { -break ;/* manual intervention required */ -/* -* Issue command to spin up drive when not ready -*/ - }else if (sense_valid && sshdr.sense_key ==NOT_READY ) { +if (sense_valid && sshdr.sense_key ==NOT_READY ) { +if (sshdr.asc ==4 && sshdr.ascq ==3 ) +break ;/* manual intervention required */ +if (sshdr.asc ==4 && sshdr.ascq ==0xb ) +break ;/* standby */ +if (sshdr.asc ==4 && sshdr.ascq ==0xc ) +break ;/* unavailable */ +/* +* Issue command to spin up drive when not ready +*/ if (!spintime) {sd_printk (KERN_NOTICE , sdkp,"Spinning up disk..." ); cmd[0 ] =START_STOP ;
include/scsi/fc/fc_fcoe.h +0 -4
@@ -31,10 +31,6 @@#define ETH_P_FCOE 0x8906/* FCOE ether type */ #endif -#ifndef ETH_P_8021Q -#define ETH_P_8021Q 0x8100 -#endif -/* * FC_FCOE_OUI hasn't been standardized yet. XXX TBD. */
include/scsi/fc/fc_fs.h +5 -0
@@ -337,4 +337,9 @@ enum fc_pf_rjt_reason { FC_RJT_VENDOR = 0xff, /* vendor specific reject */ }; +/* default timeout values */ + +#define FC_DEF_E_D_TOV 2000UL +#define FC_DEF_R_A_TOV 10000UL +#endif /* _FC_FS_H_ */
include/scsi/libfc.h +80 -58
169 lines not on this page · raw message
The rest of this diff is not shown. View the raw message.
Part of the diff is not shown here. View the raw message.