]> www.infradead.org Git - users/dwmw2/linux.git/commit
vfs: fix page locking deadlocks when deduping files
authorDarrick J. Wong <darrick.wong@oracle.com>
Sun, 11 Aug 2019 22:52:25 +0000 (15:52 -0700)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Tue, 10 Sep 2019 09:35:18 +0000 (10:35 +0100)
commite8f8411a8deffc743abc7a322b4289acb78ac13d
treeeb074ada6d73a5c0828a360c67522b12507eecbc
parenta4234e27ed053eee92c83bd91cf10adb8bab2154
vfs: fix page locking deadlocks when deduping files

[ Upstream commit edc58dd0123b552453a74369bd0c8d890b497b4b ]

When dedupe wants to use the page cache to compare parts of two files
for dedupe, we must be very careful to handle locking correctly.  The
current code doesn't do this.  It must lock and unlock the page only
once if the two pages are the same, since the overlapping range check
doesn't catch this when blocksize < pagesize.  If the pages are distinct
but from the same file, we must observe page locking order and lock them
in order of increasing offset to avoid clashing with writeback locking.

Fixes: 876bec6f9bbfcb3 ("vfs: refactor clone/dedupe_file_range common functions")
Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
Reviewed-by: Bill O'Donnell <billodo@redhat.com>
Reviewed-by: Matthew Wilcox (Oracle) <willy@infradead.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
fs/read_write.c