#include <asm/uaccess.h>
#include <linux/fs.h>
#include <linux/pagemap.h>
-#include <linux/vs_base.h>
+#include <linux/syscalls.h>
#include <linux/vs_limit.h>
#include <linux/vs_dlimit.h>
#include <linux/vserver/xid.h>
newattrs.ia_size = length;
newattrs.ia_valid = ATTR_SIZE | ATTR_CTIME;
+
down(&dentry->d_inode->i_sem);
- down_write(&dentry->d_inode->i_alloc_sem);
err = notify_change(dentry, &newattrs);
- up_write(&dentry->d_inode->i_alloc_sem);
up(&dentry->d_inode->i_sem);
return err;
}
* N.B. For clone tasks sharing a files structure, this test
* will limit the total number of files that can be opened.
*/
- if (fd >= current->rlim[RLIMIT_NOFILE].rlim_cur)
+ if (fd >= current->signal->rlim[RLIMIT_NOFILE].rlim_cur)
goto out;
- /* Do we need to expand the fdset array? */
- if (fd >= files->max_fdset) {
- error = expand_fdset(files, fd);
- if (!error) {
- error = -EMFILE;
- goto repeat;
- }
- goto out;
- }
-
- /*
- * Check whether we need to expand the fd array.
- */
- if (fd >= files->max_fds) {
- error = expand_fd_array(files, fd);
- if (!error) {
- error = -EMFILE;
- goto repeat;
- }
+ /* Do we need to expand the fd array or fd set? */
+ error = expand_files(files, fd);
+ if (error < 0)
goto out;
+
+ if (error) {
+ /*
+ * If we needed to expand the fs array we
+ * might have blocked - try again.
+ */
+ error = -EMFILE;
+ goto repeat;
}
FD_SET(fd, files->open_fds);
FD_CLR(fd, files->close_on_exec);
files->next_fd = fd + 1;
- // vx_openfd_inc(fd);
+ vx_openfd_inc(fd);
#if 1
/* Sanity check */
if (files->fd[fd] != NULL) {
__FD_CLR(fd, files->open_fds);
if (fd < files->next_fd)
files->next_fd = fd;
- // vx_openfd_dec(fd);
+ vx_openfd_dec(fd);
}
void fastcall put_unused_fd(unsigned int fd)