Thanks for the patches. I installed them. LiS-2.16.1 will include them. -- Dave
At 09:45 AM 3/17/2003 Monday, Jean-Marc Saffroy wrote:
David, Ole,
Attached to this mail are 4 patches for the ldl driver. Each patch addresses one of the following items:
1. Serialization of dl_open
No synchronization has been coded in `dl_open()' when looking for an unique minor number, nor for the management of the list of all active DLPI driver instances. This synchronization is mandatory as STREAMS modules open operations may be achieved in parallel.
2. List of struct pt
A "struct pt" list is scanned to see if a similar SAP entry with the same SAP type and device has already been created. If not, a new "struct pt" entry is created, but unfortunately is never inserted into the list, so that next same SAP creation will result into a new "struct pt" entry created. Therefore, this list is never used, thus leading to an unneeded overhead under packet reception: each new SAP binding creates a new packet type entry for which an incoming "sk_buff" is created, which will be quickly released if not wanted by any DLPI SAP driver.
3. "assert(pri <= 100) failed"
We found that the priority of each DL_UNIDATA_REQ message sent by the `netperf' program is not initialized and clearly out of the bounds allowed by the provider. Unfortunately, this error should be treated before the assertion is tested and a DL_UDERROR_IND message sent back with the DL_UNSUPPORTED reason. This is the behavior described in the DLPI revision 2.0.0 standard currently not implemented in the DLPI driver.
4. 'Collision panic' and "rcv_func: Reentry."
When a packet is received from the network and its associated connection is closed at the same time, a `panic' sometimes occurs because of the NULL pointer dereference. This problem appears in `rcv_func()' on one processor while another one is closing the connection. There is a missing synchronization between the two actions and care should be taken when a connection is closed because packets may still arrive for the closing connection, but also for others.
Furthermore, packet reception is serialized, but not with the packet transmission, so that a call to `rcv_func()' can be achieved at the same time by one transmitter and one receiver. This is a bug in the way the Linux kernel handles "old" network protocol handlers. Since fixing the Linux kernel in this case is uneasy, parallel calls to `rcv_func()' should be allowed.
These patches were developed and tested against LiS 2.14.M, but they still apply against 2.15.3 and 2.16.0 (untested but should work the same). Each patch requires the previous ones to apply cleanly. Testing consisted in running netperf between 2 Linux 2.4.18 SMP boxes connected to a 100M Ethernet hub.
We hope you can include these patches in the next releases of LiS.
Best regards,
-- Jean-Marc Saffroy - Research Engineer - Silicomp Research Institute mailto:[EMAIL PROTECTED]
_______________________________________________ Linux-streams mailing list [EMAIL PROTECTED] http://gsyc.escet.urjc.es/mailman/listinfo/linux-streams
