linux/fs/udf
Al Viro b231509616 udf: fix the udf_iget() vs. udf_new_inode() races
Currently udf_iget() (triggered by NFS) can race with udf_new_inode()
leading to two inode structures with the same inode number:

nfsd: iget_locked() creates inode
nfsd: try to read from disk, block on that.
udf_new_inode(): allocate inode with that inumber
udf_new_inode(): insert it into icache, set it up and dirty
udf_write_inode(): write inode into buffer cache
nfsd: get CPU again, look into buffer cache, see nice and sane on-disk
  inode, set the in-core inode from it

Fix the problem by putting inode into icache in locked state (I_NEW set)
and unlocking it only after it's fully set up.

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Signed-off-by: Jan Kara <jack@suse.cz>
2014-09-04 21:37:41 +02:00
..
balloc.c udf: Fix handling of i_blocks 2012-02-29 21:53:47 +01:00
dir.c [readdir] convert udf 2013-06-29 12:46:50 +04:00
directory.c udf: Neaten udf_debug uses 2011-10-31 23:43:58 +01:00
ecma_167.h
file.c udf: avoid redundant memcpy when writing data in ICB 2014-07-15 22:40:24 +02:00
ialloc.c udf: fix the udf_iget() vs. udf_new_inode() races 2014-09-04 21:37:41 +02:00
inode.c udf: Set i_generation field 2014-09-04 21:37:40 +02:00
Kconfig Merge branch 'for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jack/linux-udf-2.6 2011-01-11 14:45:52 -08:00
lowlevel.c udf: use linux/uaccess.h 2014-07-15 22:40:23 +02:00
Makefile
misc.c udf: Rename udf_error to udf_err 2011-10-10 19:29:01 +02:00
namei.c udf: fix the udf_iget() vs. udf_new_inode() races 2014-09-04 21:37:41 +02:00
osta_udf.h
partition.c udf: Cleanup metadata flags handling 2011-10-31 23:49:48 +01:00
super.c udf: Make udf_read_inode() and udf_iget() return error 2014-09-04 21:36:35 +02:00
symlink.c udf: use linux/uaccess.h 2014-07-15 22:40:23 +02:00
truncate.c udf: Do not decrement i_blocks when freeing indirect extent block 2012-07-09 13:24:21 +02:00
udf_i.h udf: add extent cache support in case of file reading 2013-01-22 10:48:31 +01:00
udf_sb.h udf: Fortify LVID loading 2013-09-24 11:23:33 +02:00
udfdecl.h udf: Make udf_read_inode() and udf_iget() return error 2014-09-04 21:36:35 +02:00
udfend.h
udftime.c udf: Convert printks to pr_<level> 2011-10-31 23:43:52 +01:00
unicode.c fs/udf: re-use hex_asc_upper_{hi,lo} macros 2014-07-15 22:40:24 +02:00