Btrfs: be aware of btree inode write errors to avoid fs corruption
[linux-2.6-block.git] / fs / btrfs / extent-tree.c
index 44d04979f071711f99989d00fc2aeb073bdffa4d..8ebe6bf66e7897c37c9b94933417e241eeaacab1 100644 (file)
@@ -7235,17 +7235,19 @@ btrfs_init_new_buffer(struct btrfs_trans_handle *trans, struct btrfs_root *root,
        btrfs_set_buffer_uptodate(buf);
 
        if (root->root_key.objectid == BTRFS_TREE_LOG_OBJECTID) {
+               buf->log_index = root->log_transid % 2;
                /*
                 * we allow two log transactions at a time, use different
                 * EXENT bit to differentiate dirty pages.
                 */
-               if (root->log_transid % 2 == 0)
+               if (buf->log_index == 0)
                        set_extent_dirty(&root->dirty_log_pages, buf->start,
                                        buf->start + buf->len - 1, GFP_NOFS);
                else
                        set_extent_new(&root->dirty_log_pages, buf->start,
                                        buf->start + buf->len - 1, GFP_NOFS);
        } else {
+               buf->log_index = -1;
                set_extent_dirty(&trans->transaction->dirty_pages, buf->start,
                         buf->start + buf->len - 1, GFP_NOFS);
        }