* [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.