On Wed, 2012-05-02 at 11:42 +0800, Jason Wang wrote:Yes, both are ok. Since the code were merged, let's just use current method.Current the SKBTX_DEV_ZEROCOPY is set unconditionally afterI thought this flag was needed for zerocopy skb free even in err case.
zerocopy_sg_from_iovec(), this would lead NULL pointer when macvtap
fails to build zerocopy skb because destructor_arg was not
initialized. Solve this by set this flag after the skb were built
successfully.
I've checked it back again, it's OK to move the flag after the skb
successfully built. Or we can fix it by modify skb free with
destructor_arg NULL check as below:
...
skb_release_data() {
...
if (skb_shinfo(skb)->tx_flags& SKBTX_DEV_ZEROCOPY) {
struct ubuf_info *uarg;
uarg = skb_shinfo(skb)->destructor_arg;
if (uarg&& uarg->callback)
uarg->callback(uarg);
}
...
}
Thanks
Shirley