diff options
author | Ed L. Cashin <ecashin@coraid.com> | 2006-09-20 14:36:49 -0400 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@suse.de> | 2006-10-18 15:53:50 -0400 |
commit | e407a7f6cd143b3ab4eb3d7e1cf882e96b710eb5 (patch) | |
tree | a180d2a6ae40b1fe6773c93a24a5c469948fd59d /drivers/block/aoe/aoe.h | |
parent | 2fdc0ea75b26e3009cfdf72e79901e4e16bb99bd (diff) |
aoe: zero copy write 1 of 2
Avoid memory copy on writes.
(This patch depends on fixes in patch 9 to follow.)
Although skb->len should not be set when working with linear skbuffs,
the skb->tail pointer maintained by skb_put/skb_trim is not relevant
to what happens when the skb_fill_page_desc function is called. This
issue was raised without comment in linux-kernel and netdev earlier
this month:
http://thread.gmane.org/gmane.linux.kernel/446474/
http://thread.gmane.org/gmane.linux.network/45444/
So until there is something analogous to skb_put that works for
zero-copy write skbuffs, we will do what the other callers of
skb_fill_page_desc are doing.
Signed-off-by: "Ed L. Cashin" <ecashin@coraid.com>
Acked-by: Alan Cox <alan@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Diffstat (limited to 'drivers/block/aoe/aoe.h')
-rw-r--r-- | drivers/block/aoe/aoe.h | 7 |
1 files changed, 2 insertions, 5 deletions
diff --git a/drivers/block/aoe/aoe.h b/drivers/block/aoe/aoe.h index 507c37799882..fa2d804b2665 100644 --- a/drivers/block/aoe/aoe.h +++ b/drivers/block/aoe/aoe.h | |||
@@ -107,11 +107,7 @@ struct frame { | |||
107 | ulong waited; | 107 | ulong waited; |
108 | struct buf *buf; | 108 | struct buf *buf; |
109 | char *bufaddr; | 109 | char *bufaddr; |
110 | int writedatalen; | 110 | struct sk_buff *skb; |
111 | int ndata; | ||
112 | |||
113 | /* largest possible */ | ||
114 | unsigned char data[sizeof(struct aoe_hdr) + sizeof(struct aoe_atahdr)]; | ||
115 | }; | 111 | }; |
116 | 112 | ||
117 | struct aoedev { | 113 | struct aoedev { |
@@ -157,6 +153,7 @@ void aoecmd_cfg(ushort aoemajor, unsigned char aoeminor); | |||
157 | void aoecmd_ata_rsp(struct sk_buff *); | 153 | void aoecmd_ata_rsp(struct sk_buff *); |
158 | void aoecmd_cfg_rsp(struct sk_buff *); | 154 | void aoecmd_cfg_rsp(struct sk_buff *); |
159 | void aoecmd_sleepwork(void *vp); | 155 | void aoecmd_sleepwork(void *vp); |
156 | struct sk_buff *new_skb(ulong); | ||
160 | 157 | ||
161 | int aoedev_init(void); | 158 | int aoedev_init(void); |
162 | void aoedev_exit(void); | 159 | void aoedev_exit(void); |