]> git.neil.brown.name Git - LaFS.git/commitdiff
Choose_free_inum: never return number below 16
authorNeilBrown <neilb@suse.de>
Tue, 10 Aug 2010 05:16:03 +0000 (15:16 +1000)
committerNeilBrown <neilb@suse.de>
Tue, 10 Aug 2010 05:16:03 +0000 (15:16 +1000)
They are for internal use.

Also fix a missing B_PinPending setting.

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

diff --git a/inode.c b/inode.c
index 0151b2d3998f01a2abeb12b3202fb7b90e464b0a..c6107d6f0874adba5cf627c41adbb6572be2788f 100644 (file)
--- a/inode.c
+++ b/inode.c
@@ -1267,6 +1267,9 @@ retry:
                        err = -ENOMEM;
                        if (!b)
                                goto abort;
+                       lafs_iolock_written(&b->b);
+                       set_bit(B_PinPending, &b->b.flags);
+                       lafs_iounlock_block(&b->b);
                retry2:
                        lafs_checkpoint_lock(fs);
                        err = lafs_pin_dblock(b, NewSpace);
@@ -1319,6 +1322,13 @@ retry:
        bit = LAFSI(im)->md.inodemap.nextbit;
        LAFSI(im)->md.inodemap.thisblock = bnum;
        buf = map_dblock(b);
+       while (bnum == 0 && bit < 16) {
+               /* Never return an inum below 16 - they are special */
+               if (!test_bit(bit, (unsigned long *)buf))
+                       set_bit(bit, (unsigned long *)buf);
+               bit++;
+       }
+
        bit = find_next_bit((unsigned long *)buf,
                            fs->blocksize<<3, bit);
        unmap_dblock(b, buf);