Skip to content

Instantly share code, notes, and snippets.

@osandov

osandov/f.patch Secret

Last active January 24, 2017 17:45
Show Gist options
  • Save osandov/9f223bda27f3e1cd1ab9c1bd634c51a4 to your computer and use it in GitHub Desktop.
Save osandov/9f223bda27f3e1cd1ab9c1bd634c51a4 to your computer and use it in GitHub Desktop.
diff --git a/fs/btrfs/delayed-inode.c b/fs/btrfs/delayed-inode.c
index 0fcf5f25d524..def29a572b49 100644
--- a/fs/btrfs/delayed-inode.c
+++ b/fs/btrfs/delayed-inode.c
@@ -50,6 +50,9 @@ static inline void btrfs_init_delayed_node(
struct btrfs_delayed_node *delayed_node,
struct btrfs_root *root, u64 inode_id)
{
+ WARN_ONCE(inode_id < BTRFS_FIRST_FREE_OBJECTID ||
+ inode_id > BTRFS_LAST_FREE_OBJECTID,
+ "ino %llu is out of range", inode_id);
delayed_node->root = root;
delayed_node->inode_id = inode_id;
atomic_set(&delayed_node->refs, 0);
@@ -854,6 +857,9 @@ static int btrfs_insert_delayed_items(struct btrfs_trans_handle *trans,
ret = btrfs_insert_delayed_item(trans, root, path, curr);
if (ret < 0) {
+ pr_err("btrfs_insert_delayed_item({%llu, %u, %llu}) -> %d",
+ curr->key.objectid, curr->key.type, curr->key.offset,
+ ret);
btrfs_release_path(path);
goto insert_end;
}
@@ -1034,9 +1040,11 @@ static int __btrfs_update_delayed_inode(struct btrfs_trans_handle *trans,
ret = btrfs_lookup_inode(trans, root, path, &key, mod);
if (ret > 0) {
+ pr_err("__btrfs_update_delayed_inode(): inode is missing\n");
btrfs_release_path(path);
return -ENOENT;
} else if (ret < 0) {
+ pr_err("__btrfs_update_delayed_inode(): btrfs_lookup_inode() -> %d\n", ret);
return ret;
}
@@ -1084,8 +1092,10 @@ static int __btrfs_update_delayed_inode(struct btrfs_trans_handle *trans,
key.type = BTRFS_INODE_EXTREF_KEY;
key.offset = -1;
ret = btrfs_search_slot(trans, root, &key, path, -1, 1);
- if (ret < 0)
+ if (ret < 0) {
+ pr_err("__btrfs_update_delayed_inode(): btrfs_search_slot() -> %d\n", ret);
goto err_out;
+ }
ASSERT(ret);
ret = 0;
@@ -1120,14 +1130,28 @@ __btrfs_commit_inode_delayed_items(struct btrfs_trans_handle *trans,
int ret;
ret = btrfs_insert_delayed_items(trans, path, node->root, node);
- if (ret)
- return ret;
+ if (ret) {
+ pr_err("btrfs_insert_delayed_items() failed\n");
+ goto err;
+ }
ret = btrfs_delete_delayed_items(trans, path, node->root, node);
- if (ret)
- return ret;
+ if (ret) {
+ pr_err("btrfs_delete_delayed_items() failed\n");
+ goto err;
+ }
ret = btrfs_update_delayed_inode(trans, node->root, path, node);
+ if (ret) {
+ pr_err("btrfs_update_delayed_inode() failed\n");
+ goto err;
+ }
+
+ return 0;
+
+err:
+ pr_err("__btrfs_commit_inode_delayed_items(ino=%llu, flags=%lu) -> %d\n",
+ node->inode_id, node->flags, ret);
return ret;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment