| 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