X-Git-Url: http://git.monstr.eu/?a=blobdiff_plain;f=net%2F802%2Fgarp.c;h=f6012f8e59f00521e36a7e251ce3b452818a010e;hb=d842bc6c0579ca7643eed029beabab3ac562a335;hp=400bd857e5f5744d82fdf3ed8bfaabe15fb3058f;hpb=4f1a6ef1df6f952fc9f22f34d51a6c3d3c4fbe23;p=linux-2.6-microblaze.git diff --git a/net/802/garp.c b/net/802/garp.c index 400bd857e5f5..f6012f8e59f0 100644 --- a/net/802/garp.c +++ b/net/802/garp.c @@ -203,6 +203,19 @@ static void garp_attr_destroy(struct garp_applicant *app, struct garp_attr *attr kfree(attr); } +static void garp_attr_destroy_all(struct garp_applicant *app) +{ + struct rb_node *node, *next; + struct garp_attr *attr; + + for (node = rb_first(&app->gid); + next = node ? rb_next(node) : NULL, node != NULL; + node = next) { + attr = rb_entry(node, struct garp_attr, node); + garp_attr_destroy(app, attr); + } +} + static int garp_pdu_init(struct garp_applicant *app) { struct sk_buff *skb; @@ -609,6 +622,7 @@ void garp_uninit_applicant(struct net_device *dev, struct garp_application *appl spin_lock_bh(&app->lock); garp_gid_event(app, GARP_EVENT_TRANSMIT_PDU); + garp_attr_destroy_all(app); garp_pdu_queue(app); spin_unlock_bh(&app->lock);