]> git.neil.brown.name Git - LaFS.git/commitdiff
Hold reference while erasing blocks in lafs_invalidate_page
authorNeilBrown <neilb@suse.de>
Wed, 15 Sep 2010 03:56:02 +0000 (13:56 +1000)
committerNeilBrown <neilb@suse.de>
Wed, 15 Sep 2010 03:56:02 +0000 (13:56 +1000)
else we sometimes violate assertions about having non-zero refcount

Signed-off-by: NeilBrown <neilb@suse.de>
block.c

diff --git a/block.c b/block.c
index 638764798198b2bb51ed3714f7aecfad6e70c734..21aecd6d500bda4cfcb1ab37001223930dc03fbf 100644 (file)
--- a/block.c
+++ b/block.c
@@ -200,6 +200,7 @@ void lafs_invalidate_page(struct page *page, unsigned long offset)
                 *   wait for any pending IO to complete (so page can be freed)
                 */
                for (i = 0; i < (1<<bits); i++) {
+                       getref_locked(&b[i].b, MKREF(inval));
                        if (b_start >= offset &&
                            test_and_clear_bit(B_Async, &b[i].b.flags))
                                putdref(&b[i], MKREF(Async));
@@ -222,6 +223,7 @@ void lafs_invalidate_page(struct page *page, unsigned long offset)
                        LAFS_BUG(offset == 0 &&
                                 test_bit(B_IOLock, &b[i].b.flags),
                                 &b[i].b);
+                       putdref(&b[i], MKREF(inval));
                }
        }
        if (offset == 0) {