All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] btrfs-progs: chunk-recovery: Fix a float point error
@ 2015-11-19  6:42 Qu Wenruo
  2015-11-19 17:35 ` David Sterba
  2016-01-11  2:15 ` Qu Wenruo
  0 siblings, 2 replies; 5+ messages in thread
From: Qu Wenruo @ 2015-11-19  6:42 UTC (permalink / raw)
  To: linux-btrfs

Fix a zero division causing chunk-recovery fail.

Also fix a typo "strpie_length" -> "stripe_length".

Reported-by: Scotty Edmonds <scotty@scottyedmonds.com>
Signed-off-by: Qu Wenruo <quwenruo@cn.fujitsu.com>
---
 btrfsck.h       | 17 +++++++++++++++++
 chunk-recover.c |  9 ++++++---
 2 files changed, 23 insertions(+), 3 deletions(-)

diff --git a/btrfsck.h b/btrfsck.h
index 0882a38..e16f52f 100644
--- a/btrfsck.h
+++ b/btrfsck.h
@@ -142,6 +142,23 @@ static inline unsigned long btrfs_chunk_record_size(int num_stripes)
 }
 void free_chunk_cache_tree(struct cache_tree *chunk_cache);
 
+/*
+ * Function to check validation for num_stripes, or it can call
+ * float point error for 0 division
+ * return < 0 for invalid combination
+ * return 0 for valid combination
+ */
+static inline int check_num_stripes(u64 type, int num_stripes)
+{
+	if (num_stripes == 0)
+		return -1;
+	if (type & BTRFS_BLOCK_GROUP_RAID5 && num_stripes <= 1)
+		return -1;
+	if (type & BTRFS_BLOCK_GROUP_RAID6 && num_stripes <= 2)
+		return -1;
+	return 0;
+}
+
 u64 calc_stripe_length(u64 type, u64 length, int num_stripes);
 /* For block group tree */
 static inline void block_group_tree_init(struct block_group_tree *tree)
diff --git a/chunk-recover.c b/chunk-recover.c
index 0d4c8ff..85dc1bc 100644
--- a/chunk-recover.c
+++ b/chunk-recover.c
@@ -1607,16 +1607,19 @@ static int btrfs_verify_device_extents(struct block_group_record *bg,
 				       struct list_head *devexts, int ndevexts)
 {
 	struct device_extent_record *devext;
-	u64 strpie_length;
+	u64 stripe_length;
 	int expected_num_stripes;
 
 	expected_num_stripes = calc_num_stripes(bg->flags);
 	if (expected_num_stripes && expected_num_stripes != ndevexts)
 		return 1;
 
-	strpie_length = calc_stripe_length(bg->flags, bg->offset, ndevexts);
+	if (check_num_stripes(bg->flags, ndevexts) < 0)
+		return 1;
+
+	stripe_length = calc_stripe_length(bg->flags, bg->offset, ndevexts);
 	list_for_each_entry(devext, devexts, chunk_list) {
-		if (devext->length != strpie_length)
+		if (devext->length != stripe_length)
 			return 1;
 	}
 	return 0;
-- 
2.6.2


^ permalink raw reply related	[flat|nested] 5+ messages in thread

* Re: [PATCH] btrfs-progs: chunk-recovery: Fix a float point error
  2015-11-19  6:42 [PATCH] btrfs-progs: chunk-recovery: Fix a float point error Qu Wenruo
@ 2015-11-19 17:35 ` David Sterba
  2016-01-11  2:15 ` Qu Wenruo
  1 sibling, 0 replies; 5+ messages in thread
From: David Sterba @ 2015-11-19 17:35 UTC (permalink / raw)
  To: Qu Wenruo; +Cc: linux-btrfs

On Thu, Nov 19, 2015 at 02:42:39PM +0800, Qu Wenruo wrote:
> Fix a zero division causing chunk-recovery fail.
> 
> Also fix a typo "strpie_length" -> "stripe_length".
> 
> Reported-by: Scotty Edmonds <scotty@scottyedmonds.com>
> Signed-off-by: Qu Wenruo <quwenruo@cn.fujitsu.com>

Applied, thanks.

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH] btrfs-progs: chunk-recovery: Fix a float point error
  2015-11-19  6:42 [PATCH] btrfs-progs: chunk-recovery: Fix a float point error Qu Wenruo
  2015-11-19 17:35 ` David Sterba
@ 2016-01-11  2:15 ` Qu Wenruo
  2016-01-11  9:14   ` David Sterba
  1 sibling, 1 reply; 5+ messages in thread
From: Qu Wenruo @ 2016-01-11  2:15 UTC (permalink / raw)
  To: linux-btrfs, David Sterba

Hi David,

Would you please consider merging this patch for v4.2 btrfs-progs?

Thanks,
Qu

Qu Wenruo wrote on 2015/11/19 14:42 +0800:
> Fix a zero division causing chunk-recovery fail.
>
> Also fix a typo "strpie_length" -> "stripe_length".
>
> Reported-by: Scotty Edmonds <scotty@scottyedmonds.com>
> Signed-off-by: Qu Wenruo <quwenruo@cn.fujitsu.com>
> ---
>   btrfsck.h       | 17 +++++++++++++++++
>   chunk-recover.c |  9 ++++++---
>   2 files changed, 23 insertions(+), 3 deletions(-)
>
> diff --git a/btrfsck.h b/btrfsck.h
> index 0882a38..e16f52f 100644
> --- a/btrfsck.h
> +++ b/btrfsck.h
> @@ -142,6 +142,23 @@ static inline unsigned long btrfs_chunk_record_size(int num_stripes)
>   }
>   void free_chunk_cache_tree(struct cache_tree *chunk_cache);
>
> +/*
> + * Function to check validation for num_stripes, or it can call
> + * float point error for 0 division
> + * return < 0 for invalid combination
> + * return 0 for valid combination
> + */
> +static inline int check_num_stripes(u64 type, int num_stripes)
> +{
> +	if (num_stripes == 0)
> +		return -1;
> +	if (type & BTRFS_BLOCK_GROUP_RAID5 && num_stripes <= 1)
> +		return -1;
> +	if (type & BTRFS_BLOCK_GROUP_RAID6 && num_stripes <= 2)
> +		return -1;
> +	return 0;
> +}
> +
>   u64 calc_stripe_length(u64 type, u64 length, int num_stripes);
>   /* For block group tree */
>   static inline void block_group_tree_init(struct block_group_tree *tree)
> diff --git a/chunk-recover.c b/chunk-recover.c
> index 0d4c8ff..85dc1bc 100644
> --- a/chunk-recover.c
> +++ b/chunk-recover.c
> @@ -1607,16 +1607,19 @@ static int btrfs_verify_device_extents(struct block_group_record *bg,
>   				       struct list_head *devexts, int ndevexts)
>   {
>   	struct device_extent_record *devext;
> -	u64 strpie_length;
> +	u64 stripe_length;
>   	int expected_num_stripes;
>
>   	expected_num_stripes = calc_num_stripes(bg->flags);
>   	if (expected_num_stripes && expected_num_stripes != ndevexts)
>   		return 1;
>
> -	strpie_length = calc_stripe_length(bg->flags, bg->offset, ndevexts);
> +	if (check_num_stripes(bg->flags, ndevexts) < 0)
> +		return 1;
> +
> +	stripe_length = calc_stripe_length(bg->flags, bg->offset, ndevexts);
>   	list_for_each_entry(devext, devexts, chunk_list) {
> -		if (devext->length != strpie_length)
> +		if (devext->length != stripe_length)
>   			return 1;
>   	}
>   	return 0;
>



^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH] btrfs-progs: chunk-recovery: Fix a float point error
  2016-01-11  2:15 ` Qu Wenruo
@ 2016-01-11  9:14   ` David Sterba
  2016-01-12  0:27     ` Qu Wenruo
  0 siblings, 1 reply; 5+ messages in thread
From: David Sterba @ 2016-01-11  9:14 UTC (permalink / raw)
  To: Qu Wenruo; +Cc: linux-btrfs, David Sterba

On Mon, Jan 11, 2016 at 10:15:08AM +0800, Qu Wenruo wrote:
> Hi David,
> 
> Would you please consider merging this patch for v4.2 btrfs-progs?

Do you really mean 4.2? The patch is queued for 4.4 release,
commit a99d13dccee11d29da3d045c2c2fc69d47eff770

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH] btrfs-progs: chunk-recovery: Fix a float point error
  2016-01-11  9:14   ` David Sterba
@ 2016-01-12  0:27     ` Qu Wenruo
  0 siblings, 0 replies; 5+ messages in thread
From: Qu Wenruo @ 2016-01-12  0:27 UTC (permalink / raw)
  To: dsterba, linux-btrfs, David Sterba

Sorry, I meant 4.4.

And thank you for merging it.

Thanks,
Qu

David Sterba wrote on 2016/01/11 10:14 +0100:
> On Mon, Jan 11, 2016 at 10:15:08AM +0800, Qu Wenruo wrote:
>> Hi David,
>>
>> Would you please consider merging this patch for v4.2 btrfs-progs?
>
> Do you really mean 4.2? The patch is queued for 4.4 release,
> commit a99d13dccee11d29da3d045c2c2fc69d47eff770
>
>



^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2016-01-12  0:27 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-11-19  6:42 [PATCH] btrfs-progs: chunk-recovery: Fix a float point error Qu Wenruo
2015-11-19 17:35 ` David Sterba
2016-01-11  2:15 ` Qu Wenruo
2016-01-11  9:14   ` David Sterba
2016-01-12  0:27     ` Qu Wenruo

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.