X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=net%2Flapb%2Flapb_iface.c;h=7e6bc41eeb216df942fcaf4b0575a1d4e26a6d05;hb=refs%2Fheads%2Fvserver;hp=beca11e7a5e974be67930434140918901a838448;hpb=5273a3df6485dc2ad6aa7ddd441b9a21970f003b;p=linux-2.6.git diff --git a/net/lapb/lapb_iface.c b/net/lapb/lapb_iface.c index beca11e7a..7e6bc41ee 100644 --- a/net/lapb/lapb_iface.c +++ b/net/lapb/lapb_iface.c @@ -40,7 +40,7 @@ #include static struct list_head lapb_list = LIST_HEAD_INIT(lapb_list); -static rwlock_t lapb_list_lock = RW_LOCK_UNLOCKED; +static DEFINE_RWLOCK(lapb_list_lock); /* * Free an allocated lapb control block. @@ -115,14 +115,12 @@ static struct lapb_cb *lapb_devtostruct(struct net_device *dev) */ static struct lapb_cb *lapb_create_cb(void) { - struct lapb_cb *lapb = kmalloc(sizeof(*lapb), GFP_ATOMIC); + struct lapb_cb *lapb = kzalloc(sizeof(*lapb), GFP_ATOMIC); if (!lapb) goto out; - memset(lapb, 0x00, sizeof(*lapb)); - skb_queue_head_init(&lapb->write_queue); skb_queue_head_init(&lapb->ack_queue); @@ -176,7 +174,7 @@ int lapb_unregister(struct net_device *dev) struct lapb_cb *lapb; int rc = LAPB_BADTOKEN; - write_unlock_bh(&lapb_list_lock); + write_lock_bh(&lapb_list_lock); lapb = __lapb_devtostruct(dev); if (!lapb) goto out; @@ -240,11 +238,13 @@ int lapb_setparms(struct net_device *dev, struct lapb_parms_struct *parms) goto out_put; if (lapb->state == LAPB_STATE_0) { - if (((parms->mode & LAPB_EXTENDED) && - (parms->window < 1 || parms->window > 127)) || - (parms->window < 1 || parms->window > 7)) - goto out_put; - + if (parms->mode & LAPB_EXTENDED) { + if (parms->window < 1 || parms->window > 127) + goto out_put; + } else { + if (parms->window < 1 || parms->window > 7) + goto out_put; + } lapb->mode = parms->mode; lapb->window = parms->window; }