freebsd-dev/module
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
..
avl Explicitly include SPL compat headers 2014-11-19 12:30:39 -05:00
nvpair Explicitly include SPL compat headers 2014-11-19 12:30:39 -05:00
unicode Explicitly include SPL compat headers 2014-11-19 12:30:39 -05:00
zcommon Explicitly include SPL compat headers 2014-11-19 12:30:39 -05:00
zfs Fix zfs_putpage() lock inversion 2014-12-22 09:31:56 -08:00
zpios Explicitly include SPL compat headers 2014-11-19 12:30:39 -05:00
.gitignore gitignore: anchor entries at their respective directory 2013-04-02 10:50:17 -07:00
Makefile.in Fix modules installation directory 2014-10-28 09:46:14 -07:00