diff options
-rw-r--r-- | drivers/scsi/fcoe/fcoe.c | 4 | ||||
-rw-r--r-- | drivers/scsi/libfc/fc_exch.c | 4 |
2 files changed, 5 insertions, 3 deletions
diff --git a/drivers/scsi/fcoe/fcoe.c b/drivers/scsi/fcoe/fcoe.c index f7547fb000c0..945df21ac017 100644 --- a/drivers/scsi/fcoe/fcoe.c +++ b/drivers/scsi/fcoe/fcoe.c | |||
@@ -1373,6 +1373,10 @@ int fcoe_rcv(struct sk_buff *skb, struct net_device *netdev, | |||
1373 | } else | 1373 | } else |
1374 | cpu = smp_processor_id(); | 1374 | cpu = smp_processor_id(); |
1375 | } | 1375 | } |
1376 | |||
1377 | if (cpu >= nr_cpu_ids) | ||
1378 | goto err; | ||
1379 | |||
1376 | fps = &per_cpu(fcoe_percpu, cpu); | 1380 | fps = &per_cpu(fcoe_percpu, cpu); |
1377 | spin_lock_bh(&fps->fcoe_rx_list.lock); | 1381 | spin_lock_bh(&fps->fcoe_rx_list.lock); |
1378 | if (unlikely(!fps->thread)) { | 1382 | if (unlikely(!fps->thread)) { |
diff --git a/drivers/scsi/libfc/fc_exch.c b/drivers/scsi/libfc/fc_exch.c index 7baf2239ce07..01ff082dc34c 100644 --- a/drivers/scsi/libfc/fc_exch.c +++ b/drivers/scsi/libfc/fc_exch.c | |||
@@ -802,10 +802,8 @@ static struct fc_exch *fc_exch_find(struct fc_exch_mgr *mp, u16 xid) | |||
802 | pool = per_cpu_ptr(mp->pool, xid & fc_cpu_mask); | 802 | pool = per_cpu_ptr(mp->pool, xid & fc_cpu_mask); |
803 | spin_lock_bh(&pool->lock); | 803 | spin_lock_bh(&pool->lock); |
804 | ep = fc_exch_ptr_get(pool, (xid - mp->min_xid) >> fc_cpu_order); | 804 | ep = fc_exch_ptr_get(pool, (xid - mp->min_xid) >> fc_cpu_order); |
805 | if (ep) { | 805 | if (ep && ep->xid == xid) |
806 | fc_exch_hold(ep); | 806 | fc_exch_hold(ep); |
807 | WARN_ON(ep->xid != xid); | ||
808 | } | ||
809 | spin_unlock_bh(&pool->lock); | 807 | spin_unlock_bh(&pool->lock); |
810 | } | 808 | } |
811 | return ep; | 809 | return ep; |