]> pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - fs/file.c
[PATCH] autofs4: pending flag not cleared on mount fail
[linux-2.6-omap-h63xx.git] / fs / file.c
index 55f4e70225631b275f85215ee543b104507caacc..8d3bfca7714bf35e9e982caa761bb5c549909bc6 100644 (file)
--- a/fs/file.c
+++ b/fs/file.c
@@ -240,13 +240,9 @@ static struct fdtable *alloc_fdtable(int nr)
        if (!fdt)
                goto out;
 
-       nfds = 8 * L1_CACHE_BYTES;
-       /* Expand to the max in easy steps */
-       while (nfds <= nr) {
-               nfds = nfds * 2;
-               if (nfds > NR_OPEN)
-                       nfds = NR_OPEN;
-       }
+       nfds = max_t(int, 8 * L1_CACHE_BYTES, roundup_pow_of_two(nr + 1));
+       if (nfds > NR_OPEN)
+               nfds = NR_OPEN;
 
        new_openset = alloc_fdset(nfds);
        new_execset = alloc_fdset(nfds);
@@ -277,16 +273,16 @@ static struct fdtable *alloc_fdtable(int nr)
        } while (nfds <= nr);
        new_fds = alloc_fd_array(nfds);
        if (!new_fds)
-               goto out;
+               goto out2;
        fdt->fd = new_fds;
        fdt->max_fds = nfds;
        fdt->free_files = NULL;
        return fdt;
+out2:
+       nfds = fdt->max_fdset;
 out:
-       if (new_openset)
-               free_fdset(new_openset, nfds);
-       if (new_execset)
-               free_fdset(new_execset, nfds);
+       free_fdset(new_openset, nfds);
+       free_fdset(new_execset, nfds);
        kfree(fdt);
        return NULL;
 }