#include <linux/module.h>
#include <linux/security.h>
#include <linux/ptrace.h>
+#include <linux/vs_limit.h>
#include <asm/poll.h>
#include <asm/siginfo.h>
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)
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);
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);
return -EINVAL;
}
- if (filp->f_op && filp->f_op->check_flags)
- error = filp->f_op->check_flags(arg);
- if (error)
- return error;
-
lock_kernel();
if ((arg ^ filp->f_flags) & FASYNC) {
if (filp->f_op && filp->f_op->fasync) {
EXPORT_SYMBOL(f_delown);
-static long do_fcntl(int fd, unsigned int cmd, unsigned long arg,
- struct file *filp)
+long generic_file_fcntl(int fd, unsigned int cmd,
+ unsigned long arg, struct file *filp)
{
long err = -EINVAL;
}
return err;
}
+EXPORT_SYMBOL(generic_file_fcntl);
+
+static long do_fcntl(int fd, unsigned int cmd,
+ unsigned long arg, struct file *filp)
+{
+ if (filp->f_op && filp->f_op->fcntl)
+ return filp->f_op->fcntl(fd, cmd, arg, filp);
+ return generic_file_fcntl(fd, cmd, arg, filp);
+}
asmlinkage long sys_fcntl(int fd, unsigned int cmd, unsigned long arg)
{