diff --git a/fs/ceph/addr.c b/fs/ceph/addr.c index bf535815592db1882a02a1a5d8382fa38e88854b..d0cdceb0b90bfa9b87922492048ee58c5d8ca473 100644 --- a/fs/ceph/addr.c +++ b/fs/ceph/addr.c @@ -448,8 +448,13 @@ static int writepage_nounlock(struct page *page, struct writeback_control *wbc) 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; }