This commit was manufactured by cvs2svn to create tag
[linux-2.6.git] / fs / fcntl.c
index abad0aa..4b75518 100644 (file)
@@ -107,6 +107,8 @@ repeat:
        error = -EMFILE;
        if (newfd >= current->rlim[RLIMIT_NOFILE].rlim_cur)
                goto out;
+       if (!vx_files_avail(1))
+               goto out;
 
        error = expand_files(files, newfd);
        if (error < 0)
@@ -128,7 +130,7 @@ out:
        return error;
 }
 
-static int dupfd(struct file *file, unsigned int start)
+int dupfd(struct file *file, unsigned int start)
 {
        struct files_struct * files = current->files;
        int fd;
@@ -139,6 +141,7 @@ static int dupfd(struct file *file, unsigned int start)
                FD_SET(fd, files->open_fds);
                FD_CLR(fd, files->close_on_exec);
                spin_unlock(&files->file_lock);
+               vx_openfd_inc(fd);
                fd_install(fd, file);
        } else {
                spin_unlock(&files->file_lock);
@@ -148,6 +151,8 @@ static int dupfd(struct file *file, unsigned int start)
        return fd;
 }
 
+EXPORT_SYMBOL_GPL(dupfd);
+
 asmlinkage long sys_dup2(unsigned int oldfd, unsigned int newfd)
 {
        int err = -EBADF;
@@ -186,6 +191,7 @@ asmlinkage long sys_dup2(unsigned int oldfd, unsigned int newfd)
        FD_SET(newfd, files->open_fds);
        FD_CLR(newfd, files->close_on_exec);
        spin_unlock(&files->file_lock);
+       vx_openfd_inc(newfd);
 
        if (tofree)
                filp_close(tofree, files);
@@ -627,15 +633,12 @@ void kill_fasync(struct fasync_struct **fp, int sig, int band)
                read_unlock(&fasync_lock);
        }
 }
-
 EXPORT_SYMBOL(kill_fasync);
 
 static int __init fasync_init(void)
 {
        fasync_cache = kmem_cache_create("fasync_cache",
-               sizeof(struct fasync_struct), 0, 0, NULL, NULL);
-       if (!fasync_cache)
-               panic("cannot create fasync slab cache");
+               sizeof(struct fasync_struct), 0, SLAB_PANIC, NULL, NULL);
        return 0;
 }