Merge branch 'for-linus' of git://git.alsa-project.org/alsa-kernel
[pandora-kernel.git] / include / linux / iocontext.h
index 1b4ccf2..08b987b 100644 (file)
@@ -2,6 +2,7 @@
 #define IOCONTEXT_H
 
 #include <linux/radix-tree.h>
+#include <linux/rcupdate.h>
 
 /*
  * This is the per-process anticipatory I/O scheduler state.
@@ -54,6 +55,8 @@ struct cfq_io_context {
 
        void (*dtor)(struct io_context *); /* destructor */
        void (*exit)(struct io_context *); /* called on task exit */
+
+       struct rcu_head rcu_head;
 };
 
 /*
@@ -88,10 +91,30 @@ static inline struct io_context *ioc_task_link(struct io_context *ioc)
         * if ref count is zero, don't allow sharing (ioc is going away, it's
         * a race).
         */
-       if (ioc && atomic_inc_not_zero(&ioc->refcount))
+       if (ioc && atomic_inc_not_zero(&ioc->refcount)) {
+               atomic_inc(&ioc->nr_tasks);
                return ioc;
+       }
 
        return NULL;
 }
 
+#ifdef CONFIG_BLOCK
+int put_io_context(struct io_context *ioc);
+void exit_io_context(void);
+struct io_context *get_io_context(gfp_t gfp_flags, int node);
+struct io_context *alloc_io_context(gfp_t gfp_flags, int node);
+void copy_io_context(struct io_context **pdst, struct io_context **psrc);
+#else
+static inline void exit_io_context(void)
+{
+}
+
+struct io_context;
+static inline int put_io_context(struct io_context *ioc)
+{
+       return 1;
+}
+#endif
+
 #endif