@@ -225,14 +225,11 @@ static int quic_stream_try_to_consume(struct quic_conn *qc,
225225 while (frm_node ) {
226226 struct qf_stream * strm_frm ;
227227 struct quic_frame * frm ;
228- size_t offset , len ;
229- int fin ;
228+ size_t offset ;
230229
231230 strm_frm = eb64_entry (frm_node , struct qf_stream , offset );
232231 frm = container_of (strm_frm , struct quic_frame , stream );
233232 offset = strm_frm -> offset .key ;
234- len = strm_frm -> len ;
235- fin = frm -> type & QUIC_STREAM_FRAME_TYPE_FIN_BIT ;
236233
237234 if (offset > stream -> ack_offset )
238235 break ;
@@ -241,13 +238,13 @@ static int quic_stream_try_to_consume(struct quic_conn *qc,
241238 * stream_buf instance is removed via qc_stream_desc_ack().
242239 */
243240 eb64_delete (frm_node );
244- qc_release_frm (qc , frm );
245241
246- if (qc_stream_desc_ack (stream , offset , len , fin )) {
242+ if (qc_stream_desc_ack (stream , frm )) {
247243 TRACE_DEVEL ("stream consumed" , QUIC_EV_CONN_ACKSTRM ,
248244 qc , strm_frm , stream );
249245 ret = 1 ;
250246 }
247+ qc_release_frm (qc , frm );
251248
252249 /* Always retrieve first buffer as the previously used
253250 * instance could have been removed during qc_stream_desc_ack().
@@ -284,9 +281,6 @@ static void qc_handle_newly_acked_frm(struct quic_conn *qc, struct quic_frame *f
284281 struct qf_stream * strm_frm = & frm -> stream ;
285282 struct eb64_node * node = NULL ;
286283 struct qc_stream_desc * stream = NULL ;
287- const size_t offset = strm_frm -> offset .key ;
288- const size_t len = strm_frm -> len ;
289- const int fin = frm -> type & QUIC_STREAM_FRAME_TYPE_FIN_BIT ;
290284 int ack ;
291285
292286 /* do not use strm_frm->stream as the qc_stream_desc instance
@@ -306,31 +300,24 @@ static void qc_handle_newly_acked_frm(struct quic_conn *qc, struct quic_frame *f
306300 stream = eb64_entry (node , struct qc_stream_desc , by_id );
307301
308302 TRACE_DEVEL ("acked stream" , QUIC_EV_CONN_ACKSTRM , qc , strm_frm , stream );
309- if (offset <= stream -> ack_offset ) {
310- ack = qc_stream_desc_ack (stream , offset , len , fin );
311- if (ack || fin ) {
312- TRACE_DEVEL ("stream consumed" , QUIC_EV_CONN_ACKSTRM ,
313- qc , strm_frm , stream );
303+ ack = qc_stream_desc_ack (stream , frm );
304+ if (!ack ) {
305+ TRACE_DEVEL ("stream consumed" , QUIC_EV_CONN_ACKSTRM ,
306+ qc , strm_frm , stream );
314307
315- quic_stream_try_to_consume (qc , stream );
308+ quic_stream_try_to_consume (qc , stream );
316309
317- if (qc_stream_desc_done (stream )) {
318- /* no need to continue if stream freed. */
319- TRACE_DEVEL ("stream released and freed" , QUIC_EV_CONN_ACKSTRM , qc );
320- qc_check_close_on_released_mux (qc );
321- }
310+ if (qc_stream_desc_done (stream )) {
311+ /* no need to continue if stream freed. */
312+ TRACE_DEVEL ("stream released and freed" , QUIC_EV_CONN_ACKSTRM , qc );
313+ qc_check_close_on_released_mux (qc );
322314 }
323315
324316 qc_release_frm (qc , frm );
325317 }
326318 else {
327- struct qc_stream_buf * stream_buf ;
328- struct eb64_node * buf_node ;
329-
330- buf_node = eb64_lookup_le (& stream -> buf_tree , offset );
331- BUG_ON (!buf_node );
332- stream_buf = eb64_entry (buf_node , struct qc_stream_buf , offset_node );
333- eb64_insert (& stream_buf -> acked_frms , & strm_frm -> offset );
319+ TRACE_DEVEL ("handled out-of-order stream ACK" , QUIC_EV_CONN_ACKSTRM ,
320+ qc , strm_frm , stream );
334321 }
335322 }
336323 break ;
0 commit comments