aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/scsi/libfc/fc_frame.c
diff options
context:
space:
mode:
authorAndrea Bastoni <bastoni@cs.unc.edu>2010-05-30 19:16:45 -0400
committerAndrea Bastoni <bastoni@cs.unc.edu>2010-05-30 19:16:45 -0400
commitada47b5fe13d89735805b566185f4885f5a3f750 (patch)
tree644b88f8a71896307d71438e9b3af49126ffb22b /drivers/scsi/libfc/fc_frame.c
parent43e98717ad40a4ae64545b5ba047c7b86aa44f4f (diff)
parent3280f21d43ee541f97f8cda5792150d2dbec20d5 (diff)
Merge branch 'wip-2.6.34' into old-private-masterarchived-private-master
Diffstat (limited to 'drivers/scsi/libfc/fc_frame.c')
-rw-r--r--drivers/scsi/libfc/fc_frame.c14
1 files changed, 8 insertions, 6 deletions
diff --git a/drivers/scsi/libfc/fc_frame.c b/drivers/scsi/libfc/fc_frame.c
index 63fe00cfe667..981329a17c48 100644
--- a/drivers/scsi/libfc/fc_frame.c
+++ b/drivers/scsi/libfc/fc_frame.c
@@ -24,6 +24,7 @@
24#include <linux/kernel.h> 24#include <linux/kernel.h>
25#include <linux/skbuff.h> 25#include <linux/skbuff.h>
26#include <linux/crc32.h> 26#include <linux/crc32.h>
27#include <linux/gfp.h>
27 28
28#include <scsi/fc_frame.h> 29#include <scsi/fc_frame.h>
29 30
@@ -51,24 +52,24 @@ EXPORT_SYMBOL(fc_frame_crc_check);
51 * Allocate a frame intended to be sent via fcoe_xmit. 52 * Allocate a frame intended to be sent via fcoe_xmit.
52 * Get an sk_buff for the frame and set the length. 53 * Get an sk_buff for the frame and set the length.
53 */ 54 */
54struct fc_frame *__fc_frame_alloc(size_t len) 55struct fc_frame *_fc_frame_alloc(size_t len)
55{ 56{
56 struct fc_frame *fp; 57 struct fc_frame *fp;
57 struct sk_buff *skb; 58 struct sk_buff *skb;
58 59
59 WARN_ON((len % sizeof(u32)) != 0); 60 WARN_ON((len % sizeof(u32)) != 0);
60 len += sizeof(struct fc_frame_header); 61 len += sizeof(struct fc_frame_header);
61 skb = dev_alloc_skb(len + FC_FRAME_HEADROOM + FC_FRAME_TAILROOM); 62 skb = alloc_skb_fclone(len + FC_FRAME_HEADROOM + FC_FRAME_TAILROOM +
63 NET_SKB_PAD, GFP_ATOMIC);
62 if (!skb) 64 if (!skb)
63 return NULL; 65 return NULL;
66 skb_reserve(skb, NET_SKB_PAD + FC_FRAME_HEADROOM);
64 fp = (struct fc_frame *) skb; 67 fp = (struct fc_frame *) skb;
65 fc_frame_init(fp); 68 fc_frame_init(fp);
66 skb_reserve(skb, FC_FRAME_HEADROOM);
67 skb_put(skb, len); 69 skb_put(skb, len);
68 return fp; 70 return fp;
69} 71}
70EXPORT_SYMBOL(__fc_frame_alloc); 72EXPORT_SYMBOL(_fc_frame_alloc);
71
72 73
73struct fc_frame *fc_frame_alloc_fill(struct fc_lport *lp, size_t payload_len) 74struct fc_frame *fc_frame_alloc_fill(struct fc_lport *lp, size_t payload_len)
74{ 75{
@@ -78,7 +79,7 @@ struct fc_frame *fc_frame_alloc_fill(struct fc_lport *lp, size_t payload_len)
78 fill = payload_len % 4; 79 fill = payload_len % 4;
79 if (fill != 0) 80 if (fill != 0)
80 fill = 4 - fill; 81 fill = 4 - fill;
81 fp = __fc_frame_alloc(payload_len + fill); 82 fp = _fc_frame_alloc(payload_len + fill);
82 if (fp) { 83 if (fp) {
83 memset((char *) fr_hdr(fp) + payload_len, 0, fill); 84 memset((char *) fr_hdr(fp) + payload_len, 0, fill);
84 /* trim is OK, we just allocated it so there are no fragments */ 85 /* trim is OK, we just allocated it so there are no fragments */
@@ -87,3 +88,4 @@ struct fc_frame *fc_frame_alloc_fill(struct fc_lport *lp, size_t payload_len)
87 } 88 }
88 return fp; 89 return fp;
89} 90}
91EXPORT_SYMBOL(fc_frame_alloc_fill);