Skip to content

Commit

Permalink
Use fallthrough macro
Browse files Browse the repository at this point in the history
As of the Linux 5.9 kernel a fallthrough macro has been added which
should be used to anotate all intentional fallthrough paths.  Once
all of the kernel code paths have been updated to use fallthrough
the -Wimplicit-fallthrough option will because the default.  To
avoid warnings in the OpenZFS code base when this happened this
change applies these fallthrough macro to the kenel code.

Additional reading: https://lwn.net/Articles/794944/

Signed-off-by: Brian Behlendorf <[email protected]>
  • Loading branch information
behlendorf committed Jul 27, 2021
1 parent b72611f commit 6e58f71
Show file tree
Hide file tree
Showing 20 changed files with 31 additions and 24 deletions.
1 change: 1 addition & 0 deletions include/os/freebsd/linux/compiler.h
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,7 @@
#define __always_inline inline
#define noinline __noinline
#define ____cacheline_aligned __aligned(CACHE_LINE_SIZE)
#define fallthrough

#if !defined(_KERNEL) && !defined(_STANDALONE)
#define likely(x) __builtin_expect(!!(x), 1)
Expand Down
4 changes: 4 additions & 0 deletions include/os/linux/kernel/linux/compiler_compat.h
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,10 @@

#include <linux/compiler.h>

#if !defined(fallthrough)
#define fallthrough
#endif

#if !defined(READ_ONCE)
#define READ_ONCE(x) ACCESS_ONCE(x)
#endif
Expand Down
1 change: 1 addition & 0 deletions include/os/linux/zfs/sys/zfs_context_os.h
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@

#include <linux/dcache_compat.h>
#include <linux/utsname_compat.h>
#include <linux/compiler_compat.h>
#include <linux/module.h>

#if THREAD_SIZE >= 16384
Expand Down
1 change: 1 addition & 0 deletions include/sys/zfs_context.h
Original file line number Diff line number Diff line change
Expand Up @@ -767,6 +767,7 @@ extern int __spl_pf_fstrans_check(void);
extern int kmem_cache_reap_active(void);

#define ____cacheline_aligned
#define fallthrough __attribute__((__fallthrough__))

/*
* Kernel modules
Expand Down
2 changes: 1 addition & 1 deletion module/icp/core/kcf_prov_tabs.c
Original file line number Diff line number Diff line change
Expand Up @@ -377,7 +377,7 @@ kcf_provider_zero_refcnt(kcf_provider_desc_t *desc)
mutex_exit(&desc->pd_lock);
break;
}
/* FALLTHROUGH */
fallthrough;

case CRYPTO_HW_PROVIDER:
case CRYPTO_LOGICAL_PROVIDER:
Expand Down
2 changes: 1 addition & 1 deletion module/icp/io/aes.c
Original file line number Diff line number Diff line change
Expand Up @@ -976,7 +976,7 @@ aes_encrypt_atomic(crypto_provider_handle_t provider,
case AES_GMAC_MECH_INFO_TYPE:
if (plaintext->cd_length != 0)
return (CRYPTO_ARGUMENTS_BAD);
/* FALLTHROUGH */
fallthrough;
case AES_GCM_MECH_INFO_TYPE:
length_needed = plaintext->cd_length + aes_ctx.ac_tag_len;
break;
Expand Down
2 changes: 1 addition & 1 deletion module/lua/lgc.c
Original file line number Diff line number Diff line change
Expand Up @@ -676,7 +676,7 @@ static void freeobj (lua_State *L, GCObject *o) {
case LUA_TUSERDATA: luaM_freemem(L, o, sizeudata(gco2u(o))); break;
case LUA_TSHRSTR:
G(L)->strt.nuse--;
/* FALLTHROUGH */
fallthrough;
case LUA_TLNGSTR: {
luaM_freemem(L, o, sizestring(gco2ts(o)));
break;
Expand Down
2 changes: 1 addition & 1 deletion module/lua/llex.c
Original file line number Diff line number Diff line change
Expand Up @@ -477,7 +477,7 @@ static int llex (LexState *ls, SemInfo *seminfo) {
else if (!lisdigit(ls->current)) return '.';
/* else go through */
}
/* FALLTHROUGH */
fallthrough;
case '0': case '1': case '2': case '3': case '4':
case '5': case '6': case '7': case '8': case '9': {
read_numeral(ls, seminfo);
Expand Down
2 changes: 1 addition & 1 deletion module/lua/lstrlib.c
Original file line number Diff line number Diff line change
Expand Up @@ -501,7 +501,7 @@ static const char *match (MatchState *ms, const char *s, const char *p) {
}
case '+': /* 1 or more repetitions */
s++; /* 1 match already done */
/* FALLTHROUGH */
fallthrough;
case '*': /* 0 or more repetitions */
s = max_expand(ms, s, p, ep);
break;
Expand Down
2 changes: 1 addition & 1 deletion module/lua/ltable.c
Original file line number Diff line number Diff line change
Expand Up @@ -492,7 +492,7 @@ const TValue *luaH_get (Table *t, const TValue *key) {
return luaH_getint(t, k); /* use specialized version */
/* else go through */
}
/* FALLTHROUGH */
fallthrough;
default: {
Node *n = mainposition(t, key);
do { /* check whether `key' is somewhere in the chain */
Expand Down
4 changes: 2 additions & 2 deletions module/os/freebsd/zfs/zfs_acl.c
Original file line number Diff line number Diff line change
Expand Up @@ -269,7 +269,7 @@ zfs_ace_fuid_size(void *acep)
entry_type == OWNING_GROUP ||
entry_type == ACE_EVERYONE)
return (sizeof (zfs_ace_hdr_t));
/* FALLTHROUGH */
fallthrough;
default:
return (sizeof (zfs_ace_t));
}
Expand Down Expand Up @@ -2153,7 +2153,7 @@ zfs_zaccess_aces_check(znode_t *zp, uint32_t *working_mode,
break;
case OWNING_GROUP:
who = gowner;
/* FALLTHROUGH */
fallthrough;
case ACE_IDENTIFIER_GROUP:
checkit = zfs_groupmember(zfsvfs, who, cr);
break;
Expand Down
2 changes: 1 addition & 1 deletion module/os/freebsd/zfs/zfs_vnops_os.c
Original file line number Diff line number Diff line change
Expand Up @@ -960,7 +960,7 @@ zfs_lookup(vnode_t *dvp, const char *nm, vnode_t **vpp,
cnp->cn_flags |= SAVENAME;
break;
}
/* FALLTHROUGH */
fallthrough;
case DELETE:
if (error == 0)
cnp->cn_flags |= SAVENAME;
Expand Down
4 changes: 2 additions & 2 deletions module/os/linux/zfs/zfs_acl.c
Original file line number Diff line number Diff line change
Expand Up @@ -269,7 +269,7 @@ zfs_ace_fuid_size(void *acep)
entry_type == OWNING_GROUP ||
entry_type == ACE_EVERYONE)
return (sizeof (zfs_ace_hdr_t));
/* FALLTHROUGH */
fallthrough;
default:
return (sizeof (zfs_ace_t));
}
Expand Down Expand Up @@ -2317,7 +2317,7 @@ zfs_zaccess_aces_check(znode_t *zp, uint32_t *working_mode,
break;
case OWNING_GROUP:
who = gowner;
/* FALLTHROUGH */
fallthrough;
case ACE_IDENTIFIER_GROUP:
checkit = zfs_groupmember(zfsvfs, who, cr);
break;
Expand Down
2 changes: 1 addition & 1 deletion module/os/linux/zfs/zfs_znode.c
Original file line number Diff line number Diff line change
Expand Up @@ -430,7 +430,7 @@ zfs_inode_set_ops(zfsvfs_t *zfsvfs, struct inode *ip)
case S_IFBLK:
(void) sa_lookup(ITOZ(ip)->z_sa_hdl, SA_ZPL_RDEV(zfsvfs), &rdev,
sizeof (rdev));
/* FALLTHROUGH */
fallthrough;
case S_IFIFO:
case S_IFSOCK:
init_special_inode(ip, ip->i_mode, rdev);
Expand Down
8 changes: 4 additions & 4 deletions module/zfs/abd.c
Original file line number Diff line number Diff line change
Expand Up @@ -1066,10 +1066,10 @@ abd_raidz_gen_iterate(abd_t **cabds, abd_t *dabd,
switch (parity) {
case 3:
len = MIN(caiters[2].iter_mapsize, len);
/* falls through */
fallthrough;
case 2:
len = MIN(caiters[1].iter_mapsize, len);
/* falls through */
fallthrough;
case 1:
len = MIN(caiters[0].iter_mapsize, len);
}
Expand Down Expand Up @@ -1179,11 +1179,11 @@ abd_raidz_rec_iterate(abd_t **cabds, abd_t **tabds,
case 3:
len = MIN(xiters[2].iter_mapsize, len);
len = MIN(citers[2].iter_mapsize, len);
/* falls through */
fallthrough;
case 2:
len = MIN(xiters[1].iter_mapsize, len);
len = MIN(citers[1].iter_mapsize, len);
/* falls through */
fallthrough;
case 1:
len = MIN(xiters[0].iter_mapsize, len);
len = MIN(citers[0].iter_mapsize, len);
Expand Down
2 changes: 1 addition & 1 deletion module/zfs/dsl_prop.c
Original file line number Diff line number Diff line change
Expand Up @@ -749,7 +749,7 @@ dsl_prop_set_sync_impl(dsl_dataset_t *ds, const char *propname,
ASSERT(err == 0 || err == ENOENT);
err = zap_remove(mos, zapobj, inheritstr, tx);
ASSERT(err == 0 || err == ENOENT);
/* FALLTHROUGH */
fallthrough;
case (ZPROP_SRC_NONE | ZPROP_SRC_RECEIVED):
/*
* remove propname$recvd
Expand Down
2 changes: 1 addition & 1 deletion module/zfs/spa.c
Original file line number Diff line number Diff line change
Expand Up @@ -9709,7 +9709,7 @@ spa_activity_in_progress(spa_t *spa, zpool_wait_activity_t activity,
case ZPOOL_WAIT_RESILVER:
if ((*in_progress = vdev_rebuild_active(spa->spa_root_vdev)))
break;
/* fall through */
fallthrough;
case ZPOOL_WAIT_SCRUB:
{
boolean_t scanning, paused, is_scrub;
Expand Down
2 changes: 1 addition & 1 deletion module/zfs/vdev_label.c
Original file line number Diff line number Diff line change
Expand Up @@ -1287,7 +1287,7 @@ vdev_label_read_bootenv(vdev_t *rvd, nvlist_t *bootenv)
nvlist_free(config);
break;
}
/* FALLTHROUGH */
fallthrough;
default:
/* Check for FreeBSD zfs bootonce command string */
buf = abd_to_buf(abd);
Expand Down
2 changes: 1 addition & 1 deletion module/zfs/vdev_raidz_math_scalar.c
Original file line number Diff line number Diff line change
Expand Up @@ -142,7 +142,7 @@ static const struct {
a.b[6] = mul_lt[a.b[6]]; \
a.b[5] = mul_lt[a.b[5]]; \
a.b[4] = mul_lt[a.b[4]]; \
/* falls through */ \
fallthrough; \
case 4: \
a.b[3] = mul_lt[a.b[3]]; \
a.b[2] = mul_lt[a.b[2]]; \
Expand Down
8 changes: 4 additions & 4 deletions module/zfs/zfs_replay.c
Original file line number Diff line number Diff line change
Expand Up @@ -362,7 +362,7 @@ zfs_replay_create_acl(void *arg1, void *arg2, boolean_t byteswap)
zfsvfs->z_fuid_replay = zfs_replay_fuids(fuidstart,
(void *)&name, lracl->lr_fuidcnt, lracl->lr_domcnt,
lr->lr_uid, lr->lr_gid);
/* FALLTHROUGH */
fallthrough;
case TX_CREATE_ACL_ATTR:
if (name == NULL) {
lrattr = (lr_attr_t *)(caddr_t)(lracl + 1);
Expand Down Expand Up @@ -394,7 +394,7 @@ zfs_replay_create_acl(void *arg1, void *arg2, boolean_t byteswap)
zfsvfs->z_fuid_replay = zfs_replay_fuids(fuidstart,
(void *)&name, lracl->lr_fuidcnt, lracl->lr_domcnt,
lr->lr_uid, lr->lr_gid);
/* FALLTHROUGH */
fallthrough;
case TX_MKDIR_ACL_ATTR:
if (name == NULL) {
lrattr = (lr_attr_t *)(caddr_t)(lracl + 1);
Expand Down Expand Up @@ -519,7 +519,7 @@ zfs_replay_create(void *arg1, void *arg2, boolean_t byteswap)
zfs_replay_fuid_domain(start, &start,
lr->lr_uid, lr->lr_gid);
name = (char *)start;
/* FALLTHROUGH */
fallthrough;

case TX_CREATE:
if (name == NULL)
Expand All @@ -537,7 +537,7 @@ zfs_replay_create(void *arg1, void *arg2, boolean_t byteswap)
zfs_replay_fuid_domain(start, &start,
lr->lr_uid, lr->lr_gid);
name = (char *)start;
/* FALLTHROUGH */
fallthrough;

case TX_MKDIR:
if (name == NULL)
Expand Down

0 comments on commit 6e58f71

Please sign in to comment.