]> git.neil.brown.name Git - LaFS.git/commitdiff
Make sure orphans are cleaned up when inode creation fails.
authorNeilBrown <neilb@suse.de>
Mon, 17 Aug 2009 01:54:44 +0000 (11:54 +1000)
committerNeilBrown <neilb@suse.de>
Mon, 17 Aug 2009 01:54:44 +0000 (11:54 +1000)
inode.c

diff --git a/inode.c b/inode.c
index 66db77b2ab8c7791cd4eba1ae7aab020b3b0b35b..8bb86f059d101d08cb77b246ece3283505283f3e 100644 (file)
--- a/inode.c
+++ b/inode.c
@@ -1267,6 +1267,8 @@ inode_map_new_abort(struct inode_map_new_info *imni)
        if (imni->ib) {
                clear_bit(B_Claimed, &imni->ib->b.flags);
                clear_bit(B_PinPending, &imni->ib->b.flags);
+               lafs_orphan_release(fs_from_inode(imni->ib->b.inode),
+                                   imni->ib);
        }
        if (imni->mb)
                clear_bit(B_PinPending, &imni->mb->b.flags);
@@ -1344,8 +1346,8 @@ lafs_new_inode(struct fs *fs, struct inode *dir, int type, int inum, int mode,
        lafs_checkpoint_unlock(fs);
        err = -ENOSPC;
  abort:
-       inode_map_new_abort(&imni);
        lafs_orphan_abort(&oi);
+       inode_map_new_abort(&imni);
        lafs_cluster_update_abort(&ui);
        return ERR_PTR(err);
 }