Home Home > GIT Browse > openSUSE-15.0
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHannes Reinecke <hare@suse.de>2010-10-29 16:39:49 +0200
committerHannes Reinecke <hare@suse.de>2010-10-29 16:39:49 +0200
commitb666d35bc0d2b577a93bee153c69f76d52cc760a (patch)
treee8f877f7e6149023b87d3bfaaca3ba1ceffff9fc
parentf403b3572720489a44dd2585441c3b9fd6dbbc96 (diff)
- patches.fixes/fcoe-fix-offload-feature-flag-change: fcoe:rpm-2.6.32.24-0.2
fix offload feature flag change from netdev (bnc#650116). - patches.fixes/fcoe-sync-with-upstream-patches: Fix kABI. - patches.fixes/libfc-call-fc_remote_port_chkready-under-the-host-lock: libfc: call fc_remote_port_chkready under the host lock (bnc#650116). - patches.fixes/libfc-do-not-return-error-from-fc_fcp_send_abort: libfc: do not return error from fc_fcp_send_abort with null seq_ptr (bnc#650113). - patches.fixes/libfc-fix-NULL-pointer-dereference-bug: libfc: fix NULL pointer dereference bug in fc_fcp_pkt_release (bnc#650113). - patches.fixes/libfc-fix-setting-of-rport-dev-loss: libfc: fix setting of rport dev loss (bnc#650116).
-rw-r--r--kernel-source.changes17
-rw-r--r--patches.fixes/fcoe-fix-offload-feature-flag-change125
-rw-r--r--patches.fixes/fcoe-sync-with-upstream-patches110
-rw-r--r--patches.fixes/libfc-call-fc_remote_port_chkready-under-the-host-lock41
-rw-r--r--patches.fixes/libfc-do-not-return-error-from-fc_fcp_send_abort34
-rw-r--r--patches.fixes/libfc-fix-NULL-pointer-dereference-bug102
-rw-r--r--patches.fixes/libfc-fix-setting-of-rport-dev-loss43
-rw-r--r--series.conf5
8 files changed, 380 insertions, 97 deletions
diff --git a/kernel-source.changes b/kernel-source.changes
index c65326901d..565e689bcb 100644
--- a/kernel-source.changes
+++ b/kernel-source.changes
@@ -1,4 +1,21 @@
-------------------------------------------------------------------
+Fri Oct 29 16:39:21 CEST 2010 - hare@suse.de
+
+- patches.fixes/fcoe-fix-offload-feature-flag-change: fcoe:
+ fix offload feature flag change from netdev (bnc#650116).
+- patches.fixes/fcoe-sync-with-upstream-patches: Fix kABI.
+- patches.fixes/libfc-call-fc_remote_port_chkready-under-the-host-lock:
+ libfc: call fc_remote_port_chkready under the host lock
+ (bnc#650116).
+- patches.fixes/libfc-do-not-return-error-from-fc_fcp_send_abort:
+ libfc: do not return error from fc_fcp_send_abort with null
+ seq_ptr (bnc#650113).
+- patches.fixes/libfc-fix-NULL-pointer-dereference-bug: libfc: fix
+ NULL pointer dereference bug in fc_fcp_pkt_release (bnc#650113).
+- patches.fixes/libfc-fix-setting-of-rport-dev-loss: libfc:
+ fix setting of rport dev loss (bnc#650116).
+
+-------------------------------------------------------------------
Fri Oct 29 13:49:40 CEST 2010 - jslaby@suse.de
- patches.fixes/net-Limit-socket-I-O-iovec-total-length.patch:
diff --git a/patches.fixes/fcoe-fix-offload-feature-flag-change b/patches.fixes/fcoe-fix-offload-feature-flag-change
new file mode 100644
index 0000000000..6d537cfd7c
--- /dev/null
+++ b/patches.fixes/fcoe-fix-offload-feature-flag-change
@@ -0,0 +1,125 @@
+From: Yi Zou <yi.zou@intel.com>
+Date: Tue, 20 Jul 2010 15:21:17 -0700
+Subject: fcoe: fix offload feature flag change from netdev
+Patch-Mainline: 2.6.35
+References: bnc#650116
+
+Currently, when FCoE netdev feature flags are toggled by the LLD, lport's
+corresponding flags are not updated. This causes the fc_fcp to still try to
+offload the I/O. This patch adds support of NETDEV_FEAT_CHANGE event in fcoe
+netdev device notification callback so we can update the lport offload flags
+appropriately.
+
+Signed-off-by: Yi Zou <yi.zou@intel.com>
+Signed-off-by: Robert Love <robert.w.love@intel.com>
+Signed-off-by: James Bottomley <James.Bottomley@suse.de>
+Acked-by: Hannes Reinecke <hare@suse.de>
+---
+ drivers/scsi/fcoe/fcoe.c | 68 +++++++++++++++++++++++++++++++++-------------
+ 1 files changed, 49 insertions(+), 19 deletions(-)
+
+diff --git a/drivers/scsi/fcoe/fcoe.c b/drivers/scsi/fcoe/fcoe.c
+index ec6115c..23c1520 100644
+--- a/drivers/scsi/fcoe/fcoe.c
++++ b/drivers/scsi/fcoe/fcoe.c
+@@ -573,6 +573,50 @@ static int fcoe_get_wwn(struct net_device *netdev, u64 *wwn, int type)
+ }
+
+ /**
++ * fcoe_netdev_features_change - Updates the lport's offload flags based
++ * on the LLD netdev's FCoE feature flags
++ */
++static void fcoe_netdev_features_change(struct fc_lport *lport,
++ struct net_device *netdev)
++{
++ mutex_lock(&lport->lp_mutex);
++
++ if (netdev->features & NETIF_F_SG)
++ lport->sg_supp = 1;
++ else
++ lport->sg_supp = 0;
++
++ if (netdev->features & NETIF_F_FCOE_CRC) {
++ lport->crc_offload = 1;
++ FCOE_NETDEV_DBG(netdev, "Supports FCCRC offload\n");
++ } else {
++ lport->crc_offload = 0;
++ }
++
++ if (netdev->features & NETIF_F_FSO) {
++ lport->seq_offload = 1;
++ lport->lso_max = netdev->gso_max_size;
++ FCOE_NETDEV_DBG(netdev, "Supports LSO for max len 0x%x\n",
++ lport->lso_max);
++ } else {
++ lport->seq_offload = 0;
++ lport->lso_max = 0;
++ }
++
++ if (netdev->fcoe_ddp_xid) {
++ lport->lro_enabled = 1;
++ lport->lro_xid = netdev->fcoe_ddp_xid;
++ FCOE_NETDEV_DBG(netdev, "Supports LRO for max xid 0x%x\n",
++ lport->lro_xid);
++ } else {
++ lport->lro_enabled = 0;
++ lport->lro_xid = 0;
++ }
++
++ mutex_unlock(&lport->lp_mutex);
++}
++
++/**
+ * fcoe_netdev_config() - Set up net devive for SW FCoE
+ * @lport: The local port that is associated with the net device
+ * @netdev: The associated net device
+@@ -608,25 +652,8 @@ static int fcoe_netdev_config(struct fc_lport *lport, struct net_device *netdev)
+ return -EINVAL;
+
+ /* offload features support */
+- if (netdev->features & NETIF_F_SG)
+- lport->sg_supp = 1;
++ fcoe_netdev_features_change(lport, netdev);
+
+- if (netdev->features & NETIF_F_FCOE_CRC) {
+- lport->crc_offload = 1;
+- FCOE_NETDEV_DBG(netdev, "Supports FCCRC offload\n");
+- }
+- if (netdev->features & NETIF_F_FSO) {
+- lport->seq_offload = 1;
+- lport->lso_max = netdev->gso_max_size;
+- FCOE_NETDEV_DBG(netdev, "Supports LSO for max len 0x%x\n",
+- lport->lso_max);
+- }
+- if (netdev->fcoe_ddp_xid) {
+- lport->lro_enabled = 1;
+- lport->lro_xid = netdev->fcoe_ddp_xid;
+- FCOE_NETDEV_DBG(netdev, "Supports LRO for max xid 0x%x\n",
+- lport->lro_xid);
+- }
+ skb_queue_head_init(&port->fcoe_pending_queue);
+ port->fcoe_pending_queue_active = 0;
+ setup_timer(&port->timer, fcoe_queue_timer, (unsigned long)lport);
+@@ -1847,6 +1874,9 @@ static int fcoe_device_notification(struct notifier_block *notifier,
+ schedule_work(&port->destroy_work);
+ goto out;
+ break;
++ case NETDEV_FEAT_CHANGE:
++ fcoe_netdev_features_change(lport, netdev);
++ break;
+ default:
+ FCOE_NETDEV_DBG(netdev, "Unknown event %ld "
+ "from netdev netlink\n", event);
+@@ -2039,8 +2069,8 @@ static int fcoe_destroy(const char *buffer, struct kernel_param *kp)
+ rc = -ENODEV;
+ goto out_putdev;
+ }
+- list_del(&fcoe->list);
+ fcoe_interface_cleanup(fcoe);
++ list_del(&fcoe->list);
+ /* RTNL mutex is dropped by fcoe_if_destroy */
+ fcoe_if_destroy(fcoe->ctlr.lp);
+
+--
+1.6.0.2
+
diff --git a/patches.fixes/fcoe-sync-with-upstream-patches b/patches.fixes/fcoe-sync-with-upstream-patches
index 7143b967d1..279c359b25 100644
--- a/patches.fixes/fcoe-sync-with-upstream-patches
+++ b/patches.fixes/fcoe-sync-with-upstream-patches
@@ -367,33 +367,6 @@ diff --git a/drivers/scsi/fcoe/libfcoe.c b/drivers/scsi/fcoe/libfcoe.c
index f45d24c..16c2bc7 100644
--- a/drivers/scsi/fcoe/libfcoe.c
+++ b/drivers/scsi/fcoe/libfcoe.c
-@@ -50,7 +50,7 @@ MODULE_LICENSE("GPL v2");
- #define FCOE_CTLR_DEF_FKA FIP_DEF_FKA /* default keep alive (mS) */
-
- static void fcoe_ctlr_timeout(unsigned long);
--static void fcoe_ctlr_link_work(struct work_struct *);
-+static void fcoe_ctlr_timer_work(struct work_struct *);
- static void fcoe_ctlr_recv_work(struct work_struct *);
-
- static u8 fcoe_all_fcfs[ETH_ALEN] = FIP_ALL_FCF_MACS;
-@@ -115,7 +115,7 @@ void fcoe_ctlr_init(struct fcoe_ctlr *fip)
- spin_lock_init(&fip->lock);
- fip->flogi_oxid = FC_XID_UNKNOWN;
- setup_timer(&fip->timer, fcoe_ctlr_timeout, (unsigned long)fip);
-- INIT_WORK(&fip->link_work, fcoe_ctlr_link_work);
-+ INIT_WORK(&fip->timer_work, fcoe_ctlr_timer_work);
- INIT_WORK(&fip->recv_work, fcoe_ctlr_recv_work);
- skb_queue_head_init(&fip->fip_recv_list);
- }
-@@ -163,7 +163,7 @@ void fcoe_ctlr_destroy(struct fcoe_ctlr *fip)
- fcoe_ctlr_reset_fcfs(fip);
- spin_unlock_bh(&fip->lock);
- del_timer_sync(&fip->timer);
-- cancel_work_sync(&fip->link_work);
-+ cancel_work_sync(&fip->timer_work);
- }
- EXPORT_SYMBOL(fcoe_ctlr_destroy);
-
@@ -256,14 +256,10 @@ void fcoe_ctlr_link_up(struct fcoe_ctlr *fip)
{
spin_lock_bh(&fip->lock);
@@ -796,27 +769,8 @@ index f45d24c..16c2bc7 100644
continue;
}
if (!best) {
-@@ -1183,7 +1275,7 @@ static void fcoe_ctlr_timeout(unsigned long arg)
- "Starting FCF discovery.\n",
- fip->lp->host->host_no);
- fip->reset_req = 1;
-- schedule_work(&fip->link_work);
-+ schedule_work(&fip->timer_work);
- }
- }
-
-@@ -1209,44 +1301,35 @@ static void fcoe_ctlr_timeout(unsigned long arg)
- mod_timer(&fip->timer, next_timer);
- }
- if (fip->send_ctlr_ka || fip->send_port_ka)
-- schedule_work(&fip->link_work);
-+ schedule_work(&fip->timer_work);
- spin_unlock_bh(&fip->lock);
- }
-
- /**
-- * fcoe_ctlr_link_work() - Worker thread function for link changes
-+ * fcoe_ctlr_timer_work() - Worker thread function for timer work
+@@ -1214,36 +1306,27 @@ static void fcoe_ctlr_timeout(unsigned long arg)
+ * fcoe_ctlr_link_work() - Worker thread function for link changes
* @work: Handle to a FCoE controller
*
- * See if the link status has changed and if so, report it.
@@ -825,8 +779,7 @@ index f45d24c..16c2bc7 100644
+ * Sends keep-alives and resets which must not
* be called from the timer directly, since they use a mutex.
*/
--static void fcoe_ctlr_link_work(struct work_struct *work)
-+static void fcoe_ctlr_timer_work(struct work_struct *work)
+ static void fcoe_ctlr_link_work(struct work_struct *work)
{
struct fcoe_ctlr *fip;
struct fc_lport *vport;
@@ -835,8 +788,7 @@ index f45d24c..16c2bc7 100644
- int last_link;
int reset;
-- fip = container_of(work, struct fcoe_ctlr, link_work);
-+ fip = container_of(work, struct fcoe_ctlr, timer_work);
+ fip = container_of(work, struct fcoe_ctlr, link_work);
spin_lock_bh(&fip->lock);
- last_link = fip->last_link;
- link = fip->link;
@@ -1293,24 +1245,6 @@ index 48daa76..4632d71 100644
lport->ptp_rdata->ids.port_name = remote_wwpn;
lport->ptp_rdata->ids.node_name = remote_wwnn;
mutex_unlock(&lport->disc.disc_mutex);
-@@ -240,17 +243,6 @@ static void fc_lport_ptp_setup(struct fc_lport *lport,
- }
-
- /**
-- * fc_get_host_port_type() - Return the port type of the given Scsi_Host
-- * @shost: The SCSI host whose port type is to be determined
-- */
--void fc_get_host_port_type(struct Scsi_Host *shost)
--{
-- /* TODO - currently just NPORT */
-- fc_host_port_type(shost) = FC_PORTTYPE_NPORT;
--}
--EXPORT_SYMBOL(fc_get_host_port_type);
--
--/**
- * fc_get_host_port_state() - Return the port state of the given Scsi_Host
- * @shost: The SCSI host whose port state is to be determined
- */
@@ -571,8 +563,8 @@ void __fc_linkup(struct fc_lport *lport)
*/
void fc_linkup(struct fc_lport *lport)
@@ -2128,11 +2062,13 @@ index f903c69..962fa0a 100644
* @wwpn: World Wide Port Name
* @wwnn: World Wide Node Name
* @service_params: Common service parameters
-@@ -826,6 +834,7 @@ struct fc_lport {
+@@ -826,6 +834,9 @@ struct fc_lport {
u8 retry_count;
/* Fabric information */
++#ifndef __GENKSYMS__
+ u32 port_id;
++#endif
u64 wwpn;
u64 wwnn;
unsigned int service_params;
@@ -2152,26 +2088,11 @@ index f903c69..962fa0a 100644
* lport_priv() - Return the private data from a local port
* @lport: The local port whose private data is to be retreived
*/
-@@ -1058,7 +1058,6 @@ void fc_exch_mgr_reset(struct fc_lport *, u32 s_id, u32 d_id);
- * Functions for fc_functions_template
- */
- void fc_get_host_speed(struct Scsi_Host *);
--void fc_get_host_port_type(struct Scsi_Host *);
- void fc_get_host_port_state(struct Scsi_Host *);
- void fc_set_rport_loss_tmo(struct fc_rport *, u32 timeout);
- struct fc_host_statistics *fc_get_host_stats(struct Scsi_Host *);
diff --git a/include/scsi/libfcoe.h b/include/scsi/libfcoe.h
index 7ead324..81aee1c 100644
--- a/include/scsi/libfcoe.h
+++ b/include/scsi/libfcoe.h
-@@ -67,14 +67,12 @@ enum fip_state {
- * @port_ka_time: time of next port keep-alive.
- * @ctlr_ka_time: time of next controller keep-alive.
- * @timer: timer struct used for all delayed events.
-- * @link_work: &work_struct for doing FCF selection.
-+ * @timer_work: &work_struct for doing keep-alives and resets.
- * @recv_work: &work_struct for receiving FIP frames.
- * @fip_recv_list: list of received FIP frames.
+@@ -67,8 +67,6 @@ enum fip_state {
* @user_mfs: configured maximum FC frame size, including FC header.
* @flogi_oxid: exchange ID of most recent fabric login.
* @flogi_count: number of FLOGI attempts in AUTO mode.
@@ -2180,19 +2101,14 @@ index 7ead324..81aee1c 100644
* @map_dest: use the FC_MAP mode for destination MAC addresses.
* @spma: supports SPMA server-provided MACs mode
* @send_ctlr_ka: need to send controller keep alive
-@@ -102,14 +100,12 @@ struct fcoe_ctlr {
- unsigned long port_ka_time;
- unsigned long ctlr_ka_time;
- struct timer_list timer;
-- struct work_struct link_work;
-+ struct work_struct timer_work;
- struct work_struct recv_work;
- struct sk_buff_head fip_recv_list;
+@@ -102,8 +106,10 @@ struct fcoe_ctlr {
u16 user_mfs;
u16 flogi_oxid;
u8 flogi_count;
-- u8 link;
-- u8 last_link;
++#ifdef __GENKSYMS__
+ u8 link;
+ u8 last_link;
++#endif
u8 reset_req;
u8 map_dest;
u8 spma;
diff --git a/patches.fixes/libfc-call-fc_remote_port_chkready-under-the-host-lock b/patches.fixes/libfc-call-fc_remote_port_chkready-under-the-host-lock
new file mode 100644
index 0000000000..9540c35272
--- /dev/null
+++ b/patches.fixes/libfc-call-fc_remote_port_chkready-under-the-host-lock
@@ -0,0 +1,41 @@
+From: Mike Christie <michaelc@cs.wisc.edu>
+Date: Mon, 2 Aug 2010 16:02:24 -0500
+Subject: libfc: call fc_remote_port_chkready under the host lock.
+Patch-Mainline: yes
+References: bnc#650116
+
+The rport port state and flags are set under the host lock,
+so this patch calls fc_remote_port_chkready with the host lock
+held like is also done in the other fc drivers.
+
+Signed-off-by: Mike Christie <michaelc@cs.wisc.edu>
+Signed-off-by: James Bottomley <James.Bottomley@suse.de>
+Acked-by: Hannes Reinecke <hare@suse.de>
+---
+ drivers/scsi/libfc/fc_fcp.c | 4 ++--
+ 1 files changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/drivers/scsi/libfc/fc_fcp.c b/drivers/scsi/libfc/fc_fcp.c
+index 0616c73..e29e25c 100644
+--- a/drivers/scsi/libfc/fc_fcp.c
++++ b/drivers/scsi/libfc/fc_fcp.c
+@@ -1800,14 +1800,14 @@ int fc_queuecommand(struct scsi_cmnd *sc_cmd, void (*done)(struct scsi_cmnd *))
+ struct fcoe_dev_stats *stats;
+
+ lport = shost_priv(sc_cmd->device->host);
+- spin_unlock_irq(lport->host->host_lock);
+
+ rval = fc_remote_port_chkready(rport);
+ if (rval) {
+ sc_cmd->result = rval;
+ done(sc_cmd);
+- goto out;
++ return 0;
+ }
++ spin_unlock_irq(lport->host->host_lock);
+
+ if (!*(struct fc_remote_port **)rport->dd_data) {
+ /*
+--
+1.6.0.2
+
diff --git a/patches.fixes/libfc-do-not-return-error-from-fc_fcp_send_abort b/patches.fixes/libfc-do-not-return-error-from-fc_fcp_send_abort
new file mode 100644
index 0000000000..6df47dbedb
--- /dev/null
+++ b/patches.fixes/libfc-do-not-return-error-from-fc_fcp_send_abort
@@ -0,0 +1,34 @@
+From: Yi Zou <yi.zou@intel.com>
+Date: Fri, 29 Oct 2010 13:37:03 +0200
+Subject: libfc: do not return error from fc_fcp_send_abort with null seq_ptr
+References: bnc#650113
+Patch-Mainline: 2.6.35
+
+If the sequence pointer for the corresponding fsp is NULL, the associated
+exchange is already done, do not return error in fc_fcp_send_abort(), which
+would end up returning error from fc_eh_abort() to scsi-ml, causing
+unnecessary lun reset.
+
+Signed-off-by: Yi Zou <yi.zou@intel.com>
+Signed-off-by: Eric Multanen <eric.w.multanen@intel.com>
+Acked-by: Hannes Reinecke <hare@suse.de>
+---
+ drivers/scsi/libfc/fc_fcp.c | 2 +-
+ 1 files changed, 1 insertions(+), 1 deletions(-)
+
+diff --git a/drivers/scsi/libfc/fc_fcp.c b/drivers/scsi/libfc/fc_fcp.c
+index f8d56cb..0616c73 100644
+--- a/drivers/scsi/libfc/fc_fcp.c
++++ b/drivers/scsi/libfc/fc_fcp.c
+@@ -262,7 +262,7 @@ static void fc_fcp_timer_set(struct fc_fcp_pkt *fsp, unsigned long delay)
+ static int fc_fcp_send_abort(struct fc_fcp_pkt *fsp)
+ {
+ if (!fsp->seq_ptr)
+- return -EINVAL;
++ return 0;
+
+ fsp->state |= FC_SRB_ABORT_PENDING;
+ return fsp->lp->tt.seq_exch_abort(fsp->seq_ptr, 0);
+--
+1.6.0.2
+
diff --git a/patches.fixes/libfc-fix-NULL-pointer-dereference-bug b/patches.fixes/libfc-fix-NULL-pointer-dereference-bug
new file mode 100644
index 0000000000..f7fad5b073
--- /dev/null
+++ b/patches.fixes/libfc-fix-NULL-pointer-dereference-bug
@@ -0,0 +1,102 @@
+From: Yi Zou <yi.zou@intel.com>
+Date: Fri, 29 Oct 2010 13:34:24 +0200
+Subject: libfc: fix NULL pointer dereference bug in fc_fcp_pkt_release
+References: bnc#650113
+Patch-Mainline: 2.6.35
+
+This happens when then tearing down the fcoe interface with active I/O.
+The back trace shows dead000000200200 in RAX, i.e., LIST_POISON2, indicating
+that the fsp is already being dequeued, which is probably why no complaining
+was seen in fc_fcp_destroy() about outstanding fsp not freed, since we dequeue
+it in the end of fc_io_compl() before releasing it. The bug is due to the
+fact that we have already destroyed lport's scsi_pkt_pool while on-going i/o
+is still accessing it through fc_fcp_pkt_release(), like this trace or the
+similar code path from scsi-ml to fc_eh_abort, etc. This is fixed by moving
+the fc_fcp_destroy() after lport is detached from scsi-ml since fc_fcp_destroy
+is supposed to called only once where no lport lock is taken, otherwise the
+fc_fcp_pkt_release() would have to grab the lport lock.
+
+BUG: unable to handle kernel NULL pointer dereference at (null)
+.......
+RIP: 0010:[<0000000000000000>]
+[<(null)>] (null)
+RSP: 0018:ffff8803270f7b88 EFLAGS: 00010282
+RAX: dead000000200200 RBX: ffff880197d2fbc0 RCX: 0000000000005908
+RDX: ffff880195ea6d08 RSI: 0000000000000282 RDI: ffff880180f4fec0
+RBP: ffff8803270f7bc0 R08: ffff880197d2fbe0 R09: 0000000000000000
+R10: ffff88032867f090 R11: 0000000000000000 R12: ffff880195ea6d08
+R13: 0000000000000282 R14: ffff880180f4fec0 R15: 0000000000000000
+FS: 0000000000000000(0000) GS:ffff8801b5820000(0000) knlGS:0000000000000000
+CS: 0010 DS: 0018 ES: 0018 CR0: 000000008005003b
+CR2: 0000000000000000 CR3: 00000001a6eae000 CR4: 00000000000006e0
+DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
+DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400
+Process fc_rport_eq (pid: 5278, threadinfo ffff8803270f6000, task ffff880326254ab0)
+Stack:
+ffffffffa02c39ca ffff8803270f7ba0 ffff88019331cbc0 ffff880197d2fbc0
+0000000000000000 ffff8801a8c895e0 ffff8801a8c895e0 ffff8803270f7c10
+ffffffffa02c4962 ffff8803270f7be0 ffffffff814c94ab ffff8803270f7c10
+Call Trace:
+[<ffffffffa02c39ca>] ? fc_io_compl+0x10a/0x530 [libfc]
+[<ffffffffa02c4962>] fc_fcp_complete_locked+0x72/0x150 [libfc]
+[<ffffffff814c94ab>] ? _spin_unlock_bh+0x1b/0x20
+[<ffffffffa02b98ff>] ? fc_exch_done+0x3f/0x60 [libfc]
+[<ffffffffa02c4a8f>] fc_fcp_retry_cmd+0x4f/0x60 [libfc]
+[<ffffffffa02c6150>] fc_fcp_recv+0x9b0/0xc30 [libfc]
+[<ffffffff8106ba7a>] ? _call_console_drivers+0x4a/0x80
+[<ffffffff8107d5ec>] ? lock_timer_base+0x3c/0x70
+[<ffffffff8107e06b>] ? try_to_del_timer_sync+0x7b/0xe0
+[<ffffffffa02b9dcf>] fc_exch_mgr_reset+0x1df/0x250 [libfc]
+[<ffffffffa02c57a0>] ? fc_fcp_recv+0x0/0xc30 [libfc]
+[<ffffffffa02c1042>] fc_rport_work+0xf2/0x4e0 [libfc]
+[<ffffffff8109203e>] ? prepare_to_wait+0x4e/0x80
+[<ffffffffa02c0f50>] ? fc_rport_work+0x0/0x4e0 [libfc]
+[<ffffffff8108c6c0>] worker_thread+0x170/0x2a0
+[<ffffffff81091d50>] ? autoremove_wake_function+0x0/0x40
+[<ffffffff8108c550>] ? worker_thread+0x0/0x2a0
+[<ffffffff810919e6>] kthread+0x96/0xa0
+[<ffffffff810141ca>] child_rip+0xa/0x20
+[<ffffffff81091950>] ? kthread+0x0/0xa0
+[<ffffffff810141c0>] ? child_rip+0x0/0x20
+Code:
+Bad RIP value.
+
+RIP
+[<(null)>] (null)
+RSP <ffff8803270f7b88>
+CR2: 0000000000000000
+
+References: bnc#650113
+
+Signed-off-by: Yi Zou <yi.zou@intel.com>
+Signed-off-by: Eric Multanen <eric.w.multanen@intel.com>
+Acked-by: Hannes Reinecke <hare@suse.de>
+---
+ drivers/scsi/fcoe/fcoe.c | 4 +++-
+ 1 files changed, 3 insertions(+), 1 deletions(-)
+
+diff --git a/drivers/scsi/fcoe/fcoe.c b/drivers/scsi/fcoe/fcoe.c
+index 3323822..ec6115c 100644
+--- a/drivers/scsi/fcoe/fcoe.c
++++ b/drivers/scsi/fcoe/fcoe.c
+@@ -818,7 +818,6 @@ static void fcoe_if_destroy(struct fc_lport *lport)
+
+ /* Cleanup the fc_lport */
+ fc_lport_destroy(lport);
+- fc_fcp_destroy(lport);
+
+ /* Stop the transmit retry timer */
+ del_timer_sync(&port->timer);
+@@ -840,6 +839,9 @@ static void fcoe_if_destroy(struct fc_lport *lport)
+ fc_remove_host(lport->host);
+ scsi_remove_host(lport->host);
+
++ /* Destroy lport scsi_priv */
++ fc_fcp_destroy(lport);
++
+ /* There are no more rports or I/O, free the EM */
+ fc_exch_mgr_free(lport);
+
+--
+1.6.0.2
+
diff --git a/patches.fixes/libfc-fix-setting-of-rport-dev-loss b/patches.fixes/libfc-fix-setting-of-rport-dev-loss
new file mode 100644
index 0000000000..4ffcabb695
--- /dev/null
+++ b/patches.fixes/libfc-fix-setting-of-rport-dev-loss
@@ -0,0 +1,43 @@
+From: Mike Christie <michaelc@cs.wisc.edu>
+Date: Fri, 29 Oct 2010 13:40:18 +0200
+Subject: libfc: fix setting of rport dev loss
+Patch-Mainline: Submitted to linux-scsi
+References: bnc#650116
+
+There does not seem to be a reason why libfc adds a 5
+second delay to the user requested value for the dev loss
+tmo. There also does not seem to be a reason to allow
+setting it to 0 (or really close).
+
+This patch removes the extra 5 sec delay, and for 0 it
+sets it to 1 like other fc drivers. We should actually
+be able to set it to 0 since the queue_delayed_work API
+will just call queue_work, but other drivers set it to 1 in
+that case.
+
+Signed-off-by: Mike Christie <michaelc@cs.wisc.edu>
+Signed-off-by: Robert Love <robert.w.love@intel.com>
+Acked-by: Hannes Reinecke <hare@suse.de>
+---
+ drivers/scsi/libfc/fc_rport.c | 4 ++--
+ 1 files changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/drivers/scsi/libfc/fc_rport.c b/drivers/scsi/libfc/fc_rport.c
+index fd3b17d..c420d81 100644
+--- a/drivers/scsi/libfc/fc_rport.c
++++ b/drivers/scsi/libfc/fc_rport.c
+@@ -198,9 +198,9 @@ static const char *fc_rport_state(struct fc_rport_priv *rdata)
+ void fc_set_rport_loss_tmo(struct fc_rport *rport, u32 timeout)
+ {
+ if (timeout)
+- rport->dev_loss_tmo = timeout + 5;
++ rport->dev_loss_tmo = timeout;
+ else
+- rport->dev_loss_tmo = 30;
++ rport->dev_loss_tmo = 1;
+ }
+ EXPORT_SYMBOL(fc_set_rport_loss_tmo);
+
+--
+1.6.0.2
+
diff --git a/series.conf b/series.conf
index 06a527ae78..9ec3fd7d29 100644
--- a/series.conf
+++ b/series.conf
@@ -1670,6 +1670,11 @@
patches.fixes/fcoe-sync-with-upstream-patches
patches.fixes/libfc-Fix-incorrect-locking-and-unlocking-in-FCP
patches.fixes/libfc-fix-codes-returned-to-scsi-ml
+ patches.fixes/libfc-fix-NULL-pointer-dereference-bug
+ patches.fixes/libfc-do-not-return-error-from-fc_fcp_send_abort
+ patches.fixes/fcoe-fix-offload-feature-flag-change
+ patches.fixes/libfc-call-fc_remote_port_chkready-under-the-host-lock
+ patches.fixes/libfc-fix-setting-of-rport-dev-loss
# ixgbe patches from 2.6.33 bnc#562046
patches.drivers/dcb-data-center-bridging-ops-s