diff mbox

[11/16] Btrfs: clean up code for extent_map lookup

Message ID 4E1E5FF7.7060202@cn.fujitsu.com (mailing list archive)
State New, archived
Headers show

Commit Message

Li Zefan July 14, 2011, 3:18 a.m. UTC
lookup_extent_map() and search_extent_map() can share most of code.

Signed-off-by: Li Zefan <lizf@cn.fujitsu.com>
---
 fs/btrfs/extent_map.c |   85 +++++++++++++++++--------------------------------
 1 files changed, 29 insertions(+), 56 deletions(-)

Comments

David Sterba July 22, 2011, 1:20 p.m. UTC | #1
On Thu, Jul 14, 2011 at 11:18:15AM +0800, Li Zefan wrote:
> lookup_extent_map() and search_extent_map() can share most of code.
> 
> Signed-off-by: Li Zefan <lizf@cn.fujitsu.com>
> ---
>  fs/btrfs/extent_map.c |   85 +++++++++++++++++--------------------------------
>  1 files changed, 29 insertions(+), 56 deletions(-)
> 
> diff --git a/fs/btrfs/extent_map.c b/fs/btrfs/extent_map.c
> index 911a9db..df7a803 100644
> --- a/fs/btrfs/extent_map.c
> +++ b/fs/btrfs/extent_map.c
> @@ -299,19 +299,8 @@ static u64 range_end(u64 start, u64 len)
>  	return start + len;
>  }
>  
> -/**
> - * lookup_extent_mapping - lookup extent_map
> - * @tree:	tree to lookup in
> - * @start:	byte offset to start the search
> - * @len:	length of the lookup range
> - *
> - * Find and return the first extent_map struct in @tree that intersects the
> - * [start, len] range.  There may be additional objects in the tree that
> - * intersect, so check the object returned carefully to make sure that no
> - * additional lookups are needed.
> - */
> -struct extent_map *lookup_extent_mapping(struct extent_map_tree *tree,
> -					 u64 start, u64 len)
> +struct extent_map *__lookup_extent_mapping(struct extent_map_tree *tree,
> +					   u64 start, u64 len, int strict)

just minor thing: can be defined static

>  {
>  	struct extent_map *em;
>  	struct rb_node *rb_node;
> @@ -320,38 +309,42 @@ struct extent_map *lookup_extent_mapping(struct extent_map_tree *tree,
>  	u64 end = range_end(start, len);
>  
>  	rb_node = __tree_search(&tree->map, start, &prev, &next);
> -	if (!rb_node && prev) {
> -		em = rb_entry(prev, struct extent_map, rb_node);
> -		if (end > em->start && start < extent_map_end(em))
> -			goto found;
> -	}
> -	if (!rb_node && next) {
> -		em = rb_entry(next, struct extent_map, rb_node);
> -		if (end > em->start && start < extent_map_end(em))
> -			goto found;
> -	}
>  	if (!rb_node) {
> -		em = NULL;
> -		goto out;
> -	}
> -	if (IS_ERR(rb_node)) {
> -		em = ERR_CAST(rb_node);
> -		goto out;
> +		if (prev)
> +			rb_node = prev;
> +		else if (next)
> +			rb_node = next;
> +		else
> +			return NULL;
>  	}
> +
>  	em = rb_entry(rb_node, struct extent_map, rb_node);
> -	if (end > em->start && start < extent_map_end(em))
> -		goto found;
>  
> -	em = NULL;
> -	goto out;
> +	if (strict && !(end > em->start && start < extent_map_end(em)))
> +		return NULL;
>  
> -found:
>  	atomic_inc(&em->refs);
> -out:
>  	return em;
>  }
>  
>  /**
> + * lookup_extent_mapping - lookup extent_map
> + * @tree:	tree to lookup in
> + * @start:	byte offset to start the search
> + * @len:	length of the lookup range
> + *
> + * Find and return the first extent_map struct in @tree that intersects the
> + * [start, len] range.  There may be additional objects in the tree that
> + * intersect, so check the object returned carefully to make sure that no
> + * additional lookups are needed.
> + */
> +struct extent_map *lookup_extent_mapping(struct extent_map_tree *tree,
> +					 u64 start, u64 len)
> +{
> +	return __lookup_extent_mapping(tree, start, len, 1);
> +}
> +
> +/**
>   * search_extent_mapping - find a nearby extent map
>   * @tree:	tree to lookup in
>   * @start:	byte offset to start the search
> @@ -365,27 +358,7 @@ out:
>  struct extent_map *search_extent_mapping(struct extent_map_tree *tree,
>  					 u64 start, u64 len)
>  {
> -	struct extent_map *em;
> -	struct rb_node *rb_node;
> -	struct rb_node *prev = NULL;
> -	struct rb_node *next = NULL;
> -
> -	rb_node = __tree_search(&tree->map, start, &prev, &next);
> -	if (!rb_node && prev) {
> -		em = rb_entry(prev, struct extent_map, rb_node);
> -		goto found;
> -	}
> -	if (!rb_node && next) {
> -		em = rb_entry(next, struct extent_map, rb_node);
> -		goto found;
> -	}
> -	if (!rb_node)
> -		return NULL;
> -
> -	em = rb_entry(rb_node, struct extent_map, rb_node);
> -found:
> -	atomic_inc(&em->refs);
> -	return em;
> +	return __lookup_extent_mapping(tree, start, len, 0);
>  }
>  
>  /**
> -- 
> 1.7.3.1
> --
> To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
--
To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
diff mbox

Patch

diff --git a/fs/btrfs/extent_map.c b/fs/btrfs/extent_map.c
index 911a9db..df7a803 100644
--- a/fs/btrfs/extent_map.c
+++ b/fs/btrfs/extent_map.c
@@ -299,19 +299,8 @@  static u64 range_end(u64 start, u64 len)
 	return start + len;
 }
 
-/**
- * lookup_extent_mapping - lookup extent_map
- * @tree:	tree to lookup in
- * @start:	byte offset to start the search
- * @len:	length of the lookup range
- *
- * Find and return the first extent_map struct in @tree that intersects the
- * [start, len] range.  There may be additional objects in the tree that
- * intersect, so check the object returned carefully to make sure that no
- * additional lookups are needed.
- */
-struct extent_map *lookup_extent_mapping(struct extent_map_tree *tree,
-					 u64 start, u64 len)
+struct extent_map *__lookup_extent_mapping(struct extent_map_tree *tree,
+					   u64 start, u64 len, int strict)
 {
 	struct extent_map *em;
 	struct rb_node *rb_node;
@@ -320,38 +309,42 @@  struct extent_map *lookup_extent_mapping(struct extent_map_tree *tree,
 	u64 end = range_end(start, len);
 
 	rb_node = __tree_search(&tree->map, start, &prev, &next);
-	if (!rb_node && prev) {
-		em = rb_entry(prev, struct extent_map, rb_node);
-		if (end > em->start && start < extent_map_end(em))
-			goto found;
-	}
-	if (!rb_node && next) {
-		em = rb_entry(next, struct extent_map, rb_node);
-		if (end > em->start && start < extent_map_end(em))
-			goto found;
-	}
 	if (!rb_node) {
-		em = NULL;
-		goto out;
-	}
-	if (IS_ERR(rb_node)) {
-		em = ERR_CAST(rb_node);
-		goto out;
+		if (prev)
+			rb_node = prev;
+		else if (next)
+			rb_node = next;
+		else
+			return NULL;
 	}
+
 	em = rb_entry(rb_node, struct extent_map, rb_node);
-	if (end > em->start && start < extent_map_end(em))
-		goto found;
 
-	em = NULL;
-	goto out;
+	if (strict && !(end > em->start && start < extent_map_end(em)))
+		return NULL;
 
-found:
 	atomic_inc(&em->refs);
-out:
 	return em;
 }
 
 /**
+ * lookup_extent_mapping - lookup extent_map
+ * @tree:	tree to lookup in
+ * @start:	byte offset to start the search
+ * @len:	length of the lookup range
+ *
+ * Find and return the first extent_map struct in @tree that intersects the
+ * [start, len] range.  There may be additional objects in the tree that
+ * intersect, so check the object returned carefully to make sure that no
+ * additional lookups are needed.
+ */
+struct extent_map *lookup_extent_mapping(struct extent_map_tree *tree,
+					 u64 start, u64 len)
+{
+	return __lookup_extent_mapping(tree, start, len, 1);
+}
+
+/**
  * search_extent_mapping - find a nearby extent map
  * @tree:	tree to lookup in
  * @start:	byte offset to start the search
@@ -365,27 +358,7 @@  out:
 struct extent_map *search_extent_mapping(struct extent_map_tree *tree,
 					 u64 start, u64 len)
 {
-	struct extent_map *em;
-	struct rb_node *rb_node;
-	struct rb_node *prev = NULL;
-	struct rb_node *next = NULL;
-
-	rb_node = __tree_search(&tree->map, start, &prev, &next);
-	if (!rb_node && prev) {
-		em = rb_entry(prev, struct extent_map, rb_node);
-		goto found;
-	}
-	if (!rb_node && next) {
-		em = rb_entry(next, struct extent_map, rb_node);
-		goto found;
-	}
-	if (!rb_node)
-		return NULL;
-
-	em = rb_entry(rb_node, struct extent_map, rb_node);
-found:
-	atomic_inc(&em->refs);
-	return em;
+	return __lookup_extent_mapping(tree, start, len, 0);
 }
 
 /**