From 9e453c46ce8b1c24d1e1b5e7b7c86f9abd4676d3 Mon Sep 17 00:00:00 2001 From: Kent Overstreet Date: Tue, 12 Apr 2016 03:31:46 -0800 Subject: bcachefs: fix a deadlock pagecache add lock/page lock locking inversion --- drivers/md/bcache/fs-io.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/drivers/md/bcache/fs-io.c b/drivers/md/bcache/fs-io.c index 471cb0619e4d..635afcb140fa 100644 --- a/drivers/md/bcache/fs-io.c +++ b/drivers/md/bcache/fs-io.c @@ -745,6 +745,9 @@ int bch_readpages(struct file *file, struct address_space *mapping, pr_debug("reading %u pages", nr_pages); + if (current->pagecache_lock != &mapping->add_lock) + pagecache_add_get(&mapping->add_lock); + for_each_readpage_page(mapping, pages, nr_pages, page) { again: if (!rbio) { @@ -767,6 +770,9 @@ again: if (rbio) bchfs_read(c, rbio, inode->i_ino); + if (current->pagecache_lock != &mapping->add_lock) + pagecache_add_put(&mapping->add_lock); + pr_debug("success"); return 0; } -- cgit v1.2.3