In some cases the ceph readapages code code bails without filling all the pages
already marked by fscache. When we return back to readahead code this causes
a BUG.

Signed-off-by: Milosz Tanski <mil...@adfin.com>
---
 fs/ceph/addr.c  | 2 ++
 fs/ceph/cache.h | 7 +++++++
 2 files changed, 9 insertions(+)

diff --git a/fs/ceph/addr.c b/fs/ceph/addr.c
index 632bb48..e8ea383 100644
--- a/fs/ceph/addr.c
+++ b/fs/ceph/addr.c
@@ -413,6 +413,8 @@ static int ceph_readpages(struct file *file, struct 
address_space *mapping,
                BUG_ON(rc == 0);
        }
 out:
+       ceph_fscache_readpages_cancel(inode, page_list);
+
        dout("readpages %p file %p ret %d\n", inode, file, rc);
        return rc;
 }
diff --git a/fs/ceph/cache.h b/fs/ceph/cache.h
index 23f2666..a0642ee 100644
--- a/fs/ceph/cache.h
+++ b/fs/ceph/cache.h
@@ -81,6 +81,13 @@ static inline int ceph_release_fscache_page(struct page 
*page, gfp_t gfp)
        return fscache_maybe_release_page(ci->fscache, page, gfp);
 }
 
+static inline void ceph_fscache_readpages_cancel(struct inode *inode,
+                                                struct list_head *pages)
+{
+       struct ceph_inode_info *ci = ceph_inode(inode);
+       return fscache_readpages_cancel(ci->fscache, pages);
+}
+
 #else
 
 static inline int ceph_readpage_from_fscache(struct inode* inode,
-- 
1.8.1.2

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to