1
linux/net/dccp
Gerrit Renker c5a1ae9a4c [DCCP] ccid3: Perform history operations only after packet has been sent
This migrates all packet history operations into the routine
 ccid3_hc_tx_packet_sent, thereby removing synchronization problems
 that occur when, as before, the operations are spread over multiple
 routines.
 The following minor simplifications are also applied:
  * several simplifications now follow from this change - several tests
    are now no longer required
  * removal of one unnecessary variable (dp)

Justification:

 Currently packet history operations span two different routines,
 one of which is likely to pass through several iterations of sleeping
 and awakening.
 The first routine, ccid3_hc_tx_send_packet, allocates an entry and
 sets a few fields. The remaining fields are filled in when the second
 routine (which is not within a sleeping context), ccid3_hc_tx_packet_sent,
 is called. This has several strong drawbacks:
  * it is not necessary to split history operations - all fields can be
    filled in by the second routine
  * the first routine is called multiple times, until a packet can be sent,
    and sleeps meanwhile - this causes a lot of difficulties with regard to
    keeping the list consistent
  * since both routines do not have a producer-consumer like synchronization,
    it is very difficult to maintain data across calls to these routines
  * the fact that the routines are called in different contexts (sleeping, not
    sleeping) adds further problems

Signed-off-by: Gerrit Renker <gerrit@erg.abdn.ac.uk>
Acked-by: Ian McDonald <ian.mcdonald@jandi.co.nz>
Signed-off-by: Arnaldo Carvalho de Melo <acme@mandriva.com>
2006-12-11 14:34:54 -08:00
..
ccids [DCCP] ccid3: Perform history operations only after packet has been sent 2006-12-11 14:34:54 -08:00
ackvec.c [PATCH] slab: remove kmem_cache_t 2006-12-07 08:39:25 -08:00
ackvec.h [DCCP] ackvec: infrastructure for sending more than one ackvec per packet 2006-12-02 21:30:32 -08:00
ccid.c [PATCH] slab: remove kmem_cache_t 2006-12-07 08:39:25 -08:00
ccid.h [DCCP] ccid: Deprecate ccid_hc_tx_insert_options 2006-12-11 14:34:49 -08:00
dccp.h [DCCP]: Debug timeval operations 2006-12-11 14:34:45 -08:00
diag.c Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
feat.c [DCCP]: Simplified conditions due to use of enum:8 states 2006-12-02 21:24:38 -08:00
feat.h [DCCP]: Make feature negotiation more readable 2006-12-02 21:22:29 -08:00
input.c [DCCP]: Only deliver to the CCID rx side in charge 2006-12-11 14:34:47 -08:00
ipv4.c [DCCP]: Simplified conditions due to use of enum:8 states 2006-12-02 21:24:38 -08:00
ipv6.c [DCCP]: Simplified conditions due to use of enum:8 states 2006-12-02 21:24:38 -08:00
ipv6.h Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
Kconfig [DCCP]: enable debug messages also for static builds 2006-12-02 21:24:35 -08:00
Makefile [DCCPv6]: Resolve conditional build problem 2006-12-02 21:22:28 -08:00
minisocks.c Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6 2006-12-05 14:37:56 +00:00
options.c [DCCP] ccid: Deprecate ccid_hc_tx_insert_options 2006-12-11 14:34:49 -08:00
output.c [DCCP]: Warn when discarding packet due to internal errors 2006-12-11 14:34:48 -08:00
probe.c [DCCP]: Make dccp_probe more portable 2006-12-02 21:24:39 -08:00
proto.c [DCCP]: Make {set,get}sockopt(DCCP_SOCKOPT_PACKET_SIZE) return 0 2006-12-02 21:31:00 -08:00
sysctl.c [DCCP]: Remove allocation of sysctl numbers 2006-12-02 21:30:56 -08:00
timer.c [DCCP]: Remove forward declarations in timer.c 2006-12-02 21:22:20 -08:00