diff --git a/fs/ceph/addr.c b/fs/ceph/addr.c
index 2a571fb4803b8e296f10ad2e21eaf3124769b742..e53f24b15b12dc0c1be74a90b84bedf26c65440d 100644
--- a/fs/ceph/addr.c
+++ b/fs/ceph/addr.c
@@ -314,7 +314,7 @@ static int start_read(struct inode *inode, struct list_head *page_list, int max)
 		return PTR_ERR(req);
 
 	/* build page vector */
-	nr_pages = len >> PAGE_CACHE_SHIFT;
+	nr_pages = calc_pages_for(0, len);
 	pages = kmalloc(sizeof(*pages) * nr_pages, GFP_NOFS);
 	ret = -ENOMEM;
 	if (!pages)