ocfs2: rollback the cleared bits if error occurs after ocfs2_block_group_clear_bits
authorJoseph Qi <joseph.qi@huawei.com>
Tue, 14 Apr 2015 22:43:27 +0000 (15:43 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Tue, 14 Apr 2015 23:48:58 +0000 (16:48 -0700)
ocfs2_block_group_clear_bits will clear bits in block group bitmap.
Once it succeeds but fails in the following step, it will cause block
group bitmap mismatch the corresponding count recorded in dinode.
So rollback the cleared bits if error occurs.

Signed-off-by: Joseph Qi <joseph.qi@huawei.com>
Cc: Mark Fasheh <mfasheh@suse.com>
Cc: Joel Becker <jlbec@evilplan.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
fs/ocfs2/suballoc.c

index 0cb889a17ae14db8ffc7e0688543be132a126ea6..4479029630bb37bb8a6e4880e94ab8633d967df6 100644 (file)
@@ -2499,6 +2499,8 @@ static int _ocfs2_free_suballoc_bits(handle_t *handle,
                                         alloc_bh, OCFS2_JOURNAL_ACCESS_WRITE);
        if (status < 0) {
                mlog_errno(status);
+               ocfs2_block_group_set_bits(handle, alloc_inode, group, group_bh,
+                               start_bit, count);
                goto bail;
        }