2019-09-19 14:01:22

by Arnd Bergmann

[permalink] [raw]
Subject: [PATCH] block: t10-pi: fix -Wswitch warning

Changing the switch() statement to symbolic constants made
the compiler (at least clang-9, did not check gcc) notice that
there is one enum value that is not handled here:

block/t10-pi.c:62:11: error: enumeration value 'T10_PI_TYPE0_PROTECTION' not handled in switch [-Werror,-Wswitch]

Add another case for the missing value and do nothing there
based on the assumption that the code was working correctly
already.

Fixes: 9b2061b1a262 ("block: use symbolic constants for t10_pi type")
Signed-off-by: Arnd Bergmann <[email protected]>
---
block/t10-pi.c | 2 ++
1 file changed, 2 insertions(+)

diff --git a/block/t10-pi.c b/block/t10-pi.c
index 0c0120a672f9..055fac923946 100644
--- a/block/t10-pi.c
+++ b/block/t10-pi.c
@@ -60,6 +60,8 @@ static blk_status_t t10_pi_verify(struct blk_integrity_iter *iter,
__be16 csum;

switch (type) {
+ case T10_PI_TYPE0_PROTECTION:
+ break;
case T10_PI_TYPE1_PROTECTION:
case T10_PI_TYPE2_PROTECTION:
if (pi->app_tag == T10_PI_APP_ESCAPE)
--
2.20.0


2019-09-20 00:41:20

by Nick Desaulniers

[permalink] [raw]
Subject: Re: [PATCH] block: t10-pi: fix -Wswitch warning

On Thu, Sep 19, 2019 at 6:57 AM Arnd Bergmann <[email protected]> wrote:
>
> Changing the switch() statement to symbolic constants made
> the compiler (at least clang-9, did not check gcc) notice that
> there is one enum value that is not handled here:
>
> block/t10-pi.c:62:11: error: enumeration value 'T10_PI_TYPE0_PROTECTION' not handled in switch [-Werror,-Wswitch]
>
> Add another case for the missing value and do nothing there
> based on the assumption that the code was working correctly
> already.
>
> Fixes: 9b2061b1a262 ("block: use symbolic constants for t10_pi type")
> Signed-off-by: Arnd Bergmann <[email protected]>

Reported-by: kbuild test robot <[email protected]>
https://groups.google.com/forum/#!topic/clang-built-linux/awgY7hmSCCM
Hard to say what's the right thing to do here, there's not a lot of
other switches on this variable. That enum value barely even shows up
in the kernel. Since this is no functional change:
Acked-by: Nick Desaulniers <[email protected]>
Thanks for sending the patch.

> ---
> block/t10-pi.c | 2 ++
> 1 file changed, 2 insertions(+)
>
> diff --git a/block/t10-pi.c b/block/t10-pi.c
> index 0c0120a672f9..055fac923946 100644
> --- a/block/t10-pi.c
> +++ b/block/t10-pi.c
> @@ -60,6 +60,8 @@ static blk_status_t t10_pi_verify(struct blk_integrity_iter *iter,
> __be16 csum;
>
> switch (type) {
> + case T10_PI_TYPE0_PROTECTION:
> + break;
> case T10_PI_TYPE1_PROTECTION:
> case T10_PI_TYPE2_PROTECTION:
> if (pi->app_tag == T10_PI_APP_ESCAPE)
> --
--
Thanks,
~Nick Desaulniers

2019-09-20 17:03:33

by Nathan Chancellor

[permalink] [raw]
Subject: Re: [PATCH] block: t10-pi: fix -Wswitch warning

On Thu, Sep 19, 2019 at 03:57:19PM +0200, Arnd Bergmann wrote:
> Changing the switch() statement to symbolic constants made
> the compiler (at least clang-9, did not check gcc) notice that
> there is one enum value that is not handled here:
>
> block/t10-pi.c:62:11: error: enumeration value 'T10_PI_TYPE0_PROTECTION' not handled in switch [-Werror,-Wswitch]
>
> Add another case for the missing value and do nothing there
> based on the assumption that the code was working correctly
> already.
>
> Fixes: 9b2061b1a262 ("block: use symbolic constants for t10_pi type")
> Signed-off-by: Arnd Bergmann <[email protected]>
> ---
> block/t10-pi.c | 2 ++
> 1 file changed, 2 insertions(+)
>
> diff --git a/block/t10-pi.c b/block/t10-pi.c
> index 0c0120a672f9..055fac923946 100644
> --- a/block/t10-pi.c
> +++ b/block/t10-pi.c
> @@ -60,6 +60,8 @@ static blk_status_t t10_pi_verify(struct blk_integrity_iter *iter,
> __be16 csum;
>
> switch (type) {
> + case T10_PI_TYPE0_PROTECTION:
> + break;
> case T10_PI_TYPE1_PROTECTION:
> case T10_PI_TYPE2_PROTECTION:
> if (pi->app_tag == T10_PI_APP_ESCAPE)
> --
> 2.20.0

I didn't have the break in my local patch but I think this is more
correct based on the description of the enums. Like Nick pointed out,
there is no functional change because this value is not used in this
file.

Reviewed-by: Nathan Chancellor <[email protected]>

2019-09-23 19:01:04

by Max Gurtovoy

[permalink] [raw]
Subject: Re: [PATCH] block: t10-pi: fix -Wswitch warning


On 9/20/2019 9:05 AM, Nathan Chancellor wrote:
> On Thu, Sep 19, 2019 at 03:57:19PM +0200, Arnd Bergmann wrote:
>> Changing the switch() statement to symbolic constants made
>> the compiler (at least clang-9, did not check gcc) notice that
>> there is one enum value that is not handled here:
>>
>> block/t10-pi.c:62:11: error: enumeration value 'T10_PI_TYPE0_PROTECTION' not handled in switch [-Werror,-Wswitch]
>>
>> Add another case for the missing value and do nothing there
>> based on the assumption that the code was working correctly
>> already.
>>
>> Fixes: 9b2061b1a262 ("block: use symbolic constants for t10_pi type")
>> Signed-off-by: Arnd Bergmann <[email protected]>
>> ---
>> block/t10-pi.c | 2 ++
>> 1 file changed, 2 insertions(+)
>>
>> diff --git a/block/t10-pi.c b/block/t10-pi.c
>> index 0c0120a672f9..055fac923946 100644
>> --- a/block/t10-pi.c
>> +++ b/block/t10-pi.c
>> @@ -60,6 +60,8 @@ static blk_status_t t10_pi_verify(struct blk_integrity_iter *iter,
>> __be16 csum;
>>
>> switch (type) {
>> + case T10_PI_TYPE0_PROTECTION:
>> + break;
>> case T10_PI_TYPE1_PROTECTION:
>> case T10_PI_TYPE2_PROTECTION:
>> if (pi->app_tag == T10_PI_APP_ESCAPE)
>> --
>> 2.20.0
> I didn't have the break in my local patch but I think this is more
> correct based on the description of the enums. Like Nick pointed out,
> there is no functional change because this value is not used in this
> file.
>
> Reviewed-by: Nathan Chancellor <[email protected]>

Hi,

we had a thread with Martin regarding this issue and we decided to set a
default clause and add a BUG() in case we get there.

I've sent a patch with this fix.

-Max.