From: Robert Olsson <[EMAIL PROTECTED]>
Date: Thu, 22 Dec 2005 10:51:46 +0100

> @@ -219,28 +230,27 @@
>       if (rta[RTA_FLOW-1])
>               memcpy(&new_r->r_tclassid, RTA_DATA(rta[RTA_FLOW-1]), 4);
>  #endif
> -
> -     rp = &fib_rules;
> +     r = (struct fib_rule *) fib_rules.first;
>       if (!new_r->r_preference) {
> -             r = fib_rules;
> -             if (r && (r = r->r_next) != NULL) {
> -                     rp = &fib_rules->r_next;
> +             if (r && r->hlist.next != NULL) {
> +                     r = (struct fib_rule *) r->hlist.next;
>                       if (r->r_preference)
>                               new_r->r_preference = r->r_preference - 1;
>               }
>       }

I don't think this is right.

fib_rules.first is a pointer to the hlist_node (within the fib_rule)
not the fib_rule itself.

> -     for (r=fib_rules; r; r=r->r_next) {
> +     hlist_for_each_entry(r, node, &fib_rules, hlist) {
>               if (r->r_ifindex == dev->ifindex) {
> -                     write_lock_bh(&fib_rules_lock);
> +                     preempt_disable();
>                       r->r_ifindex = -1;
> -                     write_unlock_bh(&fib_rules_lock);
> +                     preempt_enable();
>               }
>       }

What is the preempt_disable() actually protecting here?
It's a simple assignment to -1, and since the disable
occurs inside the ifindex test, it is not protecting
that either.

> -     for (r=fib_rules; r; r=r->r_next) {
> +     hlist_for_each_entry(r, node, &fib_rules, hlist) {
>               if (r->r_ifindex == -1 && strcmp(dev->name, r->r_ifname) == 0) {
> -                     write_lock_bh(&fib_rules_lock);
> +                     preempt_disable();
>                       r->r_ifindex = dev->ifindex;
> -                     write_unlock_bh(&fib_rules_lock);
> +                     preempt_enable();
>               }
>       }

Same situation here.

Otherwise, it looks OK :-)
-
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

Reply via email to