lkml.org 
[lkml]   [2002]   [Oct]   [7]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[BKPATCH] Appletalk: use seq_file for proc stuff
    David,

    Please consider pulling from:

    master.kernel.org:/home/acme/BK/llc-2.5

    This is the only outstanding changeset there.

    Tomorrow I'll do the missing bit: the aarp proc stuff will
    be moved to atalk_proc.c too.

    And will also fix the .permission bogosity in IPX and LLC.

    - Arnaldo

    You can import this changeset into BK by piping this whole message to:
    '| bk receive [path to repository]' or apply the patch as usual.

    ===================================================================


    ChangeSet@1.632, 2002-10-07 03:27:57-03:00, acme@conectiva.com.br
    o Appletalk: use seq_file for proc stuff

    And also move MODULE_LICENSE from aarp.c to ddp.c, as its there
    that the module_init/exit is.

    Also added MODULE_AUTHOR and MODULE_DESCRIPTION.


    include/linux/atalk.h | 14 +
    net/appletalk/Makefile | 2
    net/appletalk/aarp.c | 22 --
    net/appletalk/atalk_proc.c | 319 +++++++++++++++++++++++++++++++++++++++
    net/appletalk/ddp.c | 244 +++++------------------------
    net/appletalk/sysctl_net_atalk.c | 7
    6 files changed, 385 insertions(+), 223 deletions(-)


    diff -Nru a/include/linux/atalk.h b/include/linux/atalk.h
    --- a/include/linux/atalk.h Mon Oct 7 03:28:22 2002
    +++ b/include/linux/atalk.h Mon Oct 7 03:28:22 2002
    @@ -198,5 +198,19 @@

    #define at_sk(__sk) ((struct atalk_sock *)(__sk)->protinfo)

    +extern struct sock *atalk_sockets;
    +extern spinlock_t atalk_sockets_lock;
    +
    +extern struct atalk_route *atalk_routes;
    +extern rwlock_t atalk_routes_lock;
    +
    +extern struct atalk_iface *atalk_interfaces;
    +extern spinlock_t atalk_interfaces_lock;
    +
    +extern struct atalk_route atrtr_default;
    +
    +extern int atalk_proc_init(void);
    +extern void atalk_proc_exit(void);
    +
    #endif /* __KERNEL__ */
    #endif /* __LINUX_ATALK_H__ */
    diff -Nru a/net/appletalk/Makefile b/net/appletalk/Makefile
    --- a/net/appletalk/Makefile Mon Oct 7 03:28:22 2002
    +++ b/net/appletalk/Makefile Mon Oct 7 03:28:22 2002
    @@ -6,7 +6,7 @@

    obj-$(CONFIG_ATALK) += appletalk.o

    -appletalk-y := aarp.o ddp.o
    +appletalk-y := aarp.o ddp.o atalk_proc.o
    appletalk-$(CONFIG_SYSCTL) += sysctl_net_atalk.o
    appletalk-objs := $(appletalk-y)

    diff -Nru a/net/appletalk/aarp.c b/net/appletalk/aarp.c
    --- a/net/appletalk/aarp.c Mon Oct 7 03:28:22 2002
    +++ b/net/appletalk/aarp.c Mon Oct 7 03:28:22 2002
    @@ -30,34 +30,13 @@
    */

    #include <linux/config.h>
    -#include <asm/uaccess.h>
    -#include <asm/system.h>
    -#include <asm/bitops.h>
    -#include <linux/types.h>
    -#include <linux/kernel.h>
    -#include <linux/sched.h>
    -#include <linux/string.h>
    -#include <linux/mm.h>
    -#include <linux/socket.h>
    -#include <linux/sockios.h>
    -#include <linux/in.h>
    -#include <linux/errno.h>
    -#include <linux/interrupt.h>
    -#include <linux/if_ether.h>
    -#include <linux/inet.h>
    -#include <linux/notifier.h>
    -#include <linux/netdevice.h>
    -#include <linux/etherdevice.h>
    #include <linux/if_arp.h>
    -#include <linux/skbuff.h>
    -#include <linux/spinlock.h>
    #include <net/sock.h>
    #include <net/datalink.h>
    #include <net/psnap.h>
    #include <linux/atalk.h>
    #include <linux/init.h>
    #include <linux/proc_fs.h>
    -#include <linux/module.h>

    int sysctl_aarp_expiry_time = AARP_EXPIRY_TIME;
    int sysctl_aarp_tick_time = AARP_TICK_TIME;
    @@ -995,4 +974,3 @@
    proc_net_remove("aarp");
    }
    #endif
    -MODULE_LICENSE("GPL");
    diff -Nru a/net/appletalk/atalk_proc.c b/net/appletalk/atalk_proc.c
    --- /dev/null Wed Dec 31 16:00:00 1969
    +++ b/net/appletalk/atalk_proc.c Mon Oct 7 03:28:22 2002
    @@ -0,0 +1,319 @@
    +/*
    + * atalk_proc.c - proc support for Appletalk
    + *
    + * Copyright(c) Arnaldo Carvalho de Melo <acme@conectiva.com.br>
    + *
    + * This program is free software; you can redistribute it and/or modify it
    + * under the terms of the GNU General Public License as published by the
    + * Free Software Foundation, version 2.
    + */
    +
    +#include <linux/config.h>
    +#include <linux/init.h>
    +#include <linux/proc_fs.h>
    +#include <linux/seq_file.h>
    +#include <net/sock.h>
    +#include <linux/atalk.h>
    +
    +#ifdef CONFIG_PROC_FS
    +static __inline__ struct atalk_iface *atalk_get_interface_idx(loff_t pos)
    +{
    + struct atalk_iface *i;
    +
    + for (i = atalk_interfaces; pos && i; i = i->next)
    + --pos;
    +
    + return i;
    +}
    +
    +static void *atalk_seq_interface_start(struct seq_file *seq, loff_t *pos)
    +{
    + loff_t l = *pos;
    +
    + spin_lock_bh(&atalk_interfaces_lock);
    + return l ? atalk_get_interface_idx(--l) : (void *)1;
    +}
    +
    +static void *atalk_seq_interface_next(struct seq_file *seq, void *v, loff_t *pos)
    +{
    + struct atalk_iface *i;
    +
    + ++*pos;
    + if (v == (void *)1) {
    + i = NULL;
    + if (atalk_interfaces)
    + i = atalk_interfaces;
    + goto out;
    + }
    + i = v;
    + i = i->next;
    +out:
    + return i;
    +}
    +
    +static void atalk_seq_interface_stop(struct seq_file *seq, void *v)
    +{
    + spin_unlock_bh(&atalk_interfaces_lock);
    +}
    +
    +static int atalk_seq_interface_show(struct seq_file *seq, void *v)
    +{
    + struct atalk_iface *iface;
    +
    + if (v == (void *)1) {
    + seq_puts(seq, "Interface Address Networks "
    + "Status\n");
    + goto out;
    + }
    +
    + iface = v;
    + seq_printf(seq, "%-16s %04X:%02X %04X-%04X %d\n",
    + iface->dev->name, ntohs(iface->address.s_net),
    + iface->address.s_node, ntohs(iface->nets.nr_firstnet),
    + ntohs(iface->nets.nr_lastnet), iface->status);
    +out:
    + return 0;
    +}
    +
    +static __inline__ struct atalk_route *atalk_get_route_idx(loff_t pos)
    +{
    + struct atalk_route *r;
    +
    + for (r = atalk_routes; pos && r; r = r->next)
    + --pos;
    +
    + return r;
    +}
    +
    +static void *atalk_seq_route_start(struct seq_file *seq, loff_t *pos)
    +{
    + loff_t l = *pos;
    +
    + read_lock_bh(&atalk_routes_lock);
    + return l ? atalk_get_route_idx(--l) : (void *)1;
    +}
    +
    +static void *atalk_seq_route_next(struct seq_file *seq, void *v, loff_t *pos)
    +{
    + struct atalk_route *r;
    +
    + ++*pos;
    + if (v == (void *)1) {
    + r = NULL;
    + if (atalk_routes)
    + r = atalk_routes;
    + goto out;
    + }
    + r = v;
    + r = r->next;
    +out:
    + return r;
    +}
    +
    +static void atalk_seq_route_stop(struct seq_file *seq, void *v)
    +{
    + read_unlock_bh(&atalk_routes_lock);
    +}
    +
    +static int atalk_seq_route_show(struct seq_file *seq, void *v)
    +{
    + struct atalk_route *rt;
    +
    + if (v == (void *)1) {
    + seq_puts(seq, "Target Router Flags Dev\n");
    + goto out;
    + }
    +
    + if (atrtr_default.dev) {
    + rt = &atrtr_default;
    + seq_printf(seq, "Default %04X:%02X %-4d %s\n",
    + ntohs(rt->gateway.s_net), rt->gateway.s_node,
    + rt->flags, rt->dev->name);
    + }
    +
    + rt = v;
    + seq_printf(seq, "%04X:%02X %04X:%02X %-4d %s\n",
    + ntohs(rt->target.s_net), rt->target.s_node,
    + ntohs(rt->gateway.s_net), rt->gateway.s_node,
    + rt->flags, rt->dev->name);
    +out:
    + return 0;
    +}
    +
    +static __inline__ struct sock *atalk_get_socket_idx(loff_t pos)
    +{
    + struct sock *s;
    +
    + for (s = atalk_sockets; pos && s; s = s->next)
    + --pos;
    +
    + return s;
    +}
    +
    +static void *atalk_seq_socket_start(struct seq_file *seq, loff_t *pos)
    +{
    + loff_t l = *pos;
    +
    + spin_lock_bh(&atalk_sockets_lock);
    + return l ? atalk_get_socket_idx(--l) : (void *)1;
    +}
    +
    +static void *atalk_seq_socket_next(struct seq_file *seq, void *v, loff_t *pos)
    +{
    + struct sock *i;
    +
    + ++*pos;
    + if (v == (void *)1) {
    + i = NULL;
    + if (atalk_sockets)
    + i = atalk_sockets;
    + goto out;
    + }
    + i = v;
    + i = i->next;
    +out:
    + return i;
    +}
    +
    +static void atalk_seq_socket_stop(struct seq_file *seq, void *v)
    +{
    + spin_unlock_bh(&atalk_sockets_lock);
    +}
    +
    +static int atalk_seq_socket_show(struct seq_file *seq, void *v)
    +{
    + struct sock *s;
    + struct atalk_sock *at;
    +
    + if (v == (void *)1) {
    + seq_printf(seq, "Type Local_addr Remote_addr Tx_queue "
    + "Rx_queue St UID\n");
    + goto out;
    + }
    +
    + s = v;
    + at = at_sk(s);
    +
    + seq_printf(seq, "%02X %04X:%02X:%02X %04X:%02X:%02X %08X:%08X "
    + "%02X %d\n",
    + s->type, ntohs(at->src_net), at->src_node, at->src_port,
    + ntohs(at->dest_net), at->dest_node, at->dest_port,
    + atomic_read(&s->wmem_alloc), atomic_read(&s->rmem_alloc),
    + s->state, SOCK_INODE(s->socket)->i_uid);
    +out:
    + return 0;
    +}
    +
    +struct seq_operations atalk_seq_interface_ops = {
    + .start = atalk_seq_interface_start,
    + .next = atalk_seq_interface_next,
    + .stop = atalk_seq_interface_stop,
    + .show = atalk_seq_interface_show,
    +};
    +
    +struct seq_operations atalk_seq_route_ops = {
    + .start = atalk_seq_route_start,
    + .next = atalk_seq_route_next,
    + .stop = atalk_seq_route_stop,
    + .show = atalk_seq_route_show,
    +};
    +
    +struct seq_operations atalk_seq_socket_ops = {
    + .start = atalk_seq_socket_start,
    + .next = atalk_seq_socket_next,
    + .stop = atalk_seq_socket_stop,
    + .show = atalk_seq_socket_show,
    +};
    +
    +static int atalk_seq_interface_open(struct inode *inode, struct file *file)
    +{
    + return seq_open(file, &atalk_seq_interface_ops);
    +}
    +
    +static int atalk_seq_route_open(struct inode *inode, struct file *file)
    +{
    + return seq_open(file, &atalk_seq_route_ops);
    +}
    +
    +static int atalk_seq_socket_open(struct inode *inode, struct file *file)
    +{
    + return seq_open(file, &atalk_seq_socket_ops);
    +}
    +
    +static struct file_operations atalk_seq_interface_fops = {
    + .open = atalk_seq_interface_open,
    + .read = seq_read,
    + .llseek = seq_lseek,
    + .release = seq_release,
    +};
    +
    +static struct file_operations atalk_seq_route_fops = {
    + .open = atalk_seq_route_open,
    + .read = seq_read,
    + .llseek = seq_lseek,
    + .release = seq_release,
    +};
    +
    +static struct file_operations atalk_seq_socket_fops = {
    + .open = atalk_seq_socket_open,
    + .read = seq_read,
    + .llseek = seq_lseek,
    + .release = seq_release,
    +};
    +
    +static struct proc_dir_entry *atalk_proc_dir;
    +
    +int __init atalk_proc_init(void)
    +{
    + struct proc_dir_entry *p;
    + int rc = -ENOMEM;
    +
    + atalk_proc_dir = proc_mkdir("atalk", proc_net);
    + if (!atalk_proc_dir)
    + goto out;
    +
    + p = create_proc_entry("interface", S_IRUGO, atalk_proc_dir);
    + if (!p)
    + goto out_interface;
    + p->proc_fops = &atalk_seq_interface_fops;
    +
    + p = create_proc_entry("route", S_IRUGO, atalk_proc_dir);
    + if (!p)
    + goto out_route;
    + p->proc_fops = &atalk_seq_route_fops;
    +
    + p = create_proc_entry("socket", S_IRUGO, atalk_proc_dir);
    + if (!p)
    + goto out_socket;
    + p->proc_fops = &atalk_seq_socket_fops;
    +
    + rc = 0;
    +out:
    + return rc;
    +out_socket:
    + remove_proc_entry("route", atalk_proc_dir);
    +out_route:
    + remove_proc_entry("interface", atalk_proc_dir);
    +out_interface:
    + remove_proc_entry("atalk", proc_net);
    + goto out;
    +}
    +
    +void __exit atalk_proc_exit(void)
    +{
    + remove_proc_entry("interface", atalk_proc_dir);
    + remove_proc_entry("route", atalk_proc_dir);
    + remove_proc_entry("socket", atalk_proc_dir);
    + remove_proc_entry("atalk", proc_net);
    +}
    +
    +#else /* CONFIG_PROC_FS */
    +int __init atalk_proc_init(void)
    +{
    + return 0;
    +}
    +
    +void __exit atalk_proc_exit(void)
    +{
    +}
    +#endif /* CONFIG_PROC_FS */
    diff -Nru a/net/appletalk/ddp.c b/net/appletalk/ddp.c
    --- a/net/appletalk/ddp.c Mon Oct 7 03:28:22 2002
    +++ b/net/appletalk/ddp.c Mon Oct 7 03:28:22 2002
    @@ -40,6 +40,8 @@
    * result.
    * Arnaldo C. de Melo : Cleanup, in preparation for
    * shared skb support 8)
    + * Arnaldo C. de Melo : Move proc stuff to atalk_proc.c,
    + * use seq_file
    *
    * This program is free software; you can redistribute it and/or
    * modify it under the terms of the GNU General Public License
    @@ -50,41 +52,14 @@

    #include <linux/config.h>
    #include <linux/module.h>
    -#include <asm/uaccess.h>
    -#include <asm/system.h>
    -#include <asm/bitops.h>
    -#include <linux/types.h>
    -#include <linux/kernel.h>
    -#include <linux/sched.h>
    -#include <linux/string.h>
    -#include <linux/mm.h>
    -#include <linux/socket.h>
    -#include <linux/sockios.h>
    -#include <linux/in.h>
    #include <linux/tcp.h>
    -#include <linux/errno.h>
    -#include <linux/interrupt.h>
    -#include <linux/if_ether.h>
    -#include <linux/notifier.h>
    -#include <linux/netdevice.h>
    -#include <linux/inetdevice.h>
    -#include <linux/route.h>
    -#include <linux/inet.h>
    -#include <linux/etherdevice.h>
    #include <linux/if_arp.h>
    -#include <linux/skbuff.h>
    -#include <linux/spinlock.h>
    #include <linux/termios.h> /* For TIOCOUTQ/INQ */
    #include <net/datalink.h>
    -#include <net/p8022.h>
    #include <net/psnap.h>
    #include <net/sock.h>
    -#include <linux/ip.h>
    #include <net/route.h>
    #include <linux/atalk.h>
    -#include <linux/proc_fs.h>
    -#include <linux/stat.h>
    -#include <linux/init.h>

    #ifdef CONFIG_PROC_FS
    extern void aarp_register_proc_fs(void);
    @@ -112,8 +87,8 @@
    * *
    \**************************************************************************/

    -static struct sock *atalk_sockets;
    -static spinlock_t atalk_sockets_lock = SPIN_LOCK_UNLOCKED;
    +struct sock *atalk_sockets;
    +spinlock_t atalk_sockets_lock = SPIN_LOCK_UNLOCKED;

    extern inline void atalk_insert_socket(struct sock *sk)
    {
    @@ -244,53 +219,6 @@
    }
    }

    -/* Called from proc fs */
    -static int atalk_get_info(char *buffer, char **start, off_t offset, int length)
    -{
    - off_t pos = 0;
    - off_t begin = 0;
    - int len = sprintf(buffer, "Type local_addr remote_addr tx_queue "
    - "rx_queue st uid\n");
    - struct sock *s;
    - /* Output the AppleTalk data for the /proc filesystem */
    -
    - spin_lock_bh(&atalk_sockets_lock);
    - for (s = atalk_sockets; s; s = s->next) {
    - struct atalk_sock *at = at_sk(s);
    -
    - len += sprintf(buffer + len, "%02X ", s->type);
    - len += sprintf(buffer + len, "%04X:%02X:%02X ",
    - ntohs(at->src_net), at->src_node, at->src_port);
    - len += sprintf(buffer + len, "%04X:%02X:%02X ",
    - ntohs(at->dest_net), at->dest_node,
    - at->dest_port);
    - len += sprintf(buffer + len, "%08X:%08X ",
    - atomic_read(&s->wmem_alloc),
    - atomic_read(&s->rmem_alloc));
    - len += sprintf(buffer + len, "%02X %d\n", s->state,
    - SOCK_INODE(s->socket)->i_uid);
    -
    - /* Are we still dumping unwanted data then discard the record */
    - pos = begin + len;
    -
    - if (pos < offset) {
    - len = 0; /* Keep dumping into the buffer start */
    - begin = pos;
    - }
    - if (pos > offset + length) /* We have dumped enough */
    - break;
    - }
    - spin_unlock_bh(&atalk_sockets_lock);
    -
    - /* The data in question runs from begin to begin + len */
    - *start = buffer + offset - begin; /* Start of wanted data */
    - len -= offset - begin; /* Remove unwanted header data from length */
    - if (len > length)
    - len = length; /* Remove unwanted tail data from length */
    -
    - return len;
    -}
    -
    /**************************************************************************\
    * *
    * Routing tables for the AppleTalk socket layer. *
    @@ -298,14 +226,14 @@
    \**************************************************************************/

    /* Anti-deadlock ordering is router_lock --> iface_lock -DaveM */
    -static struct atalk_route *atalk_router_list;
    -static rwlock_t atalk_router_lock = RW_LOCK_UNLOCKED;
    +struct atalk_route *atalk_routes;
    +rwlock_t atalk_routes_lock = RW_LOCK_UNLOCKED;

    -static struct atalk_iface *atalk_iface_list;
    -static spinlock_t atalk_iface_lock = SPIN_LOCK_UNLOCKED;
    +struct atalk_iface *atalk_interfaces;
    +spinlock_t atalk_interfaces_lock = SPIN_LOCK_UNLOCKED;

    /* For probing devices or in a routerless network */
    -static struct atalk_route atrtr_default;
    +struct atalk_route atrtr_default;

    /* AppleTalk interface control */
    /*
    @@ -314,10 +242,10 @@
    */
    static void atif_drop_device(struct net_device *dev)
    {
    - struct atalk_iface **iface = &atalk_iface_list;
    + struct atalk_iface **iface = &atalk_interfaces;
    struct atalk_iface *tmp;

    - spin_lock_bh(&atalk_iface_lock);
    + spin_lock_bh(&atalk_interfaces_lock);
    while ((tmp = *iface) != NULL) {
    if (tmp->dev == dev) {
    *iface = tmp->next;
    @@ -327,7 +255,7 @@
    } else
    iface = &tmp->next;
    }
    - spin_unlock_bh(&atalk_iface_lock);
    + spin_unlock_bh(&atalk_interfaces_lock);
    }

    static struct atalk_iface *atif_add_device(struct net_device *dev,
    @@ -346,10 +274,10 @@
    iface->address = *sa;
    iface->status = 0;

    - spin_lock_bh(&atalk_iface_lock);
    - iface->next = atalk_iface_list;
    - atalk_iface_list = iface;
    - spin_unlock_bh(&atalk_iface_lock);
    + spin_lock_bh(&atalk_interfaces_lock);
    + iface->next = atalk_interfaces;
    + atalk_interfaces = iface;
    + spin_unlock_bh(&atalk_interfaces_lock);
    out:
    return iface;
    out_mem:
    @@ -466,8 +394,8 @@
    * Return a point-to-point interface only if
    * there is no non-ptp interface available.
    */
    - spin_lock_bh(&atalk_iface_lock);
    - for (iface = atalk_iface_list; iface; iface = iface->next) {
    + spin_lock_bh(&atalk_interfaces_lock);
    + for (iface = atalk_interfaces; iface; iface = iface->next) {
    if (!fiface && !(iface->dev->flags & IFF_LOOPBACK))
    fiface = iface;
    if (!(iface->dev->flags & (IFF_LOOPBACK | IFF_POINTOPOINT))) {
    @@ -478,12 +406,12 @@

    if (fiface)
    retval = &fiface->address;
    - else if (atalk_iface_list)
    - retval = &atalk_iface_list->address;
    + else if (atalk_interfaces)
    + retval = &atalk_interfaces->address;
    else
    retval = NULL;
    out:
    - spin_unlock_bh(&atalk_iface_lock);
    + spin_unlock_bh(&atalk_interfaces_lock);
    return retval;
    }

    @@ -514,8 +442,8 @@
    {
    struct atalk_iface *iface;

    - spin_lock_bh(&atalk_iface_lock);
    - for (iface = atalk_iface_list; iface; iface = iface->next) {
    + spin_lock_bh(&atalk_interfaces_lock);
    + for (iface = atalk_interfaces; iface; iface = iface->next) {
    if ((node == ATADDR_BCAST ||
    node == ATADDR_ANYNODE ||
    iface->address.s_node == node) &&
    @@ -529,7 +457,7 @@
    ntohs(net) <= ntohs(iface->nets.nr_lastnet))
    break;
    }
    - spin_unlock_bh(&atalk_iface_lock);
    + spin_unlock_bh(&atalk_interfaces_lock);
    return iface;
    }

    @@ -549,8 +477,8 @@
    struct atalk_route *net_route = NULL;
    struct atalk_route *r;

    - read_lock_bh(&atalk_router_lock);
    - for (r = atalk_router_list; r; r = r->next) {
    + read_lock_bh(&atalk_routes_lock);
    + for (r = atalk_routes; r; r = r->next) {
    if (!(r->flags & RTF_UP))
    continue;

    @@ -582,7 +510,7 @@
    else /* No route can be found */
    r = NULL;
    out:
    - read_unlock_bh(&atalk_router_lock);
    + read_unlock_bh(&atalk_routes_lock);
    return r;
    }

    @@ -630,8 +558,8 @@
    goto out;

    /* Now walk the routing table and make our decisions */
    - write_lock_bh(&atalk_router_lock);
    - for (rt = atalk_router_list; rt; rt = rt->next) {
    + write_lock_bh(&atalk_routes_lock);
    + for (rt = atalk_routes; rt; rt = rt->next) {
    if (r->rt_flags != rt->flags)
    continue;

    @@ -646,8 +574,8 @@
    if (!devhint) {
    riface = NULL;

    - spin_lock_bh(&atalk_iface_lock);
    - for (iface = atalk_iface_list; iface; iface = iface->next) {
    + spin_lock_bh(&atalk_interfaces_lock);
    + for (iface = atalk_interfaces; iface; iface = iface->next) {
    if (!riface &&
    ntohs(ga->sat_addr.s_net) >=
    ntohs(iface->nets.nr_firstnet) &&
    @@ -659,7 +587,7 @@
    ga->sat_addr.s_node == iface->address.s_node)
    riface = iface;
    }
    - spin_unlock_bh(&atalk_iface_lock);
    + spin_unlock_bh(&atalk_interfaces_lock);

    retval = -ENETUNREACH;
    if (!riface)
    @@ -675,8 +603,8 @@
    if (!rt)
    goto out;

    - rt->next = atalk_router_list;
    - atalk_router_list = rt;
    + rt->next = atalk_routes;
    + atalk_routes = rt;
    }

    /* Fill in the routing entry */
    @@ -687,7 +615,7 @@

    retval = 0;
    out_unlock:
    - write_unlock_bh(&atalk_router_lock);
    + write_unlock_bh(&atalk_routes_lock);
    out:
    return retval;
    }
    @@ -695,11 +623,11 @@
    /* Delete a route. Find it and discard it */
    static int atrtr_delete(struct atalk_addr * addr)
    {
    - struct atalk_route **r = &atalk_router_list;
    + struct atalk_route **r = &atalk_routes;
    int retval = 0;
    struct atalk_route *tmp;

    - write_lock_bh(&atalk_router_lock);
    + write_lock_bh(&atalk_routes_lock);
    while ((tmp = *r) != NULL) {
    if (tmp->target.s_net == addr->s_net &&
    (!(tmp->flags&RTF_GATEWAY) ||
    @@ -712,7 +640,7 @@
    }
    retval = -ENOENT;
    out:
    - write_unlock_bh(&atalk_router_lock);
    + write_unlock_bh(&atalk_routes_lock);
    return retval;
    }

    @@ -722,10 +650,10 @@
    */
    void atrtr_device_down(struct net_device *dev)
    {
    - struct atalk_route **r = &atalk_router_list;
    + struct atalk_route **r = &atalk_routes;
    struct atalk_route *tmp;

    - write_lock_bh(&atalk_router_lock);
    + write_lock_bh(&atalk_routes_lock);
    while ((tmp = *r) != NULL) {
    if (tmp->dev == dev) {
    *r = tmp->next;
    @@ -733,7 +661,7 @@
    } else
    r = &tmp->next;
    }
    - write_unlock_bh(&atalk_router_lock);
    + write_unlock_bh(&atalk_routes_lock);

    if (atrtr_default.dev == dev)
    atrtr_set_default(NULL);
    @@ -1013,81 +941,6 @@
    return -EINVAL;
    }

    -/* Called from proc fs - just make it print the ifaces neatly */
    -static int atalk_if_get_info(char *buffer, char **start, off_t offset,
    - int length)
    -{
    - off_t pos = 0;
    - off_t begin = 0;
    - struct atalk_iface *iface;
    - int len = sprintf(buffer, "Interface Address "
    - "Networks Status\n");
    -
    - spin_lock_bh(&atalk_iface_lock);
    - for (iface = atalk_iface_list; iface; iface = iface->next) {
    - len += sprintf(buffer + len, "%-16s %04X:%02X %04X-%04X %d\n",
    - iface->dev->name, ntohs(iface->address.s_net),
    - iface->address.s_node,
    - ntohs(iface->nets.nr_firstnet),
    - ntohs(iface->nets.nr_lastnet), iface->status);
    - pos = begin + len;
    - if (pos < offset) {
    - len = 0;
    - begin = pos;
    - }
    - if (pos > offset + length)
    - break;
    - }
    - spin_unlock_bh(&atalk_iface_lock);
    -
    - *start = buffer + (offset - begin);
    - len -= (offset - begin);
    - if (len > length)
    - len = length;
    - return len;
    -}
    -
    -/* Called from proc fs - just make it print the routes neatly */
    -static int atalk_rt_get_info(char *buffer, char **start, off_t offset,
    - int length)
    -{
    - off_t pos = 0;
    - off_t begin = 0;
    - int len = sprintf(buffer, "Target Router Flags Dev\n");
    - struct atalk_route *rt;
    -
    - if (atrtr_default.dev) {
    - rt = &atrtr_default;
    - len += sprintf(buffer + len,
    - "Default %04X:%02X %-4d %s\n",
    - ntohs(rt->gateway.s_net), rt->gateway.s_node,
    - rt->flags, rt->dev->name);
    - }
    -
    - read_lock_bh(&atalk_router_lock);
    - for (rt = atalk_router_list; rt; rt = rt->next) {
    - len += sprintf(buffer + len,
    - "%04X:%02X %04X:%02X %-4d %s\n",
    - ntohs(rt->target.s_net), rt->target.s_node,
    - ntohs(rt->gateway.s_net), rt->gateway.s_node,
    - rt->flags, rt->dev->name);
    - pos = begin + len;
    - if (pos < offset) {
    - len = 0;
    - begin = pos;
    - }
    - if (pos > offset + length)
    - break;
    - }
    - read_unlock_bh(&atalk_router_lock);
    -
    - *start = buffer + (offset - begin);
    - len -= (offset - begin);
    - if (len > length)
    - len = length;
    - return len;
    -}
    -
    /**************************************************************************\
    * *
    * Handling for system calls applied via the various interfaces to an *
    @@ -1991,17 +1844,14 @@

    register_netdevice_notifier(&ddp_notifier);
    aarp_proto_init();
    -
    - proc_net_create("appletalk", 0, atalk_get_info);
    - proc_net_create("atalk_route", 0, atalk_rt_get_info);
    - proc_net_create("atalk_iface", 0, atalk_if_get_info);
    + atalk_proc_init();
    #ifdef CONFIG_PROC_FS
    aarp_register_proc_fs();
    #endif /* CONFIG_PROC_FS */
    #ifdef CONFIG_SYSCTL
    atalk_register_sysctl();
    #endif /* CONFIG_SYSCTL */
    - printk(KERN_INFO "NET4: AppleTalk 0.18a for Linux NET4.0\n");
    + printk(KERN_INFO "NET4: AppleTalk 0.20 for Linux NET4.0\n");
    return 0;
    }
    module_init(atalk_init);
    @@ -2024,9 +1874,7 @@
    #ifdef CONFIG_SYSCTL
    atalk_unregister_sysctl();
    #endif /* CONFIG_SYSCTL */
    - proc_net_remove("appletalk");
    - proc_net_remove("atalk_route");
    - proc_net_remove("atalk_iface");
    + atalk_proc_exit();
    #ifdef CONFIG_PROC_FS
    aarp_unregister_proc_fs();
    #endif /* CONFIG_PROC_FS */
    @@ -2039,3 +1887,7 @@
    }
    module_exit(atalk_exit);
    #endif /* MODULE */
    +
    +MODULE_LICENSE("GPL");
    +MODULE_AUTHOR("Alan Cox <Alan.Cox@linux.org>");
    +MODULE_DESCRIPTION("AppleTalk 0.20 for Linux NET4.0\n");
    diff -Nru a/net/appletalk/sysctl_net_atalk.c b/net/appletalk/sysctl_net_atalk.c
    --- a/net/appletalk/sysctl_net_atalk.c Mon Oct 7 03:28:22 2002
    +++ b/net/appletalk/sysctl_net_atalk.c Mon Oct 7 03:28:22 2002
    @@ -7,7 +7,6 @@
    */

    #include <linux/config.h>
    -#include <linux/mm.h>
    #include <linux/sysctl.h>

    extern int sysctl_aarp_expiry_time;
    @@ -16,7 +15,7 @@
    extern int sysctl_aarp_resolve_time;

    #ifdef CONFIG_SYSCTL
    -static ctl_table atalk_table[] = {
    +static struct ctl_table atalk_table[] = {
    {
    .ctl_name = NET_ATALK_AARP_EXPIRY_TIME,
    .procname = "aarp-expiry-time",
    @@ -52,7 +51,7 @@
    { 0 },
    };

    -static ctl_table atalk_dir_table[] = {
    +static struct ctl_table atalk_dir_table[] = {
    {
    .ctl_name = NET_ATALK,
    .procname = "appletalk",
    @@ -62,7 +61,7 @@
    { 0 },
    };

    -static ctl_table atalk_root_table[] = {
    +static struct ctl_table atalk_root_table[] = {
    {
    .ctl_name = CTL_NET,
    .procname = "net",
    ===================================================================

    This BitKeeper patch contains the following changesets:
    1.632
    ## Wrapped with gzip_uu ##


    begin 664 bkpatch18241
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
    @@>]'.='TCX7M";7OPL7TC3$:XV=T3?@O_'+2#)X\````
    `
    end
    -
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/
    \
     
     \ /
      Last update: 2005-03-22 13:29    [W:0.081 / U:0.116 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site