[Bluetooth] Use work queue to trigger URB submission
[pandora-kernel.git] / fs / dcookies.c
index 02aa0dd..0c4b067 100644 (file)
  * to the pair and can be looked up from userspace.
  */
 
-#include <linux/config.h>
 #include <linux/syscalls.h>
 #include <linux/module.h>
 #include <linux/slab.h>
 #include <linux/list.h>
 #include <linux/mount.h>
+#include <linux/capability.h>
 #include <linux/dcache.h>
 #include <linux/mm.h>
 #include <linux/errno.h>
 #include <linux/dcookies.h>
+#include <linux/mutex.h>
 #include <asm/uaccess.h>
 
 /* The dcookies are allocated from a kmem_cache and
@@ -35,10 +36,10 @@ struct dcookie_struct {
 };
 
 static LIST_HEAD(dcookie_users);
-static DECLARE_MUTEX(dcookie_sem);
-static kmem_cache_t * dcookie_cache;
-static struct list_head * dcookie_hashtable;
-static size_t hash_size;
+static DEFINE_MUTEX(dcookie_mutex);
+static kmem_cache_t *dcookie_cache __read_mostly;
+static struct list_head *dcookie_hashtable __read_mostly;
+static size_t hash_size __read_mostly;
 
 static inline int is_live(void)
 {
@@ -113,7 +114,7 @@ int get_dcookie(struct dentry * dentry, struct vfsmount * vfsmnt,
        int err = 0;
        struct dcookie_struct * dcs;
 
-       down(&dcookie_sem);
+       mutex_lock(&dcookie_mutex);
 
        if (!is_live()) {
                err = -EINVAL;
@@ -133,7 +134,7 @@ int get_dcookie(struct dentry * dentry, struct vfsmount * vfsmnt,
        *cookie = dcookie_value(dcs);
 
 out:
-       up(&dcookie_sem);
+       mutex_unlock(&dcookie_mutex);
        return err;
 }
 
@@ -156,7 +157,7 @@ asmlinkage long sys_lookup_dcookie(u64 cookie64, char __user * buf, size_t len)
        if (!capable(CAP_SYS_ADMIN))
                return -EPERM;
 
-       down(&dcookie_sem);
+       mutex_lock(&dcookie_mutex);
 
        if (!is_live()) {
                err = -EINVAL;
@@ -191,7 +192,7 @@ asmlinkage long sys_lookup_dcookie(u64 cookie64, char __user * buf, size_t len)
 out_free:
        kfree(kbuf);
 out:
-       up(&dcookie_sem);
+       mutex_unlock(&dcookie_mutex);
        return err;
 }
 
@@ -289,7 +290,7 @@ struct dcookie_user * dcookie_register(void)
 {
        struct dcookie_user * user;
 
-       down(&dcookie_sem);
+       mutex_lock(&dcookie_mutex);
 
        user = kmalloc(sizeof(struct dcookie_user), GFP_KERNEL);
        if (!user)
@@ -301,7 +302,7 @@ struct dcookie_user * dcookie_register(void)
        list_add(&user->next, &dcookie_users);
 
 out:
-       up(&dcookie_sem);
+       mutex_unlock(&dcookie_mutex);
        return user;
 out_free:
        kfree(user);
@@ -312,7 +313,7 @@ out_free:
 
 void dcookie_unregister(struct dcookie_user * user)
 {
-       down(&dcookie_sem);
+       mutex_lock(&dcookie_mutex);
 
        list_del(&user->next);
        kfree(user);
@@ -320,7 +321,7 @@ void dcookie_unregister(struct dcookie_user * user)
        if (!is_live())
                dcookie_exit();
 
-       up(&dcookie_sem);
+       mutex_unlock(&dcookie_mutex);
 }
 
 EXPORT_SYMBOL_GPL(dcookie_register);