]> git.neil.brown.name Git - LaFS.git/commitdiff
Get SegRef on parent of phys==0 blocks.
authorNeilBrown <neilb@suse.de>
Mon, 13 Sep 2010 05:28:08 +0000 (15:28 +1000)
committerNeilBrown <neilb@suse.de>
Mon, 13 Sep 2010 05:28:08 +0000 (15:28 +1000)
We still need those parents to be segrefed!

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

index 4f20fff8f8ebdac8d13e74eb8ac6dc35104ba6be..c45c451b30eaeaabbe4c94ecac8fc7a3d3ee9b5e 100644 (file)
--- a/cluster.c
+++ b/cluster.c
@@ -520,7 +520,7 @@ static int flush_data_to_inode(struct block *b)
                if (!test_and_set_bit(B_ICredit, &lai->dblock->b.flags))
                        credits--;
                lafs_space_return(fs, credits);
-               /* FIXME do I need to get a SegRef ?? */
+               LAFS_BUG(!test_bit(B_SegRef, &lai->dblock->b.flags), &lai->dblock->b);
                set_bit(B_PinPending, &lai->dblock->b.flags);
                if (test_bit(B_Pinned, &b->flags))
                        lafs_pin_block_ph(&lai->dblock->b, !!test_bit(B_Phase1, &b->flags));
index 8f68aef1779d4d54e6d234ed908ea98a0ac92120..1e203c6c3c5bcc700da1c63371f2210a6804e5d4 100644 (file)
@@ -270,11 +270,6 @@ int lafs_seg_ref_block(struct block *b, int ssnum)
 
                BUG_ON(test_bit(B_Root, &b->flags));
 
-               if (b->physaddr == 0) {
-                       set_bit(B_SegRef, &b->flags);
-                       break;
-               }
-
                b2 = b;
                /* Need to check parents */
                ino = b->inode;
@@ -306,6 +301,12 @@ int lafs_seg_ref_block(struct block *b, int ssnum)
                 * If it cannot, then we don't need the lock.
                 */
 
+               if (b2->physaddr == 0) {
+                       /* There is no segsum to reference */
+                       set_bit(B_SegRef, &b2->flags);
+                       continue;
+               }
+
                ss = segsum_byaddr(fs, b2->physaddr, ssnum);
                if (IS_ERR(ss)) {
                        putref(b, MKREF(segref));