diff options
Diffstat (limited to 'drivers/scsi/libfc/fc_frame.c')
-rw-r--r-- | drivers/scsi/libfc/fc_frame.c | 13 |
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 | */ |
54 | struct fc_frame *__fc_frame_alloc(size_t len) | 54 | struct 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 | } |
70 | EXPORT_SYMBOL(__fc_frame_alloc); | 71 | EXPORT_SYMBOL(_fc_frame_alloc); |
71 | |||
72 | 72 | ||
73 | struct fc_frame *fc_frame_alloc_fill(struct fc_lport *lp, size_t payload_len) | 73 | struct 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 | } |
90 | EXPORT_SYMBOL(fc_frame_alloc_fill); | ||