Fixes a deadlock that is triggered due to kswapd,
while the page was locked and the iput couldn't tear
down the address space.
Signed-off-by: Yehuda Sadeh <yehuda@hq.newdream.net>
static int ceph_writepage(struct page *page, struct writeback_control *wbc)
{
- int err = writepage_nounlock(page, wbc);
+ int err;
+ struct inode *inode = page->mapping->host;
+ BUG_ON(!inode);
+ igrab(inode);
+ err = writepage_nounlock(page, wbc);
unlock_page(page);
+ iput(inode);
return err;
}