btrfs: make get_state_failrec return failrec directly
authorNikolay Borisov <nborisov@suse.com>
Thu, 2 Jul 2020 12:23:28 +0000 (15:23 +0300)
committerDavid Sterba <dsterba@suse.com>
Mon, 27 Jul 2020 10:55:39 +0000 (12:55 +0200)
Only failure that get_state_failrec can get is if there is no failure
for the given address. There is no reason why the function should return
a status code and use a separate parameter for returning the actual
failure rec (if one is found). Simplify it by making the return type
a pointer and return ERR_PTR value in case of errors.

Signed-off-by: Nikolay Borisov <nborisov@suse.com>
Reviewed-by: David Sterba <dsterba@suse.com>
Signed-off-by: David Sterba <dsterba@suse.com>
fs/btrfs/extent-io-tree.h
fs/btrfs/extent_io.c

index b656145..b6db2b1 100644 (file)
@@ -233,8 +233,7 @@ bool btrfs_find_delalloc_range(struct extent_io_tree *tree, u64 *start,
                               struct extent_state **cached_state);
 
 /* This should be reworked in the future and put elsewhere. */
-int get_state_failrec(struct extent_io_tree *tree, u64 start,
-                     struct io_failure_record **failrec);
+struct io_failure_record *get_state_failrec(struct extent_io_tree *tree, u64 start);
 int set_state_failrec(struct extent_io_tree *tree, u64 start,
                      struct io_failure_record *failrec);
 void btrfs_free_io_failure_record(struct btrfs_inode *inode, u64 start,
index abd36d9..59ec534 100644 (file)
@@ -2122,12 +2122,11 @@ out:
        return ret;
 }
 
-int get_state_failrec(struct extent_io_tree *tree, u64 start,
-                     struct io_failure_record **failrec)
+struct io_failure_record *get_state_failrec(struct extent_io_tree *tree, u64 start)
 {
        struct rb_node *node;
        struct extent_state *state;
-       int ret = 0;
+       struct io_failure_record *failrec;
 
        spin_lock(&tree->lock);
        /*
@@ -2136,18 +2135,19 @@ int get_state_failrec(struct extent_io_tree *tree, u64 start,
         */
        node = tree_search(tree, start);
        if (!node) {
-               ret = -ENOENT;
+               failrec = ERR_PTR(-ENOENT);
                goto out;
        }
        state = rb_entry(node, struct extent_state, rb_node);
        if (state->start != start) {
-               ret = -ENOENT;
+               failrec = ERR_PTR(-ENOENT);
                goto out;
        }
-       *failrec = state->failrec;
+
+       failrec = state->failrec;
 out:
        spin_unlock(&tree->lock);
-       return ret;
+       return failrec;
 }
 
 /*
@@ -2377,8 +2377,8 @@ int clean_io_failure(struct btrfs_fs_info *fs_info,
        if (!ret)
                return 0;
 
-       ret = get_state_failrec(failure_tree, start, &failrec);
-       if (ret)
+       failrec = get_state_failrec(failure_tree, start);
+       if (IS_ERR(failrec))
                return 0;
 
        BUG_ON(!failrec->this_mirror);
@@ -2462,8 +2462,8 @@ int btrfs_get_io_failure_record(struct inode *inode, u64 start, u64 end,
        int ret;
        u64 logical;
 
-       ret = get_state_failrec(failure_tree, start, &failrec);
-       if (ret) {
+       failrec = get_state_failrec(failure_tree, start);
+       if (IS_ERR(failrec)) {
                failrec = kzalloc(sizeof(*failrec), GFP_NOFS);
                if (!failrec)
                        return -ENOMEM;