-
-
Save osandov/9f223bda27f3e1cd1ab9c1bd634c51a4 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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