]> bbs.cooldavid.org Git - net-next-2.6.git/commitdiff
[SCSI] fcoe: add support to large send by gso through net_device for fcoe_sw
authorYi Zou <yi.zou@intel.com>
Fri, 27 Feb 2009 22:07:15 +0000 (14:07 -0800)
committerJames Bottomley <James.Bottomley@HansenPartnership.com>
Fri, 13 Mar 2009 20:14:54 +0000 (15:14 -0500)
Change fcoe_xmit to setup gso for LLD LSO offload as well as CRC offload

Signed-off-by: Yi Zou <yi.zou@intel.com>
Signed-off-by: James Bottomley <James.Bottomley@HansenPartnership.com>
drivers/scsi/fcoe/libfcoe.c

index a99a42807b38c63258de9f93f2b4c8a31491363d..5dae823057ae164cd3082ac54bfd4f894de7dc9b 100644 (file)
@@ -423,7 +423,7 @@ int fcoe_xmit(struct fc_lport *lp, struct fc_frame *fp)
 
        /* crc offload */
        if (likely(lp->crc_offload)) {
-               skb->ip_summed = CHECKSUM_COMPLETE;
+               skb->ip_summed = CHECKSUM_PARTIAL;
                skb->csum_start = skb_headroom(skb);
                skb->csum_offset = skb->len;
                crc = 0;
@@ -483,6 +483,16 @@ int fcoe_xmit(struct fc_lport *lp, struct fc_frame *fp)
                FC_FCOE_ENCAPS_VER(hp, FC_FCOE_VER);
        hp->fcoe_sof = sof;
 
+#ifdef NETIF_F_FSO
+       /* fcoe lso, mss is in max_payload which is non-zero for FCP data */
+       if (lp->seq_offload && fr_max_payload(fp)) {
+               skb_shinfo(skb)->gso_type = SKB_GSO_FCOE;
+               skb_shinfo(skb)->gso_size = fr_max_payload(fp);
+       } else {
+               skb_shinfo(skb)->gso_type = 0;
+               skb_shinfo(skb)->gso_size = 0;
+       }
+#endif
        /* update tx stats: regardless if LLD fails */
        stats = lp->dev_stats[smp_processor_id()];
        if (stats) {