linux/fs/udf
Jan Kara fa67ac18ef 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: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
History 2017-07-27 15:08:06 -07:00
..
balloc.c udf: Factor out code for creating indirect extent 2015-12-23 18:04:52 +01:00
dir.c block: get rid of bio_rw and READA 2016-07-20 17:37:01 -06:00
directory.c block: get rid of bio_rw and READA 2016-07-20 17:37:01 -06: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 fs: Give dentry to inode_change_ok() instead of inode 2016-09-22 10:56:19 +02:00
ialloc.c fs: Replace current_fs_time() with current_time() 2016-09-27 21:06:22 -04:00
inode.c udf: Fix deadlock between writeback and udf_setsize() 2017-07-27 15:08:06 -07:00
Kconfig udf: Update Kconfig description 2015-01-05 11:04:37 +01:00
lowlevel.c udf: use linux/uaccess.h 2014-07-15 22:40:23 +02:00
Makefile switch udf to simple_fsync() 2009-06-11 21:36:13 -04:00
misc.c udf: remove redundant buffer_head.h includes 2015-03-14 07:54:02 +01:00
namei.c Merge remote-tracking branch 'ovl/rename2' into for-linus 2016-10-10 23:02:51 -04: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: Use correct partition reference number for metadata 2016-05-19 13:00:35 +02:00
super.c udf: Use correct partition reference number for metadata 2016-05-19 13:00:35 +02:00
symlink.c don't put symlink bodies in pagecache into highmem 2015-12-08 22:41:36 -05:00
truncate.c udf: remove redundant buffer_head.h includes 2015-03-14 07:54:02 +01:00
udf_i.h fs: cleanup slight list_entry abuse 2015-06-23 18:01:59 -04:00
udf_sb.h udf: Use correct partition reference number for metadata 2016-05-19 13:00:35 +02:00
udfdecl.h udf: Fix conversion of 'dstring' fields to UTF8 2016-04-25 15:18:50 +02: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: remove redundant sys_tz declaration 2014-09-29 13:45:12 +02:00
unicode.c udf: Fix conversion of 'dstring' fields to UTF8 2016-04-25 15:18:50 +02:00