Merge branch 'x86-efi-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git...
[deliverable/linux.git] / kernel / pid.c
index 047dc62646389fd5abdf5fc63cb8db963a1a5b60..6283d6412affd58763657141aeec206cb1a32d02 100644 (file)
@@ -51,9 +51,6 @@ int pid_max = PID_MAX_DEFAULT;
 int pid_max_min = RESERVED_PIDS + 1;
 int pid_max_max = PID_MAX_LIMIT;
 
-#define BITS_PER_PAGE          (PAGE_SIZE*8)
-#define BITS_PER_PAGE_MASK     (BITS_PER_PAGE-1)
-
 static inline int mk_pid(struct pid_namespace *pid_ns,
                struct pidmap *map, int off)
 {
@@ -183,15 +180,19 @@ static int alloc_pidmap(struct pid_namespace *pid_ns)
                                break;
                }
                if (likely(atomic_read(&map->nr_free))) {
-                       do {
+                       for ( ; ; ) {
                                if (!test_and_set_bit(offset, map->page)) {
                                        atomic_dec(&map->nr_free);
                                        set_last_pid(pid_ns, last, pid);
                                        return pid;
                                }
                                offset = find_next_offset(map, offset);
+                               if (offset >= BITS_PER_PAGE)
+                                       break;
                                pid = mk_pid(pid_ns, map, offset);
-                       } while (offset < BITS_PER_PAGE && pid < pid_max);
+                               if (pid >= pid_max)
+                                       break;
+                       }
                }
                if (map < &pid_ns->pidmap[(pid_max-1)/BITS_PER_PAGE]) {
                        ++map;
This page took 0.025613 seconds and 5 git commands to generate.