Le jeudi 06 janvier 2011 Ã 21:44 +0900, Simon Horman a Ãcrit : > Hi Eric ! > > Thanks for the advice. I had thought about the socket buffer but at some > point it slipped my mind. > > In any case the following patch seems to implement the change that I had in > mind. However my discussions Michael Tsirkin elsewhere in this thread are > beginning to make me think that think that perhaps this change isn't the > best solution. > > diff --git a/datapath/actions.c b/datapath/actions.c > index 5e16143..505f13f 100644 > --- a/datapath/actions.c > +++ b/datapath/actions.c > @@ -384,7 +384,12 @@ static int do_execute_actions(struct datapath *dp, struct sk_buff *skb, > > for (a = actions, rem = actions_len; rem > 0; a = nla_next(a, &rem)) { > if (prev_port != -1) { > - do_output(dp, skb_clone(skb, GFP_ATOMIC), prev_port); > + struct sk_buff *nskb = skb_clone(skb, GFP_ATOMIC); > + if (nskb) { > + if (skb->sk) > + skb_set_owner_w(nskb, skb->sk); > + do_output(dp, nskb, prev_port); > + } > prev_port = -1; > } > > I got a rather nasty panic without the if (skb->sk), > I guess some skbs don't have a socket. Indeed, some packets are not linked to a socket. (ARP packets for example) Sorry, I should have mentioned it :) -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html