From 571cbb8528410600ca4663befd9d56e883c6ff01 Mon Sep 17 00:00:00 2001 From: NeilBrown Date: Tue, 3 May 2011 13:55:39 +1000 Subject: [PATCH] lafs_free_get: fix refcounting problem. 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 --- segments.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/segments.c b/segments.c index ac83ca9..e1c5a22 100644 --- a/segments.c +++ b/segments.c @@ -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) -- 2.39.5