diff options
| author | Greg Kroah-Hartman <greg@kroah.com> | 2003-04-29 22:56:05 -0700 |
|---|---|---|
| committer | Greg Kroah-Hartman <greg@kroah.com> | 2003-04-29 22:56:05 -0700 |
| commit | 7d5ab07dc7972ef5eb257864c422430c8b3df0bc (patch) | |
| tree | a0d36078e981cef69e789aac045b94fffd13174f /net | |
| parent | 25da53aa4497ccf38d2f17c9c28ca02583ddbe37 (diff) | |
| parent | 4ede0350ba7bc8682ceae0d256d8d8d5d244aecf (diff) | |
Merge kroah.com:/home/linux/linux/BK/bleed-2.5
into kroah.com:/home/linux/linux/BK/gregkh-2.5
Diffstat (limited to 'net')
| -rw-r--r-- | net/802/psnap.c | 32 | ||||
| -rw-r--r-- | net/bridge/br_fdb.c | 113 | ||||
| -rw-r--r-- | net/bridge/br_private.h | 5 | ||||
| -rw-r--r-- | net/core/netfilter.c | 9 | ||||
| -rw-r--r-- | net/core/skbuff.c | 75 | ||||
| -rw-r--r-- | net/core/sysctl_net_core.c | 9 | ||||
| -rw-r--r-- | net/ipv4/ip_output.c | 4 | ||||
| -rw-r--r-- | net/ipv4/ipip.c | 4 | ||||
| -rw-r--r-- | net/llc/af_llc.c | 141 | ||||
| -rw-r--r-- | net/llc/llc_actn.c | 2 | ||||
| -rw-r--r-- | net/llc/llc_c_ac.c | 55 | ||||
| -rw-r--r-- | net/llc/llc_c_ev.c | 56 | ||||
| -rw-r--r-- | net/llc/llc_c_st.c | 2 | ||||
| -rw-r--r-- | net/llc/llc_conn.c | 27 | ||||
| -rw-r--r-- | net/llc/llc_evnt.c | 2 | ||||
| -rw-r--r-- | net/llc/llc_if.c | 2 | ||||
| -rw-r--r-- | net/llc/llc_mac.c | 67 | ||||
| -rw-r--r-- | net/llc/llc_main.c | 4 | ||||
| -rw-r--r-- | net/llc/llc_pdu.c | 72 | ||||
| -rw-r--r-- | net/llc/llc_proc.c | 2 | ||||
| -rw-r--r-- | net/llc/llc_s_ac.c | 2 | ||||
| -rw-r--r-- | net/llc/llc_s_ev.c | 2 | ||||
| -rw-r--r-- | net/llc/llc_s_st.c | 2 | ||||
| -rw-r--r-- | net/llc/llc_sap.c | 2 | ||||
| -rw-r--r-- | net/llc/llc_stat.c | 2 | ||||
| -rw-r--r-- | net/sched/cls_api.c | 34 | ||||
| -rw-r--r-- | net/sched/cls_fw.c | 3 | ||||
| -rw-r--r-- | net/sched/cls_u32.c | 10 | ||||
| -rw-r--r-- | net/sched/sch_api.c | 16 | ||||
| -rw-r--r-- | net/sched/sch_ingress.c | 18 |
30 files changed, 346 insertions, 428 deletions
diff --git a/net/802/psnap.c b/net/802/psnap.c index aa4588c1fab2..c689454484b1 100644 --- a/net/802/psnap.c +++ b/net/802/psnap.c @@ -21,9 +21,9 @@ #include <linux/mm.h> #include <linux/in.h> #include <linux/init.h> -#include <linux/brlock.h> -LIST_HEAD(snap_list); +static LIST_HEAD(snap_list); +static spinlock_t snap_lock = SPIN_LOCK_UNLOCKED; static struct llc_sap *snap_sap; /* @@ -34,17 +34,13 @@ static struct datalink_proto *find_snap_client(unsigned char *desc) struct list_head *entry; struct datalink_proto *proto = NULL, *p; - if (list_empty(&snap_list)) - goto out; - - list_for_each(entry, &snap_list) { + list_for_each_rcu(entry, &snap_list) { p = list_entry(entry, struct datalink_proto, node); if (!memcmp(p->type, desc, 5)) { proto = p; break; } } -out: return proto; } @@ -55,11 +51,13 @@ static int snap_rcv(struct sk_buff *skb, struct net_device *dev, struct packet_type *pt) { int rc = 1; - struct datalink_proto *proto = find_snap_client(skb->h.raw); + struct datalink_proto *proto; static struct packet_type snap_packet_type = { .type = __constant_htons(ETH_P_SNAP), }; + rcu_read_lock(); + proto = find_snap_client(skb->h.raw); if (proto) { /* Pass the frame on. */ skb->h.raw += 5; @@ -71,6 +69,7 @@ static int snap_rcv(struct sk_buff *skb, struct net_device *dev, rc = 1; } + rcu_read_unlock(); return rc; } @@ -124,7 +123,7 @@ struct datalink_proto *register_snap_client(unsigned char *desc, { struct datalink_proto *proto = NULL; - br_write_lock_bh(BR_NETPROTO_LOCK); + spin_lock_bh(&snap_lock); if (find_snap_client(desc)) goto out; @@ -135,10 +134,12 @@ struct datalink_proto *register_snap_client(unsigned char *desc, proto->rcvfunc = rcvfunc; proto->header_length = 5 + 3; /* snap + 802.2 */ proto->request = snap_request; - list_add(&proto->node, &snap_list); + list_add_rcu(&proto->node, &snap_list); } out: - br_write_unlock_bh(BR_NETPROTO_LOCK); + spin_unlock_bh(&snap_lock); + + synchronize_net(); return proto; } @@ -147,12 +148,13 @@ out: */ void unregister_snap_client(struct datalink_proto *proto) { - br_write_lock_bh(BR_NETPROTO_LOCK); + spin_lock_bh(&snap_lock); + list_del_rcu(&proto->node); + spin_unlock_bh(&snap_lock); - list_del(&proto->node); - kfree(proto); + synchronize_net(); - br_write_unlock_bh(BR_NETPROTO_LOCK); + kfree(proto); } MODULE_LICENSE("GPL"); diff --git a/net/bridge/br_fdb.c b/net/bridge/br_fdb.c index 78d587584620..fc26712d2149 100644 --- a/net/bridge/br_fdb.c +++ b/net/bridge/br_fdb.c @@ -68,28 +68,6 @@ static __inline__ int br_mac_hash(unsigned char *mac) return x & (BR_HASH_SIZE - 1); } -static __inline__ void __hash_link(struct net_bridge *br, - struct net_bridge_fdb_entry *ent, - int hash) -{ - ent->next_hash = br->hash[hash]; - if (ent->next_hash != NULL) - ent->next_hash->pprev_hash = &ent->next_hash; - br->hash[hash] = ent; - ent->pprev_hash = &br->hash[hash]; -} - -static __inline__ void __hash_unlink(struct net_bridge_fdb_entry *ent) -{ - *(ent->pprev_hash) = ent->next_hash; - if (ent->next_hash != NULL) - ent->next_hash->pprev_hash = ent->pprev_hash; - ent->next_hash = NULL; - ent->pprev_hash = NULL; -} - - - void br_fdb_changeaddr(struct net_bridge_port *p, unsigned char *newaddr) { struct net_bridge *br; @@ -99,22 +77,24 @@ void br_fdb_changeaddr(struct net_bridge_port *p, unsigned char *newaddr) br = p->br; write_lock_bh(&br->hash_lock); for (i=0;i<BR_HASH_SIZE;i++) { - struct net_bridge_fdb_entry *f; + struct hlist_node *h; + + hlist_for_each(h, &br->hash[i]) { + struct net_bridge_fdb_entry *f + = hlist_entry(h, struct net_bridge_fdb_entry, hlist); - f = br->hash[i]; - while (f != NULL) { if (f->dst == p && f->is_local) { memcpy(f->addr.addr, newaddr, ETH_ALEN); if (newhash != i) { - __hash_unlink(f); - __hash_link(br, f, newhash); + hlist_del(&f->hlist); + hlist_add_head(&f->hlist, + &br->hash[newhash]); } - write_unlock_bh(&br->hash_lock); - return; + goto out; } - f = f->next_hash; } } + out: write_unlock_bh(&br->hash_lock); } @@ -127,19 +107,16 @@ void br_fdb_cleanup(struct net_bridge *br) write_lock_bh(&br->hash_lock); for (i=0;i<BR_HASH_SIZE;i++) { - struct net_bridge_fdb_entry *f; - - f = br->hash[i]; - while (f != NULL) { - struct net_bridge_fdb_entry *g; - - g = f->next_hash; + struct hlist_node *h, *g; + + hlist_for_each_safe(h, g, &br->hash[i]) { + struct net_bridge_fdb_entry *f + = hlist_entry(h, struct net_bridge_fdb_entry, hlist); if (!f->is_static && time_before_eq(f->ageing_timer, timeout)) { - __hash_unlink(f); + hlist_del(&f->hlist); br_fdb_put(f); } - f = g; } } write_unlock_bh(&br->hash_lock); @@ -151,18 +128,15 @@ void br_fdb_delete_by_port(struct net_bridge *br, struct net_bridge_port *p) write_lock_bh(&br->hash_lock); for (i=0;i<BR_HASH_SIZE;i++) { - struct net_bridge_fdb_entry *f; - - f = br->hash[i]; - while (f != NULL) { - struct net_bridge_fdb_entry *g; - - g = f->next_hash; + struct hlist_node *h, *g; + + hlist_for_each_safe(h, g, &br->hash[i]) { + struct net_bridge_fdb_entry *f + = hlist_entry(h, struct net_bridge_fdb_entry, hlist); if (f->dst == p) { - __hash_unlink(f); + hlist_del(&f->hlist); br_fdb_put(f); } - f = g; } } write_unlock_bh(&br->hash_lock); @@ -170,25 +144,24 @@ void br_fdb_delete_by_port(struct net_bridge *br, struct net_bridge_port *p) struct net_bridge_fdb_entry *br_fdb_get(struct net_bridge *br, unsigned char *addr) { - struct net_bridge_fdb_entry *fdb; + struct hlist_node *h; read_lock_bh(&br->hash_lock); - fdb = br->hash[br_mac_hash(addr)]; - while (fdb != NULL) { + + hlist_for_each(h, &br->hash[br_mac_hash(addr)]) { + struct net_bridge_fdb_entry *fdb + = hlist_entry(h, struct net_bridge_fdb_entry, hlist); + if (!memcmp(fdb->addr.addr, addr, ETH_ALEN)) { - if (!has_expired(br, fdb)) { - atomic_inc(&fdb->use_count); - read_unlock_bh(&br->hash_lock); - return fdb; - } + if (has_expired(br, fdb)) + goto ret_null; + atomic_inc(&fdb->use_count); read_unlock_bh(&br->hash_lock); - return NULL; + return fdb; } - - fdb = fdb->next_hash; } - + ret_null: read_unlock_bh(&br->hash_lock); return NULL; } @@ -213,12 +186,16 @@ int br_fdb_get_entries(struct net_bridge *br, read_lock_bh(&br->hash_lock); for (i=0;i<BR_HASH_SIZE;i++) { - struct net_bridge_fdb_entry *f; - - for (f = br->hash[i]; f != NULL && num < maxnum; - f = f->next_hash) { + struct hlist_node *h; + + hlist_for_each(h, &br->hash[i]) { + struct net_bridge_fdb_entry *f + = hlist_entry(h, struct net_bridge_fdb_entry, hlist); struct __fdb_entry ent; + if (num >= maxnum) + goto out; + if (has_expired(br, f)) continue; @@ -277,14 +254,15 @@ void br_fdb_insert(struct net_bridge *br, unsigned char *addr, int is_local) { + struct hlist_node *h; struct net_bridge_fdb_entry *fdb; int hash; hash = br_mac_hash(addr); write_lock_bh(&br->hash_lock); - fdb = br->hash[hash]; - while (fdb != NULL) { + hlist_for_each(h, &br->hash[hash]) { + fdb = hlist_entry(h, struct net_bridge_fdb_entry, hlist); if (!fdb->is_local && !memcmp(fdb->addr.addr, addr, ETH_ALEN)) { __fdb_possibly_replace(fdb, source, is_local); @@ -292,7 +270,6 @@ void br_fdb_insert(struct net_bridge *br, return; } - fdb = fdb->next_hash; } fdb = kmalloc(sizeof(*fdb), GFP_ATOMIC); @@ -308,7 +285,7 @@ void br_fdb_insert(struct net_bridge *br, fdb->is_static = is_local; fdb->ageing_timer = jiffies; - __hash_link(br, fdb, hash); + hlist_add_head(&fdb->hlist, &br->hash[hash]); write_unlock_bh(&br->hash_lock); } diff --git a/net/bridge/br_private.h b/net/bridge/br_private.h index aff11add0268..5ddd034fa0fe 100644 --- a/net/bridge/br_private.h +++ b/net/bridge/br_private.h @@ -43,8 +43,7 @@ struct mac_addr struct net_bridge_fdb_entry { - struct net_bridge_fdb_entry *next_hash; - struct net_bridge_fdb_entry **pprev_hash; + struct hlist_node hlist; atomic_t use_count; mac_addr addr; struct net_bridge_port *dst; @@ -86,7 +85,7 @@ struct net_bridge struct net_device dev; struct net_device_stats statistics; rwlock_t hash_lock; - struct net_bridge_fdb_entry *hash[BR_HASH_SIZE]; + struct hlist_head hash[BR_HASH_SIZE]; struct timer_list tick; /* STP */ diff --git a/net/core/netfilter.c b/net/core/netfilter.c index 1ef2cf1b71e3..432157079ff4 100644 --- a/net/core/netfilter.c +++ b/net/core/netfilter.c @@ -550,6 +550,7 @@ void nf_reinject(struct sk_buff *skb, struct nf_info *info, unsigned int verdict) { struct list_head *elem = &info->elem->list; + struct list_head *i; rcu_read_lock(); @@ -592,10 +593,6 @@ void nf_reinject(struct sk_buff *skb, struct nf_info *info, info->indev, info->outdev, info->okfn)) goto next_hook; break; - - case NF_DROP: - kfree_skb(skb); - break; } rcu_read_unlock(); @@ -611,6 +608,10 @@ void nf_reinject(struct sk_buff *skb, struct nf_info *info, } #endif + + if (verdict == NF_DROP) + kfree_skb(skb); + kfree(info); return; } diff --git a/net/core/skbuff.c b/net/core/skbuff.c index bb68b12b0047..c6d5e32b6a5b 100644 --- a/net/core/skbuff.c +++ b/net/core/skbuff.c @@ -20,6 +20,7 @@ * Ray VanTassle : Fixed --skb->lock in free * Alan Cox : skb_copy copy arp field * Andi Kleen : slabified it. + * Robert Olsson : Removed skb_head_pool * * NOTE: * The __skb_ routines should be called with interrupts @@ -63,15 +64,8 @@ #include <asm/uaccess.h> #include <asm/system.h> -int sysctl_hot_list_len = 128; - static kmem_cache_t *skbuff_head_cache; -static union { - struct sk_buff_head list; - char pad[SMP_CACHE_BYTES]; -} skb_head_pool[NR_CPUS]; - /* * Keep out-of-line to prevent kernel bloat. * __builtin_return_address is not used because it is not always @@ -109,44 +103,6 @@ void skb_under_panic(struct sk_buff *skb, int sz, void *here) BUG(); } -static __inline__ struct sk_buff *skb_head_from_pool(void) -{ - struct sk_buff_head *list; - struct sk_buff *skb = NULL; - unsigned long flags; - - local_irq_save(flags); - - list = &skb_head_pool[smp_processor_id()].list; - - if (skb_queue_len(list)) - skb = __skb_dequeue(list); - - local_irq_restore(flags); - return skb; -} - -static __inline__ void skb_head_to_pool(struct sk_buff *skb) -{ - struct sk_buff_head *list; - unsigned long flags; - - local_irq_save(flags); - - list = &skb_head_pool[smp_processor_id()].list; - - if (skb_queue_len(list) < sysctl_hot_list_len) { - __skb_queue_head(list, skb); - local_irq_restore(flags); - - return; - } - - local_irq_restore(flags); - kmem_cache_free(skbuff_head_cache, skb); -} - - /* Allocate a new skbuff. We do this ourselves so we can fill in a few * 'private' fields and also do memory statistics to find all the * [BEEP] leaks. @@ -174,13 +130,10 @@ struct sk_buff *alloc_skb(unsigned int size, int gfp_mask) might_sleep(); /* Get the HEAD */ - skb = skb_head_from_pool(); - if (!skb) { - skb = kmem_cache_alloc(skbuff_head_cache, - gfp_mask & ~__GFP_DMA); - if (!skb) - goto out; - } + skb = kmem_cache_alloc(skbuff_head_cache, + gfp_mask & ~__GFP_DMA); + if (!skb) + goto out; /* Get the DATA. Size must match skb_add_mtu(). */ size = SKB_DATA_ALIGN(size); @@ -204,7 +157,7 @@ struct sk_buff *alloc_skb(unsigned int size, int gfp_mask) out: return skb; nodata: - skb_head_to_pool(skb); + kmem_cache_free(skbuff_head_cache, skb); skb = NULL; goto out; } @@ -254,7 +207,7 @@ static void skb_release_data(struct sk_buff *skb) void kfree_skbmem(struct sk_buff *skb) { skb_release_data(skb); - skb_head_to_pool(skb); + kmem_cache_free(skbuff_head_cache, skb); } /** @@ -309,13 +262,10 @@ void __kfree_skb(struct sk_buff *skb) struct sk_buff *skb_clone(struct sk_buff *skb, int gfp_mask) { - struct sk_buff *n = skb_head_from_pool(); + struct sk_buff *n = kmem_cache_alloc(skbuff_head_cache, gfp_mask); - if (!n) { - n = kmem_cache_alloc(skbuff_head_cache, gfp_mask); - if (!n) - return NULL; - } + if (!n) + return NULL; #define C(x) n->x = skb->x @@ -1204,8 +1154,6 @@ void skb_add_mtu(int mtu) void __init skb_init(void) { - int i; - skbuff_head_cache = kmem_cache_create("skbuff_head_cache", sizeof(struct sk_buff), 0, @@ -1213,7 +1161,4 @@ void __init skb_init(void) NULL, NULL); if (!skbuff_head_cache) panic("cannot create skbuff cache"); - - for (i = 0; i < NR_CPUS; i++) - skb_queue_head_init(&skb_head_pool[i].list); } diff --git a/net/core/sysctl_net_core.c b/net/core/sysctl_net_core.c index bbf8e7d82b62..3e38ed82429b 100644 --- a/net/core/sysctl_net_core.c +++ b/net/core/sysctl_net_core.c @@ -28,7 +28,6 @@ extern __u32 sysctl_rmem_default; extern int sysctl_core_destroy_delay; extern int sysctl_optmem_max; -extern int sysctl_hot_list_len; #ifdef CONFIG_NET_DIVERT extern char sysctl_divert_version[]; @@ -150,14 +149,6 @@ ctl_table core_table[] = { .mode = 0644, .proc_handler = &proc_dointvec }, - { - .ctl_name = NET_CORE_HOT_LIST_LENGTH, - .procname = "hot_list_length", - .data = &sysctl_hot_list_len, - .maxlen = sizeof(int), - .mode = 0644, - .proc_handler = &proc_dointvec - }, #ifdef CONFIG_NET_DIVERT { .ctl_name = NET_CORE_DIVERT_VERSION, diff --git a/net/ipv4/ip_output.c b/net/ipv4/ip_output.c index 98e7caad4b49..302eac537f30 100644 --- a/net/ipv4/ip_output.c +++ b/net/ipv4/ip_output.c @@ -263,7 +263,7 @@ int ip_mc_output(struct sk_buff *skb) newskb->dev, ip_dev_loopback_xmit); } - if (skb->len > dev->mtu || skb_shinfo(skb)->frag_list) + if (skb->len > dst_pmtu(&rt->u.dst) || skb_shinfo(skb)->frag_list) return ip_fragment(skb, ip_finish_output); else return ip_finish_output(skb); @@ -273,7 +273,7 @@ int ip_output(struct sk_buff *skb) { IP_INC_STATS(IpOutRequests); - if ((skb->len > skb->dst->dev->mtu || skb_shinfo(skb)->frag_list) && + if ((skb->len > dst_pmtu(skb->dst) || skb_shinfo(skb)->frag_list) && !skb_shinfo(skb)->tso_size) return ip_fragment(skb, ip_finish_output); else diff --git a/net/ipv4/ipip.c b/net/ipv4/ipip.c index be61533ccf93..0571696c7cc6 100644 --- a/net/ipv4/ipip.c +++ b/net/ipv4/ipip.c @@ -433,7 +433,7 @@ out: fl.fl4_src = eiph->saddr; fl.fl4_tos = eiph->tos; if (ip_route_output_key(&rt, &fl) || - rt->u.dst.dev->type != ARPHRD_IPGRE) { + rt->u.dst.dev->type != ARPHRD_TUNNEL) { ip_rt_put(rt); kfree_skb(skb2); return; @@ -441,7 +441,7 @@ out: } else { ip_rt_put(rt); if (ip_route_input(skb2, eiph->daddr, eiph->saddr, eiph->tos, skb2->dev) || - skb2->dst->dev->type != ARPHRD_IPGRE) { + skb2->dst->dev->type != ARPHRD_TUNNEL) { kfree_skb(skb2); return; } diff --git a/net/llc/af_llc.c b/net/llc/af_llc.c index 241b7bca8fca..776b4378c75f 100644 --- a/net/llc/af_llc.c +++ b/net/llc/af_llc.c @@ -11,7 +11,7 @@ * connections. * * Copyright (c) 2001 by Jay Schulist <jschlst@samba.org> - * 2002 by Arnaldo Carvalho de Melo <acme@conectiva.com.br> + * 2002-2003 by Arnaldo Carvalho de Melo <acme@conectiva.com.br> * * This program can be redistributed or modified under the terms of the * GNU General Public License as published by the Free Software Foundation. @@ -623,7 +623,8 @@ static int llc_ui_accept(struct socket *sock, struct socket *newsock, int flags) struct sk_buff *skb; int rc = -EOPNOTSUPP; - dprintk("%s: accepting on %02X\n", __FUNCTION__, llc_sk(sk)->addr.sllc_ssap); + dprintk("%s: accepting on %02X\n", __FUNCTION__, + llc_sk(sk)->addr.sllc_ssap); lock_sock(sk); if (sk->type != SOCK_STREAM) goto out; @@ -634,7 +635,8 @@ static int llc_ui_accept(struct socket *sock, struct socket *newsock, int flags) rc = llc_ui_wait_for_data(sk, sk->rcvtimeo); if (rc) goto out; - dprintk("%s: got a new connection on %02X\n", __FUNCTION__, llc_sk(sk)->addr.sllc_ssap); + dprintk("%s: got a new connection on %02X\n", __FUNCTION__, + llc_sk(sk)->addr.sllc_ssap); skb = skb_dequeue(&sk->receive_queue); rc = -EINVAL; if (!skb->sk) @@ -692,8 +694,9 @@ static int llc_ui_recvmsg(struct kiocb *iocb, struct socket *sock, timeout = sock_rcvtimeo(sk, noblock); rc = llc_ui_wait_for_data(sk, timeout); if (rc) { - dprintk("%s: llc_ui_wait_for_data failed recv in %02X from %02X\n", - __FUNCTION__, llc_sk(sk)->laddr.lsap, llc_sk(sk)->daddr.lsap); + dprintk("%s: llc_ui_wait_for_data failed recv " + "in %02X from %02X\n", __FUNCTION__, + llc_sk(sk)->laddr.lsap, llc_sk(sk)->daddr.lsap); goto out; } skb = skb_dequeue(&sk->receive_queue); @@ -742,7 +745,8 @@ static int llc_ui_sendmsg(struct kiocb *iocb, struct socket *sock, struct sk_buff *skb; int rc = -EINVAL, size = 0, copied = 0, hdrlen; - dprintk("%s: sending from %02X to %02X\n", __FUNCTION__, llc->laddr.lsap, llc->daddr.lsap); + dprintk("%s: sending from %02X to %02X\n", __FUNCTION__, + llc->laddr.lsap, llc->daddr.lsap); lock_sock(sk); if (addr) { if (msg->msg_namelen < sizeof(*addr)) @@ -906,49 +910,49 @@ static int llc_ui_setsockopt(struct socket *sock, int level, int optname, goto out; rc = -EINVAL; switch (optname) { - case LLC_OPT_RETRY: - if (opt > LLC_OPT_MAX_RETRY) - goto out; - llc->n2 = opt; - break; - case LLC_OPT_SIZE: - if (opt > LLC_OPT_MAX_SIZE) - goto out; - llc->n1 = opt; - break; - case LLC_OPT_ACK_TMR_EXP: - if (opt > LLC_OPT_MAX_ACK_TMR_EXP) - goto out; - llc->ack_timer.expire = opt; - break; - case LLC_OPT_P_TMR_EXP: - if (opt > LLC_OPT_MAX_P_TMR_EXP) - goto out; - llc->pf_cycle_timer.expire = opt; - break; - case LLC_OPT_REJ_TMR_EXP: - if (opt > LLC_OPT_MAX_REJ_TMR_EXP) - goto out; - llc->rej_sent_timer.expire = opt; - break; - case LLC_OPT_BUSY_TMR_EXP: - if (opt > LLC_OPT_MAX_BUSY_TMR_EXP) - goto out; - llc->busy_state_timer.expire = opt; - break; - case LLC_OPT_TX_WIN: - if (opt > LLC_OPT_MAX_WIN) - goto out; - llc->k = opt; - break; - case LLC_OPT_RX_WIN: - if (opt > LLC_OPT_MAX_WIN) - goto out; - llc->rw = opt; - break; - default: - rc = -ENOPROTOOPT; + case LLC_OPT_RETRY: + if (opt > LLC_OPT_MAX_RETRY) + goto out; + llc->n2 = opt; + break; + case LLC_OPT_SIZE: + if (opt > LLC_OPT_MAX_SIZE) + goto out; + llc->n1 = opt; + break; + case LLC_OPT_ACK_TMR_EXP: + if (opt > LLC_OPT_MAX_ACK_TMR_EXP) + goto out; + llc->ack_timer.expire = opt; + break; + case LLC_OPT_P_TMR_EXP: + if (opt > LLC_OPT_MAX_P_TMR_EXP) + goto out; + llc->pf_cycle_timer.expire = opt; + break; + case LLC_OPT_REJ_TMR_EXP: + if (opt > LLC_OPT_MAX_REJ_TMR_EXP) goto out; + llc->rej_sent_timer.expire = opt; + break; + case LLC_OPT_BUSY_TMR_EXP: + if (opt > LLC_OPT_MAX_BUSY_TMR_EXP) + goto out; + llc->busy_state_timer.expire = opt; + break; + case LLC_OPT_TX_WIN: + if (opt > LLC_OPT_MAX_WIN) + goto out; + llc->k = opt; + break; + case LLC_OPT_RX_WIN: + if (opt > LLC_OPT_MAX_WIN) + goto out; + llc->rw = opt; + break; + default: + rc = -ENOPROTOOPT; + goto out; } rc = 0; out: @@ -983,25 +987,25 @@ static int llc_ui_getsockopt(struct socket *sock, int level, int optname, if (len != sizeof(int)) goto out; switch (optname) { - case LLC_OPT_RETRY: - val = llc->n2; break; - case LLC_OPT_SIZE: - val = llc->n1; break; - case LLC_OPT_ACK_TMR_EXP: - val = llc->ack_timer.expire; break; - case LLC_OPT_P_TMR_EXP: - val = llc->pf_cycle_timer.expire; break; - case LLC_OPT_REJ_TMR_EXP: - val = llc->rej_sent_timer.expire; break; - case LLC_OPT_BUSY_TMR_EXP: - val = llc->busy_state_timer.expire; break; - case LLC_OPT_TX_WIN: - val = llc->k; break; - case LLC_OPT_RX_WIN: - val = llc->rw; break; - default: - rc = -ENOPROTOOPT; - goto out; + case LLC_OPT_RETRY: + val = llc->n2; break; + case LLC_OPT_SIZE: + val = llc->n1; break; + case LLC_OPT_ACK_TMR_EXP: + val = llc->ack_timer.expire; break; + case LLC_OPT_P_TMR_EXP: + val = llc->pf_cycle_timer.expire; break; + case LLC_OPT_REJ_TMR_EXP: + val = llc->rej_sent_timer.expire; break; + case LLC_OPT_BUSY_TMR_EXP: + val = llc->busy_state_timer.expire; break; + case LLC_OPT_TX_WIN: + val = llc->k; break; + case LLC_OPT_RX_WIN: + val = llc->rw; break; + default: + rc = -ENOPROTOOPT; + goto out; } rc = 0; if (put_user(len, optlen) || copy_to_user(optval, &val, len)) @@ -1038,7 +1042,8 @@ static struct proto_ops llc_ui_ops = { }; static char llc_ui_banner[] __initdata = - KERN_INFO "NET4.0 IEEE 802.2 BSD sockets, Jay Schulist, 2001, Arnaldo C. Melo, 2002\n"; + KERN_INFO "NET4.0 IEEE 802.2 BSD sockets, Jay Schulist, 2001, " + "Arnaldo C. Melo, 2002-2003\n"; int __init llc_ui_init(void) { diff --git a/net/llc/llc_actn.c b/net/llc/llc_actn.c index 07f144745113..b17943a5c222 100644 --- a/net/llc/llc_actn.c +++ b/net/llc/llc_actn.c @@ -8,7 +8,7 @@ * them return 0 On success and 1 otherwise. * * Copyright (c) 1997 by Procom Technology, Inc. - * 2001 by Arnaldo Carvalho de Melo <acme@conectiva.com.br> + * 2001-2003 by Arnaldo Carvalho de Melo <acme@conectiva.com.br> * * This program can be redistributed or modified under the terms of the * GNU General Public License as published by the Free Software Foundation. diff --git a/net/llc/llc_c_ac.c b/net/llc/llc_c_ac.c index 634bf598da72..fb559316cf4a 100644 --- a/net/llc/llc_c_ac.c +++ b/net/llc/llc_c_ac.c @@ -8,7 +8,7 @@ * them return 0 On success and 1 otherwise. * * Copyright (c) 1997 by Procom Technology, Inc. - * 2001 by Arnaldo Carvalho de Melo <acme@conectiva.com.br> + * 2001-2003 by Arnaldo Carvalho de Melo <acme@conectiva.com.br> * * This program can be redistributed or modified under the terms of the * GNU General Public License as published by the Free Software Foundation. @@ -145,33 +145,32 @@ int llc_conn_ac_rst_ind(struct sock *sk, struct sk_buff *skb) struct llc_opt *llc = llc_sk(sk); switch (ev->type) { - case LLC_CONN_EV_TYPE_PDU: - if (!LLC_PDU_IS_RSP(pdu) && - !LLC_PDU_TYPE_IS_U(pdu) && - LLC_U_PDU_RSP(pdu) == LLC_2_PDU_RSP_FRMR) { - reason = LLC_RESET_REASON_LOCAL; - rc = 0; - } else if (!LLC_PDU_IS_CMD(pdu) && - !LLC_PDU_TYPE_IS_U(pdu) && - LLC_U_PDU_CMD(pdu) == - LLC_2_PDU_CMD_SABME) { - reason = LLC_RESET_REASON_REMOTE; - rc = 0; - } else { - reason = 0; - rc = 1; - } - break; - case LLC_CONN_EV_TYPE_ACK_TMR: - case LLC_CONN_EV_TYPE_P_TMR: - case LLC_CONN_EV_TYPE_REJ_TMR: - case LLC_CONN_EV_TYPE_BUSY_TMR: - if (llc->retry_count > llc->n2) { - reason = LLC_RESET_REASON_LOCAL; - rc = 0; - } else - rc = 1; - break; + case LLC_CONN_EV_TYPE_PDU: + if (!LLC_PDU_IS_RSP(pdu) && + !LLC_PDU_TYPE_IS_U(pdu) && + LLC_U_PDU_RSP(pdu) == LLC_2_PDU_RSP_FRMR) { + reason = LLC_RESET_REASON_LOCAL; + rc = 0; + } else if (!LLC_PDU_IS_CMD(pdu) && + !LLC_PDU_TYPE_IS_U(pdu) && + LLC_U_PDU_CMD(pdu) == LLC_2_PDU_CMD_SABME) { + reason = LLC_RESET_REASON_REMOTE; + rc = 0; + } else { + reason = 0; + rc = 1; + } + break; + case LLC_CONN_EV_TYPE_ACK_TMR: + case LLC_CONN_EV_TYPE_P_TMR: + case LLC_CONN_EV_TYPE_REJ_TMR: + case LLC_CONN_EV_TYPE_BUSY_TMR: + if (llc->retry_count > llc->n2) { + reason = LLC_RESET_REASON_LOCAL; + rc = 0; + } else + rc = 1; + break; } if (!rc) { ev->reason = reason; diff --git a/net/llc/llc_c_ev.c b/net/llc/llc_c_ev.c index 85c1489b0a66..883e550afe24 100644 --- a/net/llc/llc_c_ev.c +++ b/net/llc/llc_c_ev.c @@ -24,7 +24,7 @@ * in their comments, at below. * * Copyright (c) 1997 by Procom Technology, Inc. - * 2001 by Arnaldo Carvalho de Melo <acme@conectiva.com.br> + * 2001-2003 by Arnaldo Carvalho de Melo <acme@conectiva.com.br> * * This program can be redistributed or modified under the terms of the * GNU General Public License as published by the Free Software Foundation. @@ -485,11 +485,11 @@ int llc_conn_ev_rx_xxx_cmd_pbit_set_0(struct sock *sk, struct sk_buff *skb) rc = 0; } else if (!LLC_PDU_TYPE_IS_U(pdu)) switch (LLC_U_PDU_CMD(pdu)) { - case LLC_2_PDU_CMD_SABME: - case LLC_2_PDU_CMD_DISC: - if (!LLC_U_PF_IS_0(pdu)) - rc = 0; - break; + case LLC_2_PDU_CMD_SABME: + case LLC_2_PDU_CMD_DISC: + if (!LLC_U_PF_IS_0(pdu)) + rc = 0; + break; } } return rc; @@ -505,10 +505,10 @@ int llc_conn_ev_rx_xxx_cmd_pbit_set_x(struct sock *sk, struct sk_buff *skb) rc = 0; else if (!LLC_PDU_TYPE_IS_U(pdu)) switch (LLC_U_PDU_CMD(pdu)) { - case LLC_2_PDU_CMD_SABME: - case LLC_2_PDU_CMD_DISC: - rc = 0; - break; + case LLC_2_PDU_CMD_SABME: + case LLC_2_PDU_CMD_DISC: + rc = 0; + break; } } return rc; @@ -525,12 +525,12 @@ int llc_conn_ev_rx_xxx_rsp_fbit_set_1(struct sock *sk, struct sk_buff *skb) rc = 0; } else if (!LLC_PDU_TYPE_IS_U(pdu)) switch (LLC_U_PDU_RSP(pdu)) { - case LLC_2_PDU_RSP_UA: - case LLC_2_PDU_RSP_DM: - case LLC_2_PDU_RSP_FRMR: - if (!LLC_U_PF_IS_1(pdu)) - rc = 0; - break; + case LLC_2_PDU_RSP_UA: + case LLC_2_PDU_RSP_DM: + case LLC_2_PDU_RSP_FRMR: + if (!LLC_U_PF_IS_1(pdu)) + rc = 0; + break; } } return rc; @@ -546,11 +546,11 @@ int llc_conn_ev_rx_xxx_rsp_fbit_set_x(struct sock *sk, struct sk_buff *skb) rc = 0; else if (!LLC_PDU_TYPE_IS_U(pdu)) switch (LLC_U_PDU_RSP(pdu)) { - case LLC_2_PDU_RSP_UA: - case LLC_2_PDU_RSP_DM: - case LLC_2_PDU_RSP_FRMR: - rc = 0; - break; + case LLC_2_PDU_RSP_UA: + case LLC_2_PDU_RSP_DM: + case LLC_2_PDU_RSP_FRMR: + rc = 0; + break; } } @@ -566,13 +566,13 @@ int llc_conn_ev_rx_xxx_yyy(struct sock *sk, struct sk_buff *skb) rc = 0; else if (!LLC_PDU_TYPE_IS_U(pdu)) switch (LLC_U_PDU_CMD(pdu)) { - case LLC_2_PDU_CMD_SABME: - case LLC_2_PDU_CMD_DISC: - case LLC_2_PDU_RSP_UA: - case LLC_2_PDU_RSP_DM: - case LLC_2_PDU_RSP_FRMR: - rc = 0; - break; + case LLC_2_PDU_CMD_SABME: + case LLC_2_PDU_CMD_DISC: + case LLC_2_PDU_RSP_UA: + case LLC_2_PDU_RSP_DM: + case LLC_2_PDU_RSP_FRMR: + rc = 0; + break; } return rc; } diff --git a/net/llc/llc_c_st.c b/net/llc/llc_c_st.c index f058df37981c..818a9428823b 100644 --- a/net/llc/llc_c_st.c +++ b/net/llc/llc_c_st.c @@ -5,7 +5,7 @@ * or in "llc_c_ac.c" and "llc_c_ev.c" modules. * * Copyright (c) 1997 by Procom Technology, Inc. - * 2001, 2002 by Arnaldo Carvalho de Melo <acme@conectiva.com.br> + * 2001-2003 by Arnaldo Carvalho de Melo <acme@conectiva.com.br> * * This program can be redistributed or modified under the terms of the * GNU General Public License as published by the Free Software Foundation. diff --git a/net/llc/llc_conn.c b/net/llc/llc_conn.c index 9859d2a2a46b..e2fa705c8f58 100644 --- a/net/llc/llc_conn.c +++ b/net/llc/llc_conn.c @@ -2,7 +2,7 @@ * llc_conn.c - Driver routines for connection component. * * Copyright (c) 1997 by Procom Technology, Inc. - * 2001 by Arnaldo Carvalho de Melo <acme@conectiva.com.br> + * 2001-2003 by Arnaldo Carvalho de Melo <acme@conectiva.com.br> * * This program can be redistributed or modified under the terms of the * GNU General Public License as published by the Free Software Foundation. @@ -84,7 +84,8 @@ int llc_conn_state_process(struct sock *sk, struct sk_buff *skb) goto out_kfree_skb; } - if (!ev->ind_prim && !ev->cfm_prim) { /* indicate or confirm not required */ + if (!ev->ind_prim && !ev->cfm_prim) { + /* indicate or confirm not required */ if (!skb->list) goto out_kfree_skb; goto out_skb_put; @@ -625,17 +626,17 @@ static int llc_find_offset(int state, int ev_type) * init_pf_cycle and I don't know what is it. */ switch (ev_type) { - case LLC_CONN_EV_TYPE_PRIM: - rc = llc_offset_table[state][0]; break; - case LLC_CONN_EV_TYPE_PDU: - rc = llc_offset_table[state][4]; break; - case LLC_CONN_EV_TYPE_SIMPLE: - rc = llc_offset_table[state][1]; break; - case LLC_CONN_EV_TYPE_P_TMR: - case LLC_CONN_EV_TYPE_ACK_TMR: - case LLC_CONN_EV_TYPE_REJ_TMR: - case LLC_CONN_EV_TYPE_BUSY_TMR: - rc = llc_offset_table[state][3]; break; + case LLC_CONN_EV_TYPE_PRIM: + rc = llc_offset_table[state][0]; break; + case LLC_CONN_EV_TYPE_PDU: + rc = llc_offset_table[state][4]; break; + case LLC_CONN_EV_TYPE_SIMPLE: + rc = llc_offset_table[state][1]; break; + case LLC_CONN_EV_TYPE_P_TMR: + case LLC_CONN_EV_TYPE_ACK_TMR: + case LLC_CONN_EV_TYPE_REJ_TMR: + case LLC_CONN_EV_TYPE_BUSY_TMR: + rc = llc_offset_table[state][3]; break; } return rc; } diff --git a/net/llc/llc_evnt.c b/net/llc/llc_evnt.c index 6cc65d502c44..654650f5a4f5 100644 --- a/net/llc/llc_evnt.c +++ b/net/llc/llc_evnt.c @@ -7,7 +7,7 @@ * them return 0 On success and 1 otherwise. * * Copyright (c) 1997 by Procom Technology, Inc. - * 2001 by Arnaldo Carvalho de Melo <acme@conectiva.com.br> + * 2001-2003 by Arnaldo Carvalho de Melo <acme@conectiva.com.br> * * This program can be redistributed or modified under the terms of the * GNU General Public License as published by the Free Software Foundation. diff --git a/net/llc/llc_if.c b/net/llc/llc_if.c index 7806f24a2bf8..7736ea2920e1 100644 --- a/net/llc/llc_if.c +++ b/net/llc/llc_if.c @@ -2,7 +2,7 @@ * llc_if.c - Defines LLC interface to upper layer * * Copyright (c) 1997 by Procom Technology, Inc. - * 2001 by Arnaldo Carvalho de Melo <acme@conectiva.com.br> + * 2001-2003 by Arnaldo Carvalho de Melo <acme@conectiva.com.br> * * This program can be redistributed or modified under the terms of the * GNU General Public License as published by the Free Software Foundation. diff --git a/net/llc/llc_mac.c b/net/llc/llc_mac.c index 74cadcee49d0..b78696665109 100644 --- a/net/llc/llc_mac.c +++ b/net/llc/llc_mac.c @@ -2,7 +2,7 @@ * llc_mac.c - Manages interface between LLC and MAC * * Copyright (c) 1997 by Procom Technology, Inc. - * 2001 by Arnaldo Carvalho de Melo <acme@conectiva.com.br> + * 2001-2003 by Arnaldo Carvalho de Melo <acme@conectiva.com.br> * * This program can be redistributed or modified under the terms of the * GNU General Public License as published by the Free Software Foundation. @@ -78,7 +78,8 @@ int llc_rcv(struct sk_buff *skb, struct net_device *dev, } sap = llc_sap_find(pdu->dsap); if (!sap) {/* unknown SAP */ - dprintk("%s: llc_sap_find(%02X) failed!\n", __FUNCTION__, pdu->dsap); + dprintk("%s: llc_sap_find(%02X) failed!\n", __FUNCTION__, + pdu->dsap); goto drop; } llc_decode_pdu_type(skb, &dest); @@ -255,41 +256,41 @@ u16 lan_hdrs_init(struct sk_buff *skb, u8 *sa, u8 *da) switch (skb->dev->type) { #ifdef CONFIG_TR - case ARPHRD_IEEE802_TR: { - struct trh_hdr *trh; - struct net_device *dev = skb->dev; + case ARPHRD_IEEE802_TR: { + struct trh_hdr *trh; + struct net_device *dev = skb->dev; - trh = (struct trh_hdr *)skb_push(skb, sizeof(*trh)); - trh->ac = AC; - trh->fc = LLC_FRAME; - if (sa) - memcpy(trh->saddr, sa, dev->addr_len); - else - memset(trh->saddr, 0, dev->addr_len); - if (da) { - memcpy(trh->daddr, da, dev->addr_len); - tr_source_route(skb, trh, dev); - } - skb->mac.raw = skb->data; - break; + trh = (struct trh_hdr *)skb_push(skb, sizeof(*trh)); + trh->ac = AC; + trh->fc = LLC_FRAME; + if (sa) + memcpy(trh->saddr, sa, dev->addr_len); + else + memset(trh->saddr, 0, dev->addr_len); + if (da) { + memcpy(trh->daddr, da, dev->addr_len); + tr_source_route(skb, trh, dev); } + skb->mac.raw = skb->data; + break; + } #endif - case ARPHRD_ETHER: - case ARPHRD_LOOPBACK: { - unsigned short len = skb->len; - struct ethhdr *eth; + case ARPHRD_ETHER: + case ARPHRD_LOOPBACK: { + unsigned short len = skb->len; + struct ethhdr *eth; - skb->mac.raw = skb_push(skb, sizeof(*eth)); - eth = (struct ethhdr *)skb->mac.raw; - eth->h_proto = htons(len); - memcpy(eth->h_dest, da, ETH_ALEN); - memcpy(eth->h_source, sa, ETH_ALEN); - break; - } - default: - printk(KERN_WARNING "Unknown DEVICE type : %d\n", - skb->dev->type); - rc = 1; + skb->mac.raw = skb_push(skb, sizeof(*eth)); + eth = (struct ethhdr *)skb->mac.raw; + eth->h_proto = htons(len); + memcpy(eth->h_dest, da, ETH_ALEN); + memcpy(eth->h_source, sa, ETH_ALEN); + break; + } + default: + printk(KERN_WARNING "Unknown DEVICE type : %d\n", + skb->dev->type); + rc = 1; } return rc; } diff --git a/net/llc/llc_main.c b/net/llc/llc_main.c index 4bd21823a05f..5d8d1602bb9e 100644 --- a/net/llc/llc_main.c +++ b/net/llc/llc_main.c @@ -3,7 +3,7 @@ * and connections of the LLC. * * Copyright (c) 1997 by Procom Technology, Inc. - * 2001, 2002 by Arnaldo Carvalho de Melo <acme@conectiva.com.br> + * 2001-2003 by Arnaldo Carvalho de Melo <acme@conectiva.com.br> * * This program can be redistributed or modified under the terms of the * GNU General Public License as published by the Free Software Foundation. @@ -600,5 +600,5 @@ module_init(llc_init); module_exit(llc_exit); MODULE_LICENSE("GPL"); -MODULE_AUTHOR("Procom, 1997, Arnaldo C. Melo, Jay Schullist, 2001, 2002"); +MODULE_AUTHOR("Procom, 1997, Arnaldo C. Melo, Jay Schullist, 2001-2003"); MODULE_DESCRIPTION("LLC 2.0, NET4.0 IEEE 802.2 extended support"); diff --git a/net/llc/llc_pdu.c b/net/llc/llc_pdu.c index 8da9ddea65be..c99273a5d21b 100644 --- a/net/llc/llc_pdu.c +++ b/net/llc/llc_pdu.c @@ -2,7 +2,7 @@ * llc_pdu.c - access to PDU internals * * Copyright (c) 1997 by Procom Technology, Inc. - * 2001 by Arnaldo Carvalho de Melo <acme@conectiva.com.br> + * 2001-2003 by Arnaldo Carvalho de Melo <acme@conectiva.com.br> * * This program can be redistributed or modified under the terms of the * GNU General Public License as published by the Free Software Foundation. @@ -63,13 +63,13 @@ void llc_pdu_set_pf_bit(struct sk_buff *skb, u8 bit_value) pdu = llc_pdu_sn_hdr(skb); switch (pdu_type) { - case LLC_PDU_TYPE_I: - case LLC_PDU_TYPE_S: - pdu->ctrl_2 = (pdu->ctrl_2 & 0xFE) | bit_value; - break; - case LLC_PDU_TYPE_U: - pdu->ctrl_1 |= (pdu->ctrl_1 & 0xEF) | (bit_value << 4); - break; + case LLC_PDU_TYPE_I: + case LLC_PDU_TYPE_S: + pdu->ctrl_2 = (pdu->ctrl_2 & 0xFE) | bit_value; + break; + case LLC_PDU_TYPE_U: + pdu->ctrl_1 |= (pdu->ctrl_1 & 0xEF) | (bit_value << 4); + break; } } @@ -91,13 +91,13 @@ void llc_pdu_decode_pf_bit(struct sk_buff *skb, u8 *pf_bit) pdu = llc_pdu_sn_hdr(skb); switch (pdu_type) { - case LLC_PDU_TYPE_I: - case LLC_PDU_TYPE_S: - *pf_bit = pdu->ctrl_2 & LLC_S_PF_BIT_MASK; - break; - case LLC_PDU_TYPE_U: - *pf_bit = (pdu->ctrl_1 & LLC_U_PF_BIT_MASK) >> 4; - break; + case LLC_PDU_TYPE_I: + case LLC_PDU_TYPE_S: + *pf_bit = pdu->ctrl_2 & LLC_S_PF_BIT_MASK; + break; + case LLC_PDU_TYPE_U: + *pf_bit = (pdu->ctrl_1 & LLC_U_PF_BIT_MASK) >> 4; + break; } } @@ -547,20 +547,20 @@ void llc_decode_pdu_type(struct sk_buff *skb, u8 *dest) if ((pdu->ctrl_1 & LLC_PDU_TYPE_MASK) != LLC_PDU_TYPE_U) goto out; switch (LLC_U_PDU_CMD(pdu)) { - case LLC_1_PDU_CMD_XID: - case LLC_1_PDU_CMD_UI: - case LLC_1_PDU_CMD_TEST: - type = LLC_DEST_SAP; - break; - case LLC_2_PDU_CMD_SABME: - case LLC_2_PDU_CMD_DISC: - case LLC_2_PDU_RSP_UA: - case LLC_2_PDU_RSP_DM: - case LLC_2_PDU_RSP_FRMR: - break; - default: - type = LLC_DEST_INVALID; - break; + case LLC_1_PDU_CMD_XID: + case LLC_1_PDU_CMD_UI: + case LLC_1_PDU_CMD_TEST: + type = LLC_DEST_SAP; + break; + case LLC_2_PDU_CMD_SABME: + case LLC_2_PDU_CMD_DISC: + case LLC_2_PDU_RSP_UA: + case LLC_2_PDU_RSP_DM: + case LLC_2_PDU_RSP_FRMR: + break; + default: + type = LLC_DEST_INVALID; + break; } out: *dest = type; @@ -604,13 +604,13 @@ static u8 llc_pdu_get_pf_bit(struct llc_pdu_sn *pdu) } else pdu_type = LLC_PDU_TYPE_I; switch (pdu_type) { - case LLC_PDU_TYPE_I: - case LLC_PDU_TYPE_S: - pf_bit = pdu->ctrl_2 & LLC_S_PF_BIT_MASK; - break; - case LLC_PDU_TYPE_U: - pf_bit = (pdu->ctrl_1 & LLC_U_PF_BIT_MASK) >> 4; - break; + case LLC_PDU_TYPE_I: + case LLC_PDU_TYPE_S: + pf_bit = pdu->ctrl_2 & LLC_S_PF_BIT_MASK; + break; + case LLC_PDU_TYPE_U: + pf_bit = (pdu->ctrl_1 & LLC_U_PF_BIT_MASK) >> 4; + break; } return pf_bit; } diff --git a/net/llc/llc_proc.c b/net/llc/llc_proc.c index 517834b99e5c..50aaf724bde9 100644 --- a/net/llc/llc_proc.c +++ b/net/llc/llc_proc.c @@ -2,7 +2,7 @@ * proc_llc.c - proc interface for LLC * * Copyright (c) 2001 by Jay Schulist <jschlst@samba.org> - * 2002 by Arnaldo Carvalho de Melo <acme@conectiva.com.br> + * 2002-2003 by Arnaldo Carvalho de Melo <acme@conectiva.com.br> * * This program can be redistributed or modified under the terms of the * GNU General Public License as published by the Free Software Foundation. diff --git a/net/llc/llc_s_ac.c b/net/llc/llc_s_ac.c index 27421a8f284b..1a67f2ef1a56 100644 --- a/net/llc/llc_s_ac.c +++ b/net/llc/llc_s_ac.c @@ -8,7 +8,7 @@ * them return 0 On success and 1 otherwise. * * Copyright (c) 1997 by Procom Technology, Inc. - * 2001 by Arnaldo Carvalho de Melo <acme@conectiva.com.br> + * 2001-2003 by Arnaldo Carvalho de Melo <acme@conectiva.com.br> * * This program can be redistributed or modified under the terms of the * GNU General Public License as published by the Free Software Foundation. diff --git a/net/llc/llc_s_ev.c b/net/llc/llc_s_ev.c index 3b1e02f88dcd..949ade268067 100644 --- a/net/llc/llc_s_ev.c +++ b/net/llc/llc_s_ev.c @@ -5,7 +5,7 @@ * in 802.2 LLC protocol standard document. * * Copyright (c) 1997 by Procom Technology, Inc. - * 2001 by Arnaldo Carvalho de Melo <acme@conectiva.com.br> + * 2001-2003 by Arnaldo Carvalho de Melo <acme@conectiva.com.br> * * This program can be redistributed or modified under the terms of the * GNU General Public License as published by the Free Software Foundation. diff --git a/net/llc/llc_s_st.c b/net/llc/llc_s_st.c index 8fb09a1743e2..6a43201aa32e 100644 --- a/net/llc/llc_s_st.c +++ b/net/llc/llc_s_st.c @@ -5,7 +5,7 @@ * which are described in 802.2 LLC protocol standard document. * * Copyright (c) 1997 by Procom Technology, Inc. - * 2001 by Arnaldo Carvalho de Melo <acme@conectiva.com.br> + * 2001-2003 by Arnaldo Carvalho de Melo <acme@conectiva.com.br> * * This program can be redistributed or modified under the terms of the * GNU General Public License as published by the Free Software Foundation. diff --git a/net/llc/llc_sap.c b/net/llc/llc_sap.c index 7cd6bb115a8b..bcbab8bfaf8b 100644 --- a/net/llc/llc_sap.c +++ b/net/llc/llc_sap.c @@ -2,7 +2,7 @@ * llc_sap.c - driver routines for SAP component. * * Copyright (c) 1997 by Procom Technology, Inc. - * 2001 by Arnaldo Carvalho de Melo <acme@conectiva.com.br> + * 2001-2003 by Arnaldo Carvalho de Melo <acme@conectiva.com.br> * * This program can be redistributed or modified under the terms of the * GNU General Public License as published by the Free Software Foundation. diff --git a/net/llc/llc_stat.c b/net/llc/llc_stat.c index 52fee9e005b9..06f071dc95a7 100644 --- a/net/llc/llc_stat.c +++ b/net/llc/llc_stat.c @@ -2,7 +2,7 @@ * llc_stat.c - Implementation of LLC station component state machine * transitions * Copyright (c) 1997 by Procom Technology, Inc. - * 2001 by Arnaldo Carvalho de Melo <acme@conectiva.com.br> + * 2001-2003 by Arnaldo Carvalho de Melo <acme@conectiva.com.br> * * This program can be redistributed or modified under the terms of the * GNU General Public License as published by the Free Software Foundation. diff --git a/net/sched/cls_api.c b/net/sched/cls_api.c index a578156cab91..0958503dcca7 100644 --- a/net/sched/cls_api.c +++ b/net/sched/cls_api.c @@ -65,37 +65,38 @@ struct tcf_proto_ops * tcf_proto_lookup_ops(struct rtattr *kind) int register_tcf_proto_ops(struct tcf_proto_ops *ops) { struct tcf_proto_ops *t, **tp; + int rc = -EEXIST; write_lock(&cls_mod_lock); - for (tp = &tcf_proto_base; (t=*tp) != NULL; tp = &t->next) { - if (strcmp(ops->kind, t->kind) == 0) { - write_unlock(&cls_mod_lock); - return -EEXIST; - } - } + for (tp = &tcf_proto_base; (t = *tp) != NULL; tp = &t->next) + if (!strcmp(ops->kind, t->kind)) + goto out; ops->next = NULL; *tp = ops; + rc = 0; +out: write_unlock(&cls_mod_lock); - return 0; + return rc; } int unregister_tcf_proto_ops(struct tcf_proto_ops *ops) { struct tcf_proto_ops *t, **tp; + int rc = -ENOENT; write_lock(&cls_mod_lock); for (tp = &tcf_proto_base; (t=*tp) != NULL; tp = &t->next) if (t == ops) break; - if (!t) { - write_unlock(&cls_mod_lock); - return -ENOENT; - } + if (!t) + goto out; *tp = t->next; + rc = 0; +out: write_unlock(&cls_mod_lock); - return 0; + return rc; } static int tfilter_notify(struct sk_buff *oskb, struct nlmsghdr *n, @@ -371,11 +372,8 @@ static int tc_dump_tfilter(struct sk_buff *skb, struct netlink_callback *cb) q = dev->qdisc_sleeping; else q = qdisc_lookup(dev, TC_H_MAJ(tcm->tcm_parent)); - if (q == NULL) { - read_unlock(&qdisc_tree_lock); - dev_put(dev); - return skb->len; - } + if (!q) + goto out; if ((cops = q->ops->cl_ops) == NULL) goto errout; if (TC_H_MIN(tcm->tcm_parent)) { @@ -425,7 +423,7 @@ static int tc_dump_tfilter(struct sk_buff *skb, struct netlink_callback *cb) errout: if (cl) cops->put(q, cl); - +out: read_unlock(&qdisc_tree_lock); dev_put(dev); return skb->len; diff --git a/net/sched/cls_fw.c b/net/sched/cls_fw.c index a3053c225806..caca242d22a6 100644 --- a/net/sched/cls_fw.c +++ b/net/sched/cls_fw.c @@ -152,7 +152,7 @@ static int fw_delete(struct tcf_proto *tp, unsigned long arg) struct fw_filter **fp; if (head == NULL || f == NULL) - return -EINVAL; + goto out; for (fp=&head->ht[fw_hash(f->id)]; *fp; fp = &(*fp)->next) { if (*fp == f) { @@ -171,6 +171,7 @@ static int fw_delete(struct tcf_proto *tp, unsigned long arg) return 0; } } +out: return -EINVAL; } diff --git a/net/sched/cls_u32.c b/net/sched/cls_u32.c index cf9f3fefa526..96488808098a 100644 --- a/net/sched/cls_u32.c +++ b/net/sched/cls_u32.c @@ -203,17 +203,17 @@ static __inline__ struct tc_u_knode * u32_lookup_key(struct tc_u_hnode *ht, u32 handle) { unsigned sel; - struct tc_u_knode *n; + struct tc_u_knode *n = NULL; sel = TC_U32_HASH(handle); if (sel > ht->divisor) - return 0; + goto out; for (n = ht->ht[sel]; n; n = n->next) if (n->handle == handle) - return n; - - return NULL; + break; +out: + return n; } diff --git a/net/sched/sch_api.c b/net/sched/sch_api.c index 857a2d824222..30c3586ce0b0 100644 --- a/net/sched/sch_api.c +++ b/net/sched/sch_api.c @@ -139,21 +139,19 @@ static rwlock_t qdisc_mod_lock = RW_LOCK_UNLOCKED; /* The list of all installed queueing disciplines. */ -static struct Qdisc_ops *qdisc_base = NULL; +static struct Qdisc_ops *qdisc_base; /* Register/uregister queueing discipline */ int register_qdisc(struct Qdisc_ops *qops) { struct Qdisc_ops *q, **qp; + int rc = -EEXIST; write_lock(&qdisc_mod_lock); - for (qp = &qdisc_base; (q=*qp)!=NULL; qp = &q->next) { - if (strcmp(qops->id, q->id) == 0) { - write_unlock(&qdisc_mod_lock); - return -EEXIST; - } - } + for (qp = &qdisc_base; (q = *qp) != NULL; qp = &q->next) + if (!strcmp(qops->id, q->id)) + goto out; if (qops->enqueue == NULL) qops->enqueue = noop_qdisc_ops.enqueue; @@ -164,8 +162,10 @@ int register_qdisc(struct Qdisc_ops *qops) qops->next = NULL; *qp = qops; + rc = 0; +out: write_unlock(&qdisc_mod_lock); - return 0; + return rc; } int unregister_qdisc(struct Qdisc_ops *qops) diff --git a/net/sched/sch_ingress.c b/net/sched/sch_ingress.c index 48a63bae0124..134b7c870583 100644 --- a/net/sched/sch_ingress.c +++ b/net/sched/sch_ingress.c @@ -45,7 +45,7 @@ /* Thanks to Doron Oz for this hack */ -static int nf_registered = 0; +static int nf_registered; struct ingress_qdisc_data { struct Qdisc *q; @@ -237,14 +237,12 @@ used on the egress (might slow things for an iota) } /* after ipt_filter */ -static struct nf_hook_ops ing_ops = -{ - { NULL, NULL}, - ing_hook, - THIS_MODULE, - PF_INET, - NF_IP_PRE_ROUTING, - NF_IP_PRI_FILTER + 1 +static struct nf_hook_ops ing_ops = { + .hook = ing_hook, + .owner = THIS_MODULE, + .pf = PF_INET, + .hooknum = NF_IP_PRE_ROUTING, + .priority = NF_IP_PRI_FILTER + 1, }; int ingress_init(struct Qdisc *sch,struct rtattr *opt) @@ -255,7 +253,7 @@ int ingress_init(struct Qdisc *sch,struct rtattr *opt) if (nf_register_hook(&ing_ops) < 0) { printk("ingress qdisc registration error \n"); goto error; - } + } nf_registered++; } |
