netdev
[Top] [All Lists]

bonding driver + slave device (net/core) fix

To: tadavis@xxxxxxx, netdev@xxxxxxxxxxx, ak@xxxxxx, davem@xxxxxxxxxx
Subject: bonding driver + slave device (net/core) fix
From: Andreas Steinmetz <ast@xxxxxxxx>
Date: Sat, 15 Jul 2000 11:48:24 +0200 (MEST)
Cc: linux-net@xxxxxxxxxxxxxxxx, linux-kernel@xxxxxxxxxxxxxxxx
Organization: D.O.M. Datenverarbeitung GmbH
Sender: owner-netdev@xxxxxxxxxxx
Hi,
the following problems exist with the bonding driver (drivers/net/bonding.c) in
2.2.16 and 2.2.17-pre:

1. Missing entry in drivers/net/Space.c makes the driver inaccessible when not
   compiled as module.

2. Bug in netif_rx() in net/core/dev.c causes received packets to be lost when
   there is a backlog, this is valid not only for the bonding driver but for
   all drivers using IFF_SLAVE (the master device usually has no queue, only
   the slaves have them, due to the bug the received packed would be appended
   to the nonexisting master device queue).
   This problem will fully show up when bonding 100MBit devices, causing the
   bonded data rate to drop to 60-70Kbytes/s.

The fixes for the above problems are attached as bonding-fix.diff and are fully
tested.

3. The bonding driver will loop when packets are to be transmitted and no
   slaves are attached causing the system to freeze. This is especially bad as
   the bonding device has to be up to attach slaves, so this has a certain
   probability to occur.
   The driver has bugs in bond_close() that may hang the system (not fully
   releasing slaves, possible interrupt race problems).
   It might hang the system in bond_open().

The fixes for the bonding driver are attached as bonding-changes.diff. Please
note that they are not yet tested (not urgent for me, my servers tend to be up
all the time).

All patches are against 2.2.16.

A final word for all who want to test 100MBit channel bonding: use fast
systems! The maximum throughput with 2 bonded cards @ 100% cpu load is about
18Mbytes/s between two PIII-500 Systems (rough measurement with ftp get and
top).

Attachment: bonding-changes.diff
Description: Text document

Attachment: bonding-fix.diff
Description: Text document

<Prev in Thread] Current Thread [Next in Thread>
  • bonding driver + slave device (net/core) fix, Andreas Steinmetz <=