Signed-off-by: David Sterba <dste...@suse.com>
---
 fs/btrfs/extent-tree.c | 25 ++++++++++++++-----------
 1 file changed, 14 insertions(+), 11 deletions(-)

diff --git a/fs/btrfs/extent-tree.c b/fs/btrfs/extent-tree.c
index ffdd3aba508c..b317f8ee42a9 100644
--- a/fs/btrfs/extent-tree.c
+++ b/fs/btrfs/extent-tree.c
@@ -2034,6 +2034,18 @@ static int remove_extent_backref(struct 
btrfs_trans_handle *trans,
        return ret;
 }
 
+static int btrfs_issue_clear_op(struct block_device *bdev, u64 start, u64 size,
+               enum btrfs_clear_op_type clear)
+{
+       switch (clear) {
+       case BTRFS_CLEAR_OP_DISCARD:
+               return blkdev_issue_discard(bdev, start >> 9, size >> 9,
+                               GFP_NOFS, 0);
+       default:
+               return -EOPNOTSUPP;
+       }
+}
+
 #define in_range(b, first, len)        ((b) >= (first) && (b) < (first) + 
(len))
 static int btrfs_issue_discard(struct block_device *bdev, u64 start, u64 len,
                               u64 *discarded_bytes,
@@ -2081,13 +2093,8 @@ static int btrfs_issue_discard(struct block_device 
*bdev, u64 start, u64 len,
                        bytes_left = end - start;
                        continue;
                }
-
                if (size) {
-                       if (clear == BTRFS_CLEAR_OP_DISCARD)
-                               ret = blkdev_issue_discard(bdev, start >> 9,
-                                               size >> 9, GFP_NOFS, 0);
-                       else
-                               ret = -EOPNOTSUPP;
+                       ret = btrfs_issue_clear_op(bdev, start, size, clear);
                        if (!ret)
                                *discarded_bytes += size;
                        else if (ret != -EOPNOTSUPP)
@@ -2103,11 +2110,7 @@ static int btrfs_issue_discard(struct block_device 
*bdev, u64 start, u64 len,
        }
 
        if (bytes_left) {
-               if (clear == BTRFS_CLEAR_OP_DISCARD)
-                       ret = blkdev_issue_discard(bdev, start >> 9,
-                                       bytes_left >> 9, GFP_NOFS, 0);
-               else
-                       ret = -EOPNOTSUPP;
+               ret = btrfs_issue_clear_op(bdev, start, bytes_left, clear);
                if (!ret)
                        *discarded_bytes += bytes_left;
        }
-- 
2.16.2

--
To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to