-+ (verdict & NF_VERDICT_MASK) == NF_IMQ_QUEUE) {
- int err = nf_queue(skb, elem, state,
-- verdict >> NF_VERDICT_QBITS);
-+ verdict >> NF_VERDICT_QBITS,
-+ verdict & NF_VERDICT_MASK);
- if (err < 0) {
- if (err == -ECANCELED)
- goto next_hook;
-diff --git a/net/netfilter/nf_internals.h b/net/netfilter/nf_internals.h
-index 3992106..35cbc7b 100644
---- a/net/netfilter/nf_internals.h
-+++ b/net/netfilter/nf_internals.h
-@@ -18,7 +18,7 @@ unsigned int nf_iterate(struct list_head *head, struct sk_buff *skb,
-
- /* nf_queue.c */
- int nf_queue(struct sk_buff *skb, struct nf_hook_ops *elem,
-- struct nf_hook_state *state, unsigned int queuenum);
-+ struct nf_hook_state *state, unsigned int queuenum, unsigned int queuetype);
- void nf_queue_nf_hook_drop(struct nf_hook_ops *ops);
- int __init netfilter_queue_init(void);
-
++ (verdict & NF_VERDICT_MASK) == NF_IMQ_QUEUE) {
+ ret = nf_queue(skb, state, &entry, verdict);
++ if (ret == -ECANCELED)
++ goto next_hook;
+ if (ret == 1 && entry)
+ goto next_hook;
+ }