]> git.neil.brown.name Git - LaFS.git/commitdiff
Correctly handle Dirty index blocks during truncate
authorNeilBrown <neilb@suse.de>
Mon, 24 Aug 2009 03:30:28 +0000 (13:30 +1000)
committerNeilBrown <neilb@suse.de>
Mon, 24 Aug 2009 03:30:28 +0000 (13:30 +1000)
inode.c

diff --git a/inode.c b/inode.c
index 5e0ea5c7808f6d82e891c1da28ccc0bb3c332d90..9b1ec5aa5ec44fb16a224b587663eed8bb8f7a58 100644 (file)
--- a/inode.c
+++ b/inode.c
@@ -689,7 +689,15 @@ static int lafs_inode_handle_orphan(struct datablock *b)
                do
                        lafs_incorporate(fs, ib2);
                while (ib2->uninc_table.pending_cnt || ib2->uninc);
-               lafs_iounlock_block(&ib2->b, 0);
+               /* FIXME should I just cluster_allocate and let
+                * it figure things out ??
+                */
+               if (test_bit(B_Dirty, &ib2->b.flags) ||
+                   test_bit(B_Realloc, &ib2->b.flags))
+                       lafs_cluster_allocate(&ib2->b, 0);
+               else
+                       lafs_iounlock_block(&ib2->b, 0);
+
                putiref(ib2, MKREF(inode_handle_orphan2));
                printk(".");
                if (!list_empty(&ib2->b.siblings)) {