[PATCH] jbd2: sector_t conversion
[pandora-kernel.git] / include / linux / pid.h
index 93da7e2..2c0007d 100644 (file)
@@ -68,6 +68,8 @@ extern struct task_struct *FASTCALL(pid_task(struct pid *pid, enum pid_type));
 extern struct task_struct *FASTCALL(get_pid_task(struct pid *pid,
                                                enum pid_type));
 
+extern struct pid *get_task_pid(struct task_struct *task, enum pid_type type);
+
 /*
  * attach_pid() and detach_pid() must be called with the tasklist_lock
  * write-held.
@@ -89,33 +91,42 @@ extern struct pid *FASTCALL(find_pid(int nr));
  * Lookup a PID in the hash table, and return with it's count elevated.
  */
 extern struct pid *find_get_pid(int nr);
+extern struct pid *find_ge_pid(int nr);
 
 extern struct pid *alloc_pid(void);
 extern void FASTCALL(free_pid(struct pid *pid));
 
-#define pid_next(task, type)                                   \
-       ((task)->pids[(type)].node.next)
-
-#define pid_next_task(task, type)                              \
-       hlist_entry(pid_next(task, type), struct task_struct,   \
-                       pids[(type)].node)
+static inline pid_t pid_nr(struct pid *pid)
+{
+       pid_t nr = 0;
+       if (pid)
+               nr = pid->nr;
+       return nr;
+}
 
 
-/* We could use hlist_for_each_entry_rcu here but it takes more arguments
- * than the do_each_task_pid/while_each_task_pid.  So we roll our own
- * to preserve the existing interface.
- */
 #define do_each_task_pid(who, type, task)                              \
-       if ((task = find_task_by_pid_type(type, who))) {                \
-               prefetch(pid_next(task, type));                         \
-               do {
+       do {                                                            \
+               struct hlist_node *pos___;                              \
+               struct pid *pid___ = find_pid(who);                     \
+               if (pid___ != NULL)                                     \
+                       hlist_for_each_entry_rcu((task), pos___,        \
+                               &pid___->tasks[type], pids[type].node) {
 
 #define while_each_task_pid(who, type, task)                           \
-               } while (pid_next(task, type) &&  ({                    \
-                               task = pid_next_task(task, type);       \
-                               rcu_dereference(task);                  \
-                               prefetch(pid_next(task, type));         \
-                               1; }) );                                \
-       }
+                       }                                               \
+       } while (0)
+
+
+#define do_each_pid_task(pid, type, task)                              \
+       do {                                                            \
+               struct hlist_node *pos___;                              \
+               if (pid != NULL)                                        \
+                       hlist_for_each_entry_rcu((task), pos___,        \
+                               &pid->tasks[type], pids[type].node) {
+
+#define while_each_pid_task(pid, type, task)                           \
+                       }                                               \
+       } while (0)
 
 #endif /* _LINUX_PID_H */