Merge tag 'ras_for_3.20' of git://git.kernel.org/pub/scm/linux/kernel/git/bp/bp into...
[cascardo/linux.git] / fs / btrfs / delayed-inode.c
index a2e90f8..de4e70f 100644 (file)
@@ -1042,7 +1042,7 @@ static int __btrfs_update_delayed_inode(struct btrfs_trans_handle *trans,
        int ret;
 
        key.objectid = node->inode_id;
-       btrfs_set_key_type(&key, BTRFS_INODE_ITEM_KEY);
+       key.type = BTRFS_INODE_ITEM_KEY;
        key.offset = 0;
 
        if (test_bit(BTRFS_DELAYED_NODE_DEL_IREF, &node->flags))
@@ -1099,7 +1099,7 @@ err_out:
 search:
        btrfs_release_path(path);
 
-       btrfs_set_key_type(&key, BTRFS_INODE_EXTREF_KEY);
+       key.type = BTRFS_INODE_EXTREF_KEY;
        key.offset = -1;
        ret = btrfs_search_slot(trans, root, &key, path, -1, 1);
        if (ret < 0)
@@ -1473,7 +1473,7 @@ int btrfs_insert_delayed_dir_index(struct btrfs_trans_handle *trans,
        }
 
        delayed_item->key.objectid = btrfs_ino(dir);
-       btrfs_set_key_type(&delayed_item->key, BTRFS_DIR_INDEX_KEY);
+       delayed_item->key.type = BTRFS_DIR_INDEX_KEY;
        delayed_item->key.offset = index;
 
        dir_item = (struct btrfs_dir_item *)delayed_item->data;
@@ -1542,7 +1542,7 @@ int btrfs_delete_delayed_dir_index(struct btrfs_trans_handle *trans,
                return PTR_ERR(node);
 
        item_key.objectid = btrfs_ino(dir);
-       btrfs_set_key_type(&item_key, BTRFS_DIR_INDEX_KEY);
+       item_key.type = BTRFS_DIR_INDEX_KEY;
        item_key.offset = index;
 
        ret = btrfs_delete_delayed_insertion_item(root, node, &item_key);
@@ -1857,6 +1857,14 @@ int btrfs_delayed_delete_inode_ref(struct inode *inode)
 {
        struct btrfs_delayed_node *delayed_node;
 
+       /*
+        * we don't do delayed inode updates during log recovery because it
+        * leads to enospc problems.  This means we also can't do
+        * delayed inode refs
+        */
+       if (BTRFS_I(inode)->root->fs_info->log_root_recovering)
+               return -EAGAIN;
+
        delayed_node = btrfs_get_or_create_delayed_node(inode);
        if (IS_ERR(delayed_node))
                return PTR_ERR(delayed_node);