From c98453198e1cbef3a63ddc13d20c33794e73b4c1 Mon Sep 17 00:00:00 2001 From: Yi Zou Date: Wed, 21 Oct 2009 16:27:58 -0700 Subject: [PATCH] --- yaml --- r: 173612 b: refs/heads/master c: d37322a43ebac79eef417149f5696390cf8872db h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/drivers/scsi/libfc/fc_fcp.c | 3 ++- trunk/include/scsi/fc_frame.h | 3 +++ 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/[refs] b/[refs] index 72044556586c..8a62617cc54a 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 7221d7e59d1c675828b6de50b757cd8282011a5d +refs/heads/master: d37322a43ebac79eef417149f5696390cf8872db diff --git a/trunk/drivers/scsi/libfc/fc_fcp.c b/trunk/drivers/scsi/libfc/fc_fcp.c index 40ed7442d9df..28bfe1c2c50a 100644 --- a/trunk/drivers/scsi/libfc/fc_fcp.c +++ b/trunk/drivers/scsi/libfc/fc_fcp.c @@ -574,7 +574,8 @@ static int fc_fcp_send_data(struct fc_fcp_pkt *fsp, struct fc_seq *seq, tlen -= sg_bytes; remaining -= sg_bytes; - if (tlen) + if ((skb_shinfo(fp_skb(fp))->nr_frags < FC_FRAME_SG_LEN) && + (tlen)) continue; /* diff --git a/trunk/include/scsi/fc_frame.h b/trunk/include/scsi/fc_frame.h index c35d2383cc26..148126dcf9e9 100644 --- a/trunk/include/scsi/fc_frame.h +++ b/trunk/include/scsi/fc_frame.h @@ -37,6 +37,9 @@ #define FC_FRAME_HEADROOM 32 /* headroom for VLAN + FCoE headers */ #define FC_FRAME_TAILROOM 8 /* trailer space for FCoE */ +/* Max number of skb frags allowed, reserving one for fcoe_crc_eof page */ +#define FC_FRAME_SG_LEN (MAX_SKB_FRAGS - 1) + #define fp_skb(fp) (&((fp)->skb)) #define fr_hdr(fp) ((fp)->skb.data) #define fr_len(fp) ((fp)->skb.len)