lkml.org 
[lkml]   [2002]   [Mar]   [1]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: OOPS: Multipath routing 2.4.17

    Hello,

    Kain wrote:

    > impossible 888
    > divide error: 0000

    > > > EIP; c024c5ea <fib_select_multipath+5a/a0> <=====
    > Trace; c02232e8 <ip_route_output_slow+318/670>

    There is no write locking in fib_select_multipath,
    combined with high rate of route resolutions and ... boom,
    fi->fib_power is 0:

    w = jiffies % fi->fib_power;

    What about a different algorithm to apply weighted
    round robin (idea mostly from LVS), something like
    this code (entirely not tested) where fi->fib_power is not used
    and where fib_sync_up and fib_sync_down don't need to play
    with nh_power on nh_flags change:

    void fib_select_multipath(const struct rt_key *key, struct fib_result *res)
    {
    struct fib_info *fi = res->fi;
    int w = -1, sel = 0;

    write_lock(&fib_info_lock);

    repeat:

    change_nexthops(fi) {
    if (nh->nh_power > w && !(nh->nh_flags&RTNH_F_DEAD)) {
    w = nh->nh_power;
    sel = nhsel;
    }
    } endfor_nexthops(fi);
    if (w > 0) {
    fi->fib_nh[sel].nh_power--;
    write_unlock(&fib_info_lock);
    res->nh_sel = sel;
    return;
    }

    if (!w) {
    change_nexthops(fi) {
    if (!(nh->nh_flags&RTNH_F_DEAD)) {
    nh->nh_power = nh->nh_weight;
    }
    } endfor_nexthops(fi);
    w = -1;
    goto repeat;
    }

    write_unlock(&fib_info_lock);

    #if 1
    printk(KERN_CRIT "impossible 888\n");
    #endif
    return;
    }

    Regards

    --
    Julian Anastasov <ja@ssi.bg>

    -
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/

    \
     
     \ /
      Last update: 2005-03-22 13:24    [W:0.022 / U:62.044 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site