Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

drbd: address enum mismatch warnings

gcc -Wextra warns about mixing drbd_state_rv with drbd_ret_code
in a couple of places:

drivers/block/drbd/drbd_nl.c: In function 'drbd_adm_set_role':
drivers/block/drbd/drbd_nl.c:777:14: warning: comparison between 'enum drbd_state_rv' and 'enum drbd_ret_code' [-Wenum-compare]
777 | if (retcode != NO_ERROR)
| ^~
drivers/block/drbd/drbd_nl.c:784:12: warning: implicit conversion from 'enum drbd_ret_code' to 'enum drbd_state_rv' [-Wenum-conversion]
784 | retcode = ERR_MANDATORY_TAG;
| ^
drivers/block/drbd/drbd_nl.c: In function 'drbd_adm_attach':
drivers/block/drbd/drbd_nl.c:1965:10: warning: implicit conversion from 'enum drbd_state_rv' to 'enum drbd_ret_code' [-Wenum-conversion]
1965 | retcode = rv; /* FIXME: Type mismatch. */
| ^
drivers/block/drbd/drbd_nl.c: In function 'drbd_adm_connect':
drivers/block/drbd/drbd_nl.c:2690:10: warning: implicit conversion from 'enum drbd_state_rv' to 'enum drbd_ret_code' [-Wenum-conversion]
2690 | retcode = conn_request_state(connection, NS(conn, C_UNCONNECTED), CS_VERBOSE);
| ^
drivers/block/drbd/drbd_nl.c: In function 'drbd_adm_disconnect':
drivers/block/drbd/drbd_nl.c:2803:11: warning: implicit conversion from 'enum drbd_state_rv' to 'enum drbd_ret_code' [-Wenum-conversion]
2803 | retcode = rv; /* FIXME: Type mismatch. */
| ^

In each case, both are passed into drbd_adm_finish(), which just takes
a 32-bit integer and is happy with either, presumably intentionally.

Restructure the code to pass either type directly in there in most
cases, avoiding the warnings.

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Reviewed-by: Christoph Böhmwalder <christoph.boehmwalder@linbit.com>
Link: https://lore.kernel.org/r/20220406190715.1938174-3-christoph.boehmwalder@linbit.com
Signed-off-by: Jens Axboe <axboe@kernel.dk>

authored by

Arnd Bergmann and committed by
Jens Axboe
4b28f3b4 33cb0917

+13 -11
+13 -11
drivers/block/drbd/drbd_nl.c
··· 770 770 struct set_role_parms parms; 771 771 int err; 772 772 enum drbd_ret_code retcode; 773 + enum drbd_state_rv rv; 773 774 774 775 retcode = drbd_adm_prepare(&adm_ctx, skb, info, DRBD_ADM_NEED_MINOR); 775 776 if (!adm_ctx.reply_skb) ··· 791 790 mutex_lock(&adm_ctx.resource->adm_mutex); 792 791 793 792 if (info->genlhdr->cmd == DRBD_ADM_PRIMARY) 794 - retcode = (enum drbd_ret_code)drbd_set_role(adm_ctx.device, 795 - R_PRIMARY, parms.assume_uptodate); 793 + rv = drbd_set_role(adm_ctx.device, R_PRIMARY, parms.assume_uptodate); 796 794 else 797 - retcode = (enum drbd_ret_code)drbd_set_role(adm_ctx.device, 798 - R_SECONDARY, 0); 795 + rv = drbd_set_role(adm_ctx.device, R_SECONDARY, 0); 799 796 800 797 mutex_unlock(&adm_ctx.resource->adm_mutex); 801 798 genl_lock(); 799 + drbd_adm_finish(&adm_ctx, info, rv); 800 + return 0; 802 801 out: 803 802 drbd_adm_finish(&adm_ctx, info, retcode); 804 803 return 0; ··· 2493 2492 struct drbd_resource *resource; 2494 2493 struct drbd_connection *connection; 2495 2494 enum drbd_ret_code retcode; 2495 + enum drbd_state_rv rv; 2496 2496 int i; 2497 2497 int err; 2498 2498 ··· 2613 2611 } 2614 2612 rcu_read_unlock(); 2615 2613 2616 - retcode = (enum drbd_ret_code)conn_request_state(connection, 2617 - NS(conn, C_UNCONNECTED), CS_VERBOSE); 2614 + rv = conn_request_state(connection, NS(conn, C_UNCONNECTED), CS_VERBOSE); 2618 2615 2619 2616 conn_reconfig_done(connection); 2620 2617 mutex_unlock(&adm_ctx.resource->adm_mutex); 2621 - drbd_adm_finish(&adm_ctx, info, retcode); 2618 + drbd_adm_finish(&adm_ctx, info, rv); 2622 2619 return 0; 2623 2620 2624 2621 fail: ··· 2725 2724 2726 2725 mutex_lock(&adm_ctx.resource->adm_mutex); 2727 2726 rv = conn_try_disconnect(connection, parms.force_disconnect); 2728 - if (rv < SS_SUCCESS) 2729 - retcode = (enum drbd_ret_code)rv; 2730 - else 2731 - retcode = NO_ERROR; 2732 2727 mutex_unlock(&adm_ctx.resource->adm_mutex); 2728 + if (rv < SS_SUCCESS) { 2729 + drbd_adm_finish(&adm_ctx, info, rv); 2730 + return 0; 2731 + } 2732 + retcode = NO_ERROR; 2733 2733 fail: 2734 2734 drbd_adm_finish(&adm_ctx, info, retcode); 2735 2735 return 0;