source: trunk/target/linux/generic-2.6/patches-2.6.29/151-netfilter_imq_2.6.28.patch @ 15251

Last change on this file since 15251 was 15251, checked in by nbd, 8 years ago

add generic 2.6.29 patches and config (squashfs still untested, user space mkfs still missing)

File size: 3.1 KB
  • drivers/net/imq.c

    a b static int imq_nf_queue(struct nf_queue_ 
    178178        struct sk_buff *skb2 = NULL; 
    179179        struct Qdisc *q; 
    180180        unsigned int index = entry->skb->imq_flags & IMQ_F_IFMASK; 
    181         int ret = -1; 
     181        struct netdev_queue *txq; 
     182        int ret = -EINVAL; 
    182183 
    183184        if (index > numdevs) 
    184                 return -1; 
     185                return ret; 
    185186 
    186187        /* check for imq device by index from cache */ 
    187188        dev = imq_devs_cache[index]; 
    static int imq_nf_queue(struct nf_queue_ 
    194195                if (!dev) { 
    195196                        /* not found ?!*/ 
    196197                        BUG(); 
    197                         return -1; 
     198                        return ret; 
    198199                } 
    199200 
    200201                imq_devs_cache[index] = dev; 
    static int imq_nf_queue(struct nf_queue_ 
    212213                skb2 = entry->skb; 
    213214                entry->skb = skb_clone(entry->skb, GFP_ATOMIC); 
    214215                if (!entry->skb) 
    215                         return -1; 
     216                        return -ENOMEM; 
    216217        } 
    217218        entry->skb->nf_queue_entry = entry; 
    218219 
    219220        dev->stats.rx_bytes += entry->skb->len; 
    220221        dev->stats.rx_packets++; 
    221222 
    222         spin_lock_bh(&dev->queue_lock); 
    223         q = dev->qdisc; 
     223        txq = netdev_get_tx_queue(dev, 0); 
     224        __netif_tx_lock_bh(txq); 
     225        q = txq->qdisc; 
     226 
    224227        if (q->enqueue) { 
    225                 q->enqueue(skb_get(entry->skb), q); 
     228                qdisc_enqueue_root(skb_get(entry->skb), q); 
    226229                if (skb_shared(entry->skb)) { 
    227230                        entry->skb->destructor = imq_skb_destructor; 
    228231                        kfree_skb(entry->skb); 
    static int imq_nf_queue(struct nf_queue_ 
    231234        } 
    232235        if (!test_and_set_bit(1, &priv->tasklet_pending)) 
    233236                tasklet_schedule(&priv->tasklet); 
    234         spin_unlock_bh(&dev->queue_lock); 
     237        __netif_tx_unlock_bh(txq); 
    235238 
    236239        if (skb2) 
    237240                kfree_skb(ret ? entry->skb : skb2); 
    static void qdisc_run_tasklet(unsigned l 
    248251{ 
    249252        struct net_device *dev = (struct net_device *)arg; 
    250253        struct imq_private *priv = netdev_priv(dev); 
     254        struct netdev_queue *txq; 
    251255 
    252         spin_lock(&dev->queue_lock); 
    253         qdisc_run(dev); 
     256        netif_tx_lock(dev); 
     257        txq = netdev_get_tx_queue(dev, 0); 
     258        qdisc_run(txq->qdisc); 
    254259        clear_bit(1, &priv->tasklet_pending); 
    255         spin_unlock(&dev->queue_lock); 
     260        netif_tx_unlock(dev); 
    256261} 
    257262 
    258263static unsigned int imq_nf_hook(unsigned int hook, struct sk_buff *pskb, 
  • net/ipv4/netfilter/ipt_IMQ.c

    a b  
    77#include <linux/netfilter_ipv4/ipt_IMQ.h> 
    88#include <linux/imq.h> 
    99 
    10 static unsigned int imq_target(struct sk_buff *pskb, 
    11                                const struct net_device *in, 
    12                                const struct net_device *out, 
    13                                unsigned int hooknum, 
    14                                const struct xt_target *target, 
    15                                const void *targinfo) 
     10static unsigned int 
     11imq_target(struct sk_buff *pskb, 
     12           const struct xt_target_param *par) 
    1613{ 
    17         struct ipt_imq_info *mr = (struct ipt_imq_info *)targinfo; 
     14        struct ipt_imq_info *mr = (struct ipt_imq_info *)par->targinfo; 
    1815 
    1916        pskb->imq_flags = mr->todev | IMQ_F_ENQUEUE; 
    2017 
    2118        return XT_CONTINUE; 
    2219} 
    2320 
    24 static bool imq_checkentry(const char *tablename, 
    25                           const void *e, 
    26                           const struct xt_target *target, 
    27                           void *targinfo, 
    28                           unsigned int hook_mask) 
     21static bool 
     22imq_checkentry(const struct xt_tgchk_param *par) 
    2923{ 
    3024        struct ipt_imq_info *mr; 
    3125 
    32         mr = (struct ipt_imq_info *)targinfo; 
     26        mr = (struct ipt_imq_info *)par->targinfo; 
    3327 
    3428        if (mr->todev > IMQ_MAX_DEVS) { 
    3529                printk(KERN_WARNING 
Note: See TracBrowser for help on using the repository browser.