diff options
author | Andrea Bastoni <bastoni@cs.unc.edu> | 2010-05-30 19:16:45 -0400 |
---|---|---|
committer | Andrea Bastoni <bastoni@cs.unc.edu> | 2010-05-30 19:16:45 -0400 |
commit | ada47b5fe13d89735805b566185f4885f5a3f750 (patch) | |
tree | 644b88f8a71896307d71438e9b3af49126ffb22b /drivers/scsi/libfc/fc_frame.c | |
parent | 43e98717ad40a4ae64545b5ba047c7b86aa44f4f (diff) | |
parent | 3280f21d43ee541f97f8cda5792150d2dbec20d5 (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.c | 14 |
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 | */ |
54 | struct fc_frame *__fc_frame_alloc(size_t len) | 55 | struct 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 | } |
70 | EXPORT_SYMBOL(__fc_frame_alloc); | 72 | EXPORT_SYMBOL(_fc_frame_alloc); |
71 | |||
72 | 73 | ||
73 | struct fc_frame *fc_frame_alloc_fill(struct fc_lport *lp, size_t payload_len) | 74 | struct 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 | } |
91 | EXPORT_SYMBOL(fc_frame_alloc_fill); | ||