]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
kclient: fix leaking page refs in writepages?
authorSage Weil <sage@newdream.net>
Sat, 3 May 2008 03:14:20 +0000 (20:14 -0700)
committerSage Weil <sage@newdream.net>
Sat, 3 May 2008 03:14:20 +0000 (20:14 -0700)
src/kernel/addr.c

index 53c8295cd9556a285e38f7ab51909fab7350d7e9..a361e4ad62a2d38db94656e9c4892e15ccefe781 100644 (file)
@@ -301,13 +301,12 @@ get_more_pages:
                        next = page->index + 1;
                }
 
-               if (locked_pages == 0)
-                       break;
-
-               if (pages) {
+               if (pages && i) {
                        int j;
+                       BUG_ON(!locked_pages);
+
                        if (pvec_pages && i == pvec_pages &&
-                           locked_pages && locked_pages < max_pages) {
+                           locked_pages < max_pages) {
                                dout(50, "reached end pvec, trying for more\n");
                                pagevec_reinit(&pvec);
                                goto get_more_pages;
@@ -376,6 +375,9 @@ get_more_pages:
                }
                dout(50, "pagevec_release on %d pages\n", (int)pvec.nr);
                pagevec_release(&pvec);
+
+               if (locked_pages == 0)
+                       break;
        }
 
        if (should_loop && !done) {