diff mbox series

block: t10-pi: fix -Wswitch warning

Message ID 20190919135725.1287963-1-arnd@arndb.de
State New
Headers show
Series block: t10-pi: fix -Wswitch warning | expand

Commit Message

Arnd Bergmann Sept. 19, 2019, 1:57 p.m. UTC
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 <arnd@arndb.de>

---
 block/t10-pi.c | 2 ++
 1 file changed, 2 insertions(+)

-- 
2.20.0

Comments

Nick Desaulniers Sept. 19, 2019, 4:21 p.m. UTC | #1
On Thu, Sep 19, 2019 at 6:57 AM Arnd Bergmann <arnd@arndb.de> 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 <arnd@arndb.de>


Reported-by: kbuild test robot <lkp@intel.com>
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 <ndesaulniers@google.com>

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
Nathan Chancellor Sept. 20, 2019, 6:05 a.m. UTC | #2
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 <arnd@arndb.de>

> ---

>  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 <natechancellor@gmail.com>
Max Gurtovoy Sept. 21, 2019, 10:05 p.m. UTC | #3
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 <arnd@arndb.de>

>> ---

>>   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 <natechancellor@gmail.com>


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.
diff mbox series

Patch

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)