Brian Behlendorf 74328ee18f Fix zfs_putpage() lock inversion
There exists a lock inversions involving the zfs range lock and the
individual page writeback bits which can result in a deadlock.  To
prevent this we must always manipulate the writeback bit while
holding the range lock.  The exact deadlock is as follows:

------ Process A ------        ------ Process B ------
zpl_writepages                 zpl_fallocate
write_cache_pages              zpl_fallocate_common
zpl_putpage                    zfs_space
zfs_putpage (set bit)          zfs_freesp
zfs_range_lock (wait on lock)  zfs_free_range (take lock)
[has not yet initiated I/O,    truncate_inode_pages_range
the bit will not be cleared]   wait_on_page_writeback (wait on bit)

Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>
Signed-off-by: Tim Chase <tim@chase2k.com>
Signed-off-by: Richard Yao <richard.yao@clusterhq.com>
Issue #2976
2014-12-22 09:31:56 -08:00
..
2014-11-19 12:30:39 -05:00
2014-08-01 14:28:05 -07:00
2013-09-04 16:01:24 -07:00
2014-08-01 14:28:05 -07:00
2014-11-17 11:13:45 -08:00
2014-11-17 11:25:48 -08:00
2013-12-18 16:46:35 -08:00
2014-07-29 10:55:29 -07:00
2013-12-18 16:46:35 -08:00
2014-11-17 11:35:38 -08:00
2014-08-01 14:28:05 -07:00
2014-08-20 10:45:16 -07:00
2013-12-18 16:46:35 -08:00
2013-12-18 16:46:35 -08:00
2013-09-04 16:01:24 -07:00
2013-09-25 15:44:22 -07:00
2010-08-31 13:41:59 -07:00
2010-08-31 13:41:58 -07:00
2014-10-17 14:58:57 -07:00
2014-10-17 14:58:57 -07:00
2014-11-17 11:13:45 -08:00
2013-10-31 14:58:04 -07:00
2012-08-27 12:01:37 -07:00
2014-07-28 14:29:58 -07:00
2014-10-17 14:59:05 -07:00
2013-10-31 14:58:04 -07:00
2013-10-31 14:58:04 -07:00
2014-07-30 09:20:35 -07:00
2014-11-17 11:13:45 -08:00
2014-07-28 14:29:58 -07:00
2010-08-31 13:41:58 -07:00
2014-07-29 10:55:29 -07:00
2014-08-20 10:45:16 -07:00
2013-10-30 14:51:27 -07:00
2013-10-31 14:58:04 -07:00
2014-09-05 15:11:43 -07:00
2013-12-18 16:46:35 -08:00
2013-12-18 16:46:35 -08:00
2014-11-17 11:13:45 -08:00
2014-12-22 09:31:56 -08:00
2014-10-22 11:06:53 -07:00
2014-11-14 14:39:43 -08:00
2014-08-01 14:28:05 -07:00
2014-08-01 14:28:05 -07:00
2013-12-18 16:46:35 -08:00
2013-12-18 16:46:35 -08:00
2014-10-20 16:10:25 -07:00
2013-12-18 16:46:35 -08:00
2014-09-05 15:11:43 -07:00
2010-09-17 16:24:15 -07:00
2014-01-14 14:46:12 -08:00