Skip to content

Commit cff6a33

Browse files
tomratbertdavem330
authored andcommitted
strparser: Queue work when being unpaused
When the upper layer unpauses a stream parser connection we need to queue rx_work to make sure no events are missed. Signed-off-by: Tom Herbert <tom@herbertland.com> Signed-off-by: David S. Miller <davem@davemloft.net>
1 parent 3c90a94 commit cff6a33

2 files changed

Lines changed: 12 additions & 4 deletions

File tree

include/net/strparser.h

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -88,10 +88,7 @@ static inline void strp_pause(struct strparser *strp)
8888
}
8989

9090
/* May be called without holding lock for attached socket */
91-
static inline void strp_unpause(struct strparser *strp)
92-
{
93-
strp->rx_paused = 0;
94-
}
91+
void strp_unpause(struct strparser *strp);
9592

9693
static inline void save_strp_stats(struct strparser *strp,
9794
struct strp_aggr_stats *agg_stats)

net/strparser/strparser.c

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -445,6 +445,17 @@ int strp_init(struct strparser *strp, struct sock *csk,
445445
}
446446
EXPORT_SYMBOL_GPL(strp_init);
447447

448+
void strp_unpause(struct strparser *strp)
449+
{
450+
strp->rx_paused = 0;
451+
452+
/* Sync setting rx_paused with RX work */
453+
smp_mb();
454+
455+
queue_work(strp_wq, &strp->rx_work);
456+
}
457+
EXPORT_SYMBOL_GPL(strp_unpause);
458+
448459
/* strp must already be stopped so that strp_tcp_recv will no longer be called.
449460
* Note that strp_done is not called with the lower socket held.
450461
*/

0 commit comments

Comments
 (0)