From: Chris Madden <[EMAIL PROTECTED]> Date: Mon, 19 Mar 2007 16:10:29 -0400
> I did some digging, and it appears the filter add isn't mutexed right. > Inside net/core/dev.c, ing_filter, I see: > > spin_lock(&dev->ingress_lock); > if ((q = dev->qdisc_ingress) != NULL) > result = q->enqueue(skb, q); > spin_unlock(&dev->ingress_lock); > > And unless I'm missing something, this is the only place this lock is > used ( other than initialization ). In net/sched/cls_api.c, I see we do > qdisc_lock_tree/qdisc_unlock_tree (which locks dev->queue_lock). As > near as I can tell, this is our problem ( our mutexes don't prohibit > manipulation while packets are flowing ). I think this should use dev->queue_lock. It looks like the idea might have been to allow more parallelized running of ingress filters, but this is done wrong and leads to the crashes you are seeing. Can you just replace the above with dev->queue_lock and see if that makes your problem go away? THanks. - To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html