aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/scsi/libfc/fc_frame.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/scsi/libfc/fc_frame.c')
-rw-r--r--drivers/scsi/libfc/fc_frame.c13
1 files changed, 7 insertions, 6 deletions
diff --git a/drivers/scsi/libfc/fc_frame.c b/drivers/scsi/libfc/fc_frame.c
index 63fe00cfe667..6da01c616964 100644
--- a/drivers/scsi/libfc/fc_frame.c
+++ b/drivers/scsi/libfc/fc_frame.c
@@ -51,24 +51,24 @@ EXPORT_SYMBOL(fc_frame_crc_check);
51 * Allocate a frame intended to be sent via fcoe_xmit. 51 * Allocate a frame intended to be sent via fcoe_xmit.
52 * Get an sk_buff for the frame and set the length. 52 * Get an sk_buff for the frame and set the length.
53 */ 53 */
54struct fc_frame *__fc_frame_alloc(size_t len) 54struct fc_frame *_fc_frame_alloc(size_t len)
55{ 55{
56 struct fc_frame *fp; 56 struct fc_frame *fp;
57 struct sk_buff *skb; 57 struct sk_buff *skb;
58 58
59 WARN_ON((len % sizeof(u32)) != 0); 59 WARN_ON((len % sizeof(u32)) != 0);
60 len += sizeof(struct fc_frame_header); 60 len += sizeof(struct fc_frame_header);
61 skb = dev_alloc_skb(len + FC_FRAME_HEADROOM + FC_FRAME_TAILROOM); 61 skb = alloc_skb_fclone(len + FC_FRAME_HEADROOM + FC_FRAME_TAILROOM +
62 NET_SKB_PAD, GFP_ATOMIC);
62 if (!skb) 63 if (!skb)
63 return NULL; 64 return NULL;
65 skb_reserve(skb, NET_SKB_PAD + FC_FRAME_HEADROOM);
64 fp = (struct fc_frame *) skb; 66 fp = (struct fc_frame *) skb;
65 fc_frame_init(fp); 67 fc_frame_init(fp);
66 skb_reserve(skb, FC_FRAME_HEADROOM);
67 skb_put(skb, len); 68 skb_put(skb, len);
68 return fp; 69 return fp;
69} 70}
70EXPORT_SYMBOL(__fc_frame_alloc); 71EXPORT_SYMBOL(_fc_frame_alloc);
71
72 72
73struct fc_frame *fc_frame_alloc_fill(struct fc_lport *lp, size_t payload_len) 73struct fc_frame *fc_frame_alloc_fill(struct fc_lport *lp, size_t payload_len)
74{ 74{
@@ -78,7 +78,7 @@ struct fc_frame *fc_frame_alloc_fill(struct fc_lport *lp, size_t payload_len)
78 fill = payload_len % 4; 78 fill = payload_len % 4;
79 if (fill != 0) 79 if (fill != 0)
80 fill = 4 - fill; 80 fill = 4 - fill;
81 fp = __fc_frame_alloc(payload_len + fill); 81 fp = _fc_frame_alloc(payload_len + fill);
82 if (fp) { 82 if (fp) {
83 memset((char *) fr_hdr(fp) + payload_len, 0, fill); 83 memset((char *) fr_hdr(fp) + payload_len, 0, fill);
84 /* trim is OK, we just allocated it so there are no fragments */ 84 /* trim is OK, we just allocated it so there are no fragments */
@@ -87,3 +87,4 @@ struct fc_frame *fc_frame_alloc_fill(struct fc_lport *lp, size_t payload_len)
87 } 87 }
88 return fp; 88 return fp;
89} 89}
90EXPORT_SYMBOL(fc_frame_alloc_fill);