aboutsummaryrefslogtreecommitdiffstats
path: root/fs/open.c
diff options
context:
space:
mode:
Diffstat (limited to 'fs/open.c')
-rw-r--r--fs/open.c12
1 files changed, 8 insertions, 4 deletions
diff --git a/fs/open.c b/fs/open.c
index 70e0230d8e77..7d02d19bd0a2 100644
--- a/fs/open.c
+++ b/fs/open.c
@@ -890,6 +890,10 @@ EXPORT_SYMBOL(filp_open);
890 * a fully instantiated struct file to the caller. 890 * a fully instantiated struct file to the caller.
891 * This function is meant to be called from within a filesystem's 891 * This function is meant to be called from within a filesystem's
892 * lookup method. 892 * lookup method.
893 * Beware of calling it for non-regular files! Those ->open methods might block
894 * (e.g. in fifo_open), leaving you with parent locked (and in case of fifo,
895 * leading to a deadlock, as nobody can open that fifo anymore, because
896 * another process to open fifo will block on locked parent when doing lookup).
893 * Note that in case of error, nd->intent.open.file is destroyed, but the 897 * Note that in case of error, nd->intent.open.file is destroyed, but the
894 * path information remains valid. 898 * path information remains valid.
895 * If the open callback is set to NULL, then the standard f_op->open() 899 * If the open callback is set to NULL, then the standard f_op->open()
@@ -973,7 +977,7 @@ repeat:
973 fdt = files_fdtable(files); 977 fdt = files_fdtable(files);
974 fd = find_next_zero_bit(fdt->open_fds->fds_bits, 978 fd = find_next_zero_bit(fdt->open_fds->fds_bits,
975 fdt->max_fdset, 979 fdt->max_fdset,
976 fdt->next_fd); 980 files->next_fd);
977 981
978 /* 982 /*
979 * N.B. For clone tasks sharing a files structure, this test 983 * N.B. For clone tasks sharing a files structure, this test
@@ -998,7 +1002,7 @@ repeat:
998 1002
999 FD_SET(fd, fdt->open_fds); 1003 FD_SET(fd, fdt->open_fds);
1000 FD_CLR(fd, fdt->close_on_exec); 1004 FD_CLR(fd, fdt->close_on_exec);
1001 fdt->next_fd = fd + 1; 1005 files->next_fd = fd + 1;
1002#if 1 1006#if 1
1003 /* Sanity check */ 1007 /* Sanity check */
1004 if (fdt->fd[fd] != NULL) { 1008 if (fdt->fd[fd] != NULL) {
@@ -1019,8 +1023,8 @@ static void __put_unused_fd(struct files_struct *files, unsigned int fd)
1019{ 1023{
1020 struct fdtable *fdt = files_fdtable(files); 1024 struct fdtable *fdt = files_fdtable(files);
1021 __FD_CLR(fd, fdt->open_fds); 1025 __FD_CLR(fd, fdt->open_fds);
1022 if (fd < fdt->next_fd) 1026 if (fd < files->next_fd)
1023 fdt->next_fd = fd; 1027 files->next_fd = fd;
1024} 1028}
1025 1029
1026void fastcall put_unused_fd(unsigned int fd) 1030void fastcall put_unused_fd(unsigned int fd)