ceph: cleanup the logic in ceph_invalidatepage
authorMilosz Tanski <milosz@adfin.com>
Fri, 9 Aug 2013 16:59:55 +0000 (12:59 -0400)
committerSage Weil <sage@inktank.com>
Thu, 15 Aug 2013 18:12:02 +0000 (11:12 -0700)
The invalidatepage code bails if it encounters a non-zero page offset. The
current logic that does is non-obvious with multiple if statements.

This should be logically and functionally equivalent.

Signed-off-by: Milosz Tanski <milosz@adfin.com>
Reviewed-by: Sage Weil <sage@inktank.com>
fs/ceph/addr.c

index 722585c..cb78ce8 100644 (file)
@@ -151,6 +151,13 @@ static void ceph_invalidatepage(struct page *page, unsigned int offset,
        struct ceph_snap_context *snapc = page_snap_context(page);
 
        inode = page->mapping->host;
+       ci = ceph_inode(inode);
+
+       if (offset != 0 || length != PAGE_CACHE_SIZE) {
+               dout("%p invalidatepage %p idx %lu partial dirty page %u~%u\n",
+                    inode, page, page->index, offset, length);
+               return;
+       }
 
        /*
         * We can get non-dirty pages here due to races between
@@ -160,21 +167,15 @@ static void ceph_invalidatepage(struct page *page, unsigned int offset,
        if (!PageDirty(page))
                pr_err("%p invalidatepage %p page not dirty\n", inode, page);
 
-       if (offset == 0 && length == PAGE_CACHE_SIZE)
-               ClearPageChecked(page);
+       ClearPageChecked(page);
 
-       ci = ceph_inode(inode);
-       if (offset == 0 && length == PAGE_CACHE_SIZE) {
-               dout("%p invalidatepage %p idx %lu full dirty page\n",
-                    inode, page, page->index);
-               ceph_put_wrbuffer_cap_refs(ci, 1, snapc);
-               ceph_put_snap_context(snapc);
-               page->private = 0;
-               ClearPagePrivate(page);
-       } else {
-               dout("%p invalidatepage %p idx %lu partial dirty page %u(%u)\n",
-                    inode, page, page->index, offset, length);
-       }
+       dout("%p invalidatepage %p idx %lu full dirty page\n",
+            inode, page, page->index);
+
+       ceph_put_wrbuffer_cap_refs(ci, 1, snapc);
+       ceph_put_snap_context(snapc);
+       page->private = 0;
+       ClearPagePrivate(page);
 }
 
 /* just a sanity check */