ceph: use mapping->nrpages to determine if mapping is empty
authorSage Weil <sage@newdream.net>
Fri, 17 Sep 2010 17:46:44 +0000 (10:46 -0700)
committerSage Weil <sage@newdream.net>
Wed, 20 Oct 2010 22:38:15 +0000 (15:38 -0700)
This is simpler and faster.

Signed-off-by: Sage Weil <sage@newdream.net>
fs/ceph/caps.c

index 3c03460f48bd9ada890d6f014a7b1120927e4b3a..98ab13e2b71d9d8ebcbf1715da112d78cb0bac17 100644 (file)
@@ -1417,17 +1417,6 @@ static int __mark_caps_flushing(struct inode *inode,
 /*
  * try to invalidate mapping pages without blocking.
  */
-static int mapping_is_empty(struct address_space *mapping)
-{
-       struct page *page = find_get_page(mapping, 0);
-
-       if (!page)
-               return 1;
-
-       put_page(page);
-       return 0;
-}
-
 static int try_nonblocking_invalidate(struct inode *inode)
 {
        struct ceph_inode_info *ci = ceph_inode(inode);
@@ -1437,7 +1426,7 @@ static int try_nonblocking_invalidate(struct inode *inode)
        invalidate_mapping_pages(&inode->i_data, 0, -1);
        spin_lock(&inode->i_lock);
 
-       if (mapping_is_empty(&inode->i_data) &&
+       if (inode->i_data.nrpages == 0 &&
            invalidating_gen == ci->i_rdcache_gen) {
                /* success. */
                dout("try_nonblocking_invalidate %p success\n", inode);