]> git.neil.brown.name Git - LaFS.git/commitdiff
lafs_free_get: fix refcounting problem.
authorNeilBrown <neilb@suse.de>
Tue, 3 May 2011 03:55:39 +0000 (13:55 +1000)
committerNeilBrown <neilb@suse.de>
Tue, 3 May 2011 03:55:39 +0000 (13:55 +1000)
We are re-using 'ssum' here and can lose a reference.
So use a new ssum2 instead, and fix the BUG trigger.

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

index ac83ca98d3facd5340253f5c6a1a7537be2e7e16..e1c5a22a0b40e2a63ab6e38cd353eb80fa99ddc7 100644 (file)
@@ -1264,15 +1264,16 @@ again:
         * NOTE: this needs fixing to support snapshots. Later.
         */
        for (ssnum = 0; ssnum < 1 ; ssnum++) {
-               ssum = segsum_find(fs, ss->segment, ss->dev, ssnum);
-               if (IS_ERR(ss))
+               struct segsum *ssum2;
+               ssum2 = segsum_find(fs, ss->segment, ss->dev, ssnum);
+               if (IS_ERR(ssum2))
                        /* ?? what do I need to release etc */
                        /* Maybe this cannot fail because we own references
                         * to the two blocks !! */
                        LAFS_BUG(1, NULL);
                lafs_checkpoint_lock(fs);
-               set_bit(B_PinPending, &ssum->ssblk->b.flags);
-               (void)lafs_pin_dblock(ssum->ssblk, AccountSpace);
+               set_bit(B_PinPending, &ssum2->ssblk->b.flags);
+               (void)lafs_pin_dblock(ssum2->ssblk, AccountSpace);
                lafs_checkpoint_unlock(fs);
        }
        if (ssum)