* In the case of a seek we start with the leader and walk nr
  * threads past it.
  */
-static struct task_struct *first_tid(struct pid *pid, int tid,
-                                       int nr, struct pid_namespace *ns)
+static struct task_struct *first_tid(struct pid *pid, int tid, loff_t f_pos,
+                                       struct pid_namespace *ns)
 {
        struct task_struct *pos, *task;
+       unsigned long nr = f_pos;
+
+       if (nr != f_pos)        /* 32bit overflow? */
+               return NULL;
 
        rcu_read_lock();
        task = pid_task(pid, PIDTYPE_PID);
                goto fail;
 
        /* Attempt to start with the tid of a thread */
-       if (tid && (nr > 0)) {
+       if (tid && nr) {
                pos = find_task_by_pid_ns(tid, ns);
                if (pos && same_thread_group(pos, task))
                        goto found;
        }
 
        /* If nr exceeds the number of threads there is nothing todo */
-       if (nr && nr >= get_nr_threads(task))
+       if (nr >= get_nr_threads(task))
                goto fail;
 
        /* If we haven't found our starting place yet start
         */
        pos = task = task->group_leader;
        do {
-               if (nr-- <= 0)
+               if (!nr--)
                        goto found;
        } while_each_thread(task, pos);
 fail: