linux/fs/udf
Jan Kara cd5c538dcc udf: Fix deadlock between writeback and udf_setsize()
commit f2e9535589 upstream.

udf_setsize() called truncate_setsize() with i_data_sem held. Thus
truncate_pagecache() called from truncate_setsize() could lock a page
under i_data_sem which can deadlock as page lock ranks below
i_data_sem - e. g. writeback can hold page lock and try to acquire
i_data_sem to map a block.

Fix the problem by moving truncate_setsize() calls from under
i_data_sem. It is safe for us to change i_size without holding
i_data_sem as all the places that depend on i_size being stable already
hold inode_lock.

Fixes: 7e49b6f248
Signed-off-by: Jan Kara <jack@suse.cz>
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
History 2017-10-12 15:27:49 +01:00
..
balloc.c udf: Fix handling of i_blocks 2012-02-29 21:53:47 +01:00
dir.c udf: Check path length when reading symlink 2015-01-15 10:44:51 +00:00
directory.c udf: Neaten udf_debug uses 2011-10-31 23:43:58 +01:00
ecma_167.h Remove struct typedefs from fs/udf/ecma_167.h et al. 2009-04-02 12:29:47 +02:00
file.c udf: Fix races with i_size changes during readpage 2017-10-12 15:27:49 +01:00
ialloc.c udf: Fortify LVID loading 2013-09-24 11:23:33 +02:00
inode.c udf: Fix deadlock between writeback and udf_setsize() 2017-10-12 15:27:49 +01: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: Neaten udf_debug uses 2011-10-31 23:43:58 +01:00
Makefile switch udf to simple_fsync() 2009-06-11 21:36:13 -04:00
misc.c udf: Rename udf_error to udf_err 2011-10-10 19:29:01 +02:00
namei.c udf: Check path length when reading symlink 2015-01-15 10:44:51 +00:00
osta_udf.h Remove struct typedefs from fs/udf/ecma_167.h et al. 2009-04-02 12:29:47 +02:00
partition.c udf: Cleanup metadata flags handling 2011-10-31 23:49:48 +01:00
super.c Merge branch 'for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jack/linux-fs 2014-04-07 17:59:17 -07:00
symlink.c udf: Check component length before reading it 2015-01-15 10:44:53 +00: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: Check path length when reading symlink 2015-01-15 10:44:51 +00:00
udfend.h Remove struct typedefs from fs/udf/ecma_167.h et al. 2009-04-02 12:29:47 +02:00
udftime.c udf: Convert printks to pr_<level> 2011-10-31 23:43:52 +01:00
unicode.c udf: Check output buffer length when converting name to CS0 2016-02-02 19:09:17 +00:00