disclaimer: I'm not looking at the code now.. I want to go to bed: :-)
When I wrote that code, the idea was that even a direct node execution
should become a queuing operation if there was already something else
on the queue. so in that model packets were not supposed to get
re-ordered. does that not still work?
Either that, or you need to explain the problem to me a bit better..
On 4/10/14, 5:25 AM, Karim Fodil-Lemelin wrote:
Hi,
Below is a revised patch for this issue. It accounts for nodes or
hooks that explicitly need to be queuing:
@@ -3632,7 +3632,12 @@ ng_callout(struct callout *c, node_p node,
hook_p hook, int ticks,
if ((item = ng_alloc_item(NGQF_FN, NG_NOFLAGS)) == NULL)
return (ENOMEM);
- item->el_flags |= NGQF_WRITER;
+ if ((node->nd_flags & NGF_FORCE_WRITER) ||
+ (hook && (hook->hk_flags & HK_FORCE_WRITER)))
+ item->el_flags |= NGQF_WRITER;
+ else
+ item->el_flags |= NGQF_READER;
+
NG_NODE_REF(node); /* and one for the item */
NGI_SET_NODE(item, node);
if (hook) {
Regards,
Karim.
On 09/04/2014 3:16 PM, Karim Fodil-Lemelin wrote:
Hi List,
I'm calling out to the general wisdom ... I have seen an issue in
netgraph where, if called, a callout routine registered by
ng_callout() will trigger packet queuing inside the worklist of
netgraph since ng_callout() makes my node suddenly a WRITER node
(therefore non reentrant) for the duration of the call.
So as soon as the callout function returns, all following packets
will get directly passed to the node again and when the ngintr
thread gets executed then only then will I get the queued packets.
This introduces out of order packets in the flow. I am using the
current patch below to solve the issue and I am wondering if there
is anything wrong with it (and maybe contribute back :):
@@ -3632,7 +3632,7 @@ ng_callout(struct callout *c, node_p node,
hook_p hook, int ticks,
if ((item = ng_alloc_item(NGQF_FN, NG_NOFLAGS)) == NULL)
return (ENOMEM);
- item->el_flags |= NGQF_WRITER;
+ item->el_flags = NGQF_READER;
NG_NODE_REF(node); /* and one for the item */
NGI_SET_NODE(item, node);
if (hook) {
Best regards,
Karim.
_______________________________________________
freebsd-net@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-net
To unsubscribe, send any mail to "freebsd-net-unsubscr...@freebsd.org"
_______________________________________________
freebsd-net@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-net
To unsubscribe, send any mail to "freebsd-net-unsubscr...@freebsd.org"
_______________________________________________
freebsd-net@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-net
To unsubscribe, send any mail to "freebsd-net-unsubscr...@freebsd.org"