]> git.karo-electronics.de Git - mv-sheeva.git/blobdiff - net/ax25/ax25_uid.c
Merge branch 'for-linus' of git://neil.brown.name/md
[mv-sheeva.git] / net / ax25 / ax25_uid.c
index d53cc8615865f4b2e9ea7cc82452b57ddbbcef99..57aeba729baeacd7269faec3dde027ce1a4f1506 100644 (file)
@@ -6,12 +6,13 @@
  *
  * Copyright (C) Jonathan Naylor G4KLX (g4klx@g4klx.demon.co.uk)
  */
+
+#include <linux/capability.h>
 #include <linux/errno.h>
 #include <linux/types.h>
 #include <linux/socket.h>
 #include <linux/in.h>
 #include <linux/kernel.h>
-#include <linux/sched.h>
 #include <linux/timer.h>
 #include <linux/string.h>
 #include <linux/sockios.h>
  *     Callsign/UID mapper. This is in kernel space for security on multi-amateur machines.
  */
 
-HLIST_HEAD(ax25_uid_list);
+static HLIST_HEAD(ax25_uid_list);
 static DEFINE_RWLOCK(ax25_uid_lock);
 
-int ax25_uid_policy = 0;
+int ax25_uid_policy;
+
+EXPORT_SYMBOL(ax25_uid_policy);
 
 ax25_uid_assoc *ax25_findbyuid(uid_t uid)
 {
@@ -65,6 +68,8 @@ ax25_uid_assoc *ax25_findbyuid(uid_t uid)
        return res;
 }
 
+EXPORT_SYMBOL(ax25_findbyuid);
+
 int ax25_uid_ioctl(int cmd, struct sockaddr_ax25 *sax)
 {
        ax25_uid_assoc *ax25_uid;
@@ -139,6 +144,7 @@ int ax25_uid_ioctl(int cmd, struct sockaddr_ax25 *sax)
 #ifdef CONFIG_PROC_FS
 
 static void *ax25_uid_seq_start(struct seq_file *seq, loff_t *pos)
+       __acquires(ax25_uid_lock)
 {
        struct ax25_uid_assoc *pt;
        struct hlist_node *node;
@@ -158,10 +164,11 @@ static void *ax25_uid_seq_next(struct seq_file *seq, void *v, loff_t *pos)
        ++*pos;
 
        return hlist_entry(((ax25_uid_assoc *)v)->uid_node.next,
-                          ax25_uid_assoc, uid_node);
+                          ax25_uid_assoc, uid_node);
 }
 
 static void ax25_uid_seq_stop(struct seq_file *seq, void *v)
+       __releases(ax25_uid_lock)
 {
        read_unlock(&ax25_uid_lock);
 }
@@ -180,7 +187,7 @@ static int ax25_uid_seq_show(struct seq_file *seq, void *v)
        return 0;
 }
 
-static struct seq_operations ax25_uid_seqops = {
+static const struct seq_operations ax25_uid_seqops = {
        .start = ax25_uid_seq_start,
        .next = ax25_uid_seq_next,
        .stop = ax25_uid_seq_stop,
@@ -192,7 +199,7 @@ static int ax25_uid_info_open(struct inode *inode, struct file *file)
        return seq_open(file, &ax25_uid_seqops);
 }
 
-struct file_operations ax25_uid_fops = {
+const struct file_operations ax25_uid_fops = {
        .owner = THIS_MODULE,
        .open = ax25_uid_info_open,
        .read = seq_read,
@@ -211,9 +218,11 @@ void __exit ax25_uid_free(void)
        struct hlist_node *node;
 
        write_lock(&ax25_uid_lock);
+again:
        ax25_uid_for_each(ax25_uid, node, &ax25_uid_list) {
                hlist_del_init(&ax25_uid->uid_node);
                ax25_uid_put(ax25_uid);
+               goto again;
        }
        write_unlock(&ax25_uid_lock);
 }