| From c17af96554a8a8777cbb0fd53b8497250e548b43 Mon Sep 17 00:00:00 2001 |
| From: David Sterba <dsterba@suse.com> |
| Date: Wed, 19 Feb 2020 15:17:20 +0100 |
| Subject: btrfs: raid56: simplify tracking of Q stripe presence |
| MIME-Version: 1.0 |
| Content-Type: text/plain; charset=UTF-8 |
| Content-Transfer-Encoding: 8bit |
| |
| From: David Sterba <dsterba@suse.com> |
| |
| commit c17af96554a8a8777cbb0fd53b8497250e548b43 upstream. |
| |
| There are temporary variables tracking the index of P and Q stripes, but |
| none of them is really used as such, merely for determining if the Q |
| stripe is present. This leads to compiler warnings with |
| -Wunused-but-set-variable and has been reported several times. |
| |
| fs/btrfs/raid56.c: In function ‘finish_rmw’: |
| fs/btrfs/raid56.c:1199:6: warning: variable ‘p_stripe’ set but not used [-Wunused-but-set-variable] |
| 1199 | int p_stripe = -1; |
| | ^~~~~~~~ |
| fs/btrfs/raid56.c: In function ‘finish_parity_scrub’: |
| fs/btrfs/raid56.c:2356:6: warning: variable ‘p_stripe’ set but not used [-Wunused-but-set-variable] |
| 2356 | int p_stripe = -1; |
| | ^~~~~~~~ |
| |
| Replace the two variables with one that has a clear meaning and also get |
| rid of the warnings. The logic that verifies that there are only 2 |
| valid cases is unchanged. |
| |
| Reviewed-by: Johannes Thumshirn <johannes.thumshirn@wdc.com> |
| Signed-off-by: David Sterba <dsterba@suse.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| fs/btrfs/raid56.c | 37 +++++++++++++++---------------------- |
| 1 file changed, 15 insertions(+), 22 deletions(-) |
| |
| --- a/fs/btrfs/raid56.c |
| +++ b/fs/btrfs/raid56.c |
| @@ -1190,22 +1190,19 @@ static noinline void finish_rmw(struct b |
| int nr_data = rbio->nr_data; |
| int stripe; |
| int pagenr; |
| - int p_stripe = -1; |
| - int q_stripe = -1; |
| + bool has_qstripe; |
| struct bio_list bio_list; |
| struct bio *bio; |
| int ret; |
| |
| bio_list_init(&bio_list); |
| |
| - if (rbio->real_stripes - rbio->nr_data == 1) { |
| - p_stripe = rbio->real_stripes - 1; |
| - } else if (rbio->real_stripes - rbio->nr_data == 2) { |
| - p_stripe = rbio->real_stripes - 2; |
| - q_stripe = rbio->real_stripes - 1; |
| - } else { |
| + if (rbio->real_stripes - rbio->nr_data == 1) |
| + has_qstripe = false; |
| + else if (rbio->real_stripes - rbio->nr_data == 2) |
| + has_qstripe = true; |
| + else |
| BUG(); |
| - } |
| |
| /* at this point we either have a full stripe, |
| * or we've read the full stripe from the drive. |
| @@ -1249,7 +1246,7 @@ static noinline void finish_rmw(struct b |
| SetPageUptodate(p); |
| pointers[stripe++] = kmap(p); |
| |
| - if (q_stripe != -1) { |
| + if (has_qstripe) { |
| |
| /* |
| * raid6, add the qstripe and call the |
| @@ -2325,8 +2322,7 @@ static noinline void finish_parity_scrub |
| int nr_data = rbio->nr_data; |
| int stripe; |
| int pagenr; |
| - int p_stripe = -1; |
| - int q_stripe = -1; |
| + bool has_qstripe; |
| struct page *p_page = NULL; |
| struct page *q_page = NULL; |
| struct bio_list bio_list; |
| @@ -2336,14 +2332,12 @@ static noinline void finish_parity_scrub |
| |
| bio_list_init(&bio_list); |
| |
| - if (rbio->real_stripes - rbio->nr_data == 1) { |
| - p_stripe = rbio->real_stripes - 1; |
| - } else if (rbio->real_stripes - rbio->nr_data == 2) { |
| - p_stripe = rbio->real_stripes - 2; |
| - q_stripe = rbio->real_stripes - 1; |
| - } else { |
| + if (rbio->real_stripes - rbio->nr_data == 1) |
| + has_qstripe = false; |
| + else if (rbio->real_stripes - rbio->nr_data == 2) |
| + has_qstripe = true; |
| + else |
| BUG(); |
| - } |
| |
| if (bbio->num_tgtdevs && bbio->tgtdev_map[rbio->scrubp]) { |
| is_replace = 1; |
| @@ -2365,7 +2359,7 @@ static noinline void finish_parity_scrub |
| goto cleanup; |
| SetPageUptodate(p_page); |
| |
| - if (q_stripe != -1) { |
| + if (has_qstripe) { |
| q_page = alloc_page(GFP_NOFS | __GFP_HIGHMEM); |
| if (!q_page) { |
| __free_page(p_page); |
| @@ -2388,8 +2382,7 @@ static noinline void finish_parity_scrub |
| /* then add the parity stripe */ |
| pointers[stripe++] = kmap(p_page); |
| |
| - if (q_stripe != -1) { |
| - |
| + if (has_qstripe) { |
| /* |
| * raid6, add the qstripe and call the |
| * library function to fill in our p/q |