linux-stable-rt/fs
Peter Staubach a1a5b3d93c [PATCH] open returns ENFILE but creates file anyway
When open(O_CREAT) is called and the error, ENFILE, is returned, the file
may be created anyway.  This is counter intuitive, against the SUS V3
specification, and may cause applications to misbehave if they are not
coded correctly to handle this semantic.  The SUS V3 specification
explicitly states "No files shall be created or modified if the function
returns -1.".

The error, ENFILE, is used to indicate the system wide open file table is
full and no more file structs can be allocated.

This is due to an ordering problem.  The entry in the directory is created
before the file struct is allocated.  If the allocation for the file struct
fails, then the system call must return an error, but the directory entry
was already created and can not be safely removed.

The solution to this situation is relatively easy.  The file struct should
be allocated before the directory entry is created.  If the allocation
fails, then the error can be returned directly.  If the creation of the
directory entry fails, then the file struct can be easily freed.

Signed-off-by: Peter Staubach <staubach@redhat.com>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
2005-09-13 08:22:28 -07:00
..
9p [PATCH] v9fs: fix handling of malformed 9P messages 2005-09-09 13:57:58 -07:00
adfs [ARM] fs/adfs/adfs.h: "extern inline" doesn't make sense 2005-08-20 17:20:28 +01:00
affs [PATCH] update filesystems for new delete_inode behavior 2005-09-09 13:57:27 -07:00
afs [PATCH] Fix up symlink function pointers 2005-08-19 18:08:21 -07:00
autofs [PATCH] autofs: fix "busy inodes after umount..." 2005-09-09 13:57:31 -07:00
autofs4 [PATCH] Fix up symlink function pointers 2005-08-19 18:08:21 -07:00
befs befs: fix up missed follow_link declaration change 2005-08-20 13:20:01 -07:00
bfs [PATCH] bfs: fix endianness, signedness; add trivial bugfix 2005-09-09 13:57:32 -07:00
cifs [PATCH] fs: fix-up schedule_timeout() usage 2005-09-10 10:06:36 -07:00
coda
cramfs [PATCH] fs/cramfs/uncompress.c should #include <linux/cramfs_fs.h> 2005-09-10 10:06:35 -07:00
debugfs
devfs [PATCH] Fix up symlink function pointers 2005-08-19 18:08:21 -07:00
devpts [PATCH] Generic VFS fallback for security xattrs 2005-09-05 00:05:52 -07:00
efs
exportfs
ext2 [PATCH] ext2: Enable atomic inode security labeling 2005-09-09 13:57:27 -07:00
ext3 [PATCH] ext3: Enable atomic inode security labeling 2005-09-09 13:57:28 -07:00
fat [PATCH] update filesystems for new delete_inode behavior 2005-09-09 13:57:27 -07:00
freevxfs [PATCH] fs: convert kcalloc to kzalloc 2005-09-07 16:57:46 -07:00
fuse [PATCH] FUSE: don't allow restarting of system calls 2005-09-09 14:03:48 -07:00
hfs [PATCH] hfs: NLS support 2005-09-07 16:57:50 -07:00
hfsplus [PATCH] Change HFS+ to not use ll_rw_block() 2005-09-07 16:57:56 -07:00
hostfs [PATCH] update filesystems for new delete_inode behavior 2005-09-09 13:57:27 -07:00
hpfs [PATCH] update filesystems for new delete_inode behavior 2005-09-09 13:57:27 -07:00
hppfs [PATCH] hppfs: fix symlink error path 2005-08-26 11:39:19 -07:00
hugetlbfs
isofs
jbd [PATCH] fs: fix-up schedule_timeout() usage 2005-09-10 10:06:36 -07:00
jffs [PATCH] janitor: jffs/intrep: list_for_each_entry 2005-09-10 10:06:32 -07:00
jffs2 [PATCH] jffs/jffs2: remove wrong function prototypes 2005-09-07 16:57:29 -07:00
jfs Merge branch 'for-linus' from kernel.org:/.../shaggy/jfs-2.6 manually 2005-09-11 10:14:54 -07:00
lockd [PATCH] fs: fix-up schedule_timeout() usage 2005-09-10 10:06:36 -07:00
minix [PATCH] update filesystems for new delete_inode behavior 2005-09-09 13:57:27 -07:00
msdos
ncpfs [PATCH] update filesystems for new delete_inode behavior 2005-09-09 13:57:27 -07:00
nfs [PATCH] fs: fix-up schedule_timeout() usage 2005-09-10 10:06:36 -07:00
nfs_common [PATCH] NFS: Ensure ACL xdr code doesn't overflow. 2005-08-16 08:52:11 -07:00
nfsd [PATCH] sunrpc: cache_register can use wrong module reference 2005-09-07 16:57:25 -07:00
nls
ntfs NTFS: Mask out __GFP_HIGHMEM when doing kmalloc() in __ntfs_malloc() as it 2005-09-12 15:43:03 +01:00
openpromfs
partitions
proc [PATCH] files: lock-free fd look-up 2005-09-09 13:57:55 -07:00
qnx4 [PATCH] update filesystems for new delete_inode behavior 2005-09-09 13:57:27 -07:00
ramfs
reiserfs [PATCH] fs: fix-up schedule_timeout() usage 2005-09-10 10:06:36 -07:00
relayfs [PATCH] relayfs 2005-09-07 16:57:18 -07:00
romfs
smbfs [PATCH] fs: fix-up schedule_timeout() usage 2005-09-10 10:06:36 -07:00
sysfs [PATCH] Fix oops in sysfs_hash_and_remove_file() 2005-08-26 19:37:13 -07:00
sysv [PATCH] update filesystems for new delete_inode behavior 2005-09-09 13:57:27 -07:00
udf [PATCH] update filesystems for new delete_inode behavior 2005-09-09 13:57:27 -07:00
ufs [PATCH] update filesystems for new delete_inode behavior 2005-09-09 13:57:27 -07:00
vfat
xfs [PATCH] fs: fix-up schedule_timeout() usage 2005-09-10 10:06:36 -07:00
Kconfig [PATCH] FUSE - MAINTAINERS, Kconfig and Makefile changes 2005-09-09 14:03:44 -07:00
Kconfig.binfmt
Makefile [PATCH] FUSE - MAINTAINERS, Kconfig and Makefile changes 2005-09-09 14:03:44 -07:00
aio.c [PATCH] files: files struct with RCU 2005-09-09 13:57:55 -07:00
attr.c
bad_inode.c
binfmt_aout.c
binfmt_elf.c
binfmt_elf_fdpic.c
binfmt_em86.c
binfmt_flat.c [PATCH] uclinux: use MAP_PRIVATE when mmaping code regions in flat binary loader 2005-09-02 00:57:31 -07:00
binfmt_misc.c
binfmt_script.c
binfmt_som.c
bio.c [PATCH] bogus cast in bio.c 2005-09-09 10:31:58 -07:00
block_dev.c
buffer.c [PATCH] spinlock consolidation 2005-09-10 10:06:21 -07:00
char_dev.c
compat.c Preempt-safe RCU file usage 2005-09-09 15:42:34 -07:00
compat_ioctl.c [PATCH] Lost sockfd_put() in routing_ioctl() 2005-09-09 14:24:05 -07:00
dcache.c [PATCH] janitor: fs/dcache.c: list_for_each* 2005-09-10 10:06:32 -07:00
dcookies.c
direct-io.c
dnotify.c
dquot.c
eventpoll.c
exec.c [PATCH] files: break up files struct 2005-09-09 13:57:55 -07:00
fcntl.c [PATCH] files: lock-free fd look-up 2005-09-09 13:57:55 -07:00
fifo.c
file.c [PATCH] files: files struct with RCU 2005-09-09 13:57:55 -07:00
file_table.c [PATCH] files: files struct with RCU 2005-09-09 13:57:55 -07:00
filesystems.c
fs-writeback.c
inode.c [PATCH] move truncate_inode_pages() into ->delete_inode() 2005-09-09 13:57:26 -07:00
inotify.c [PATCH] inotify: fix event loss on hardlinked files 2005-09-07 16:57:39 -07:00
ioctl.c
ioprio.c Don't allow normal users to set idle IO priority 2005-08-20 18:51:29 -07:00
libfs.c
locks.c [PATCH] files: break up files struct 2005-09-09 13:57:55 -07:00
mbcache.c
mpage.c
namei.c [PATCH] remove the inode_post_link and inode_post_rename LSM hooks 2005-09-09 13:57:28 -07:00
namespace.c [PATCH] janitor: fs/namespace.c: list_for_each_entry 2005-09-10 10:06:32 -07:00
nfsctl.c
open.c [PATCH] open returns ENFILE but creates file anyway 2005-09-13 08:22:28 -07:00
pipe.c [PATCH] sched: TASK_NONINTERACTIVE 2005-09-10 10:06:22 -07:00
posix_acl.c
quota.c
quota_v1.c
quota_v2.c
read_write.c [PATCH] remove file.f_maxcount 2005-09-07 16:57:32 -07:00
readdir.c
select.c [PATCH] files: lock-free fd look-up 2005-09-09 13:57:55 -07:00
seq_file.c
stat.c
super.c
xattr.c [PATCH] fsnotify: hook on removexattr, too 2005-09-07 16:57:27 -07:00
xattr_acl.c