mirror of
https://github.com/freebsd/freebsd-src
synced 2024-10-15 12:54:27 +00:00
makefs/zfs: fix build with gcc 12 after b5a2bf512d
Due to integer promotion rules, dn_nlevels (uint8_t) gets promoted to a
plain int, resulting in -Werror warnings with gcc 12:
In file included from /workspace/src/usr.sbin/makefs/zfs.c:35:
/workspace/src/usr.sbin/makefs/zfs.c: In function '_dnode_cursor_flush':
/workspace/src/usr.sbin/makefs/zfs.c:684:23: error: comparison of integer expressions of different signedness: 'unsigned int' and 'int' [-Werror=sign-compare]
684 | assert(levels <= c->dnode->dn_nlevels - 1);
| ^~
/workspace/src/usr.sbin/makefs/zfs.c:691:27: error: comparison of integer expressions of different signedness: 'unsigned int' and 'int' [-Werror=sign-compare]
691 | if (level == c->dnode->dn_nlevels - 1) {
| ^~
/workspace/src/usr.sbin/makefs/zfs.c: In function 'dnode_cursor_next':
/workspace/src/usr.sbin/makefs/zfs.c:739:41: error: comparison of integer expressions of different signedness: 'unsigned int' and 'int' [-Werror=sign-compare]
739 | for (levels = 0; levels < c->dnode->dn_nlevels - 1; levels++) {
| ^
Fix it by subtracting 1U instead of 1.
Fixes: b5a2bf512d
MFC after: 3 days
This commit is contained in:
parent
dbf7691999
commit
8a77bc5e1b
|
@ -681,14 +681,14 @@ _dnode_cursor_flush(zfs_opt_t *zfs, struct dnode_cursor *c, unsigned int levels)
|
|||
off_t blkid, blksz, loc;
|
||||
|
||||
assert(levels > 0);
|
||||
assert(levels <= c->dnode->dn_nlevels - 1);
|
||||
assert(levels <= c->dnode->dn_nlevels - 1U);
|
||||
|
||||
blksz = MAXBLOCKSIZE;
|
||||
blkid = (c->dataoff / c->datablksz) / BLKPTR_PER_INDIR;
|
||||
for (unsigned int level = 1; level <= levels; level++) {
|
||||
buf = c->inddir[level - 1];
|
||||
|
||||
if (level == c->dnode->dn_nlevels - 1) {
|
||||
if (level == c->dnode->dn_nlevels - 1U) {
|
||||
pbp = &c->dnode->dn_blkptr[0];
|
||||
} else {
|
||||
uint64_t iblkid;
|
||||
|
@ -736,7 +736,7 @@ dnode_cursor_next(zfs_opt_t *zfs, struct dnode_cursor *c, off_t off)
|
|||
/* Do we need to flush any full indirect blocks? */
|
||||
if (off > 0) {
|
||||
blkid = off / c->datablksz;
|
||||
for (levels = 0; levels < c->dnode->dn_nlevels - 1; levels++) {
|
||||
for (levels = 0; levels < c->dnode->dn_nlevels - 1U; levels++) {
|
||||
if (blkid % BLKPTR_PER_INDIR != 0)
|
||||
break;
|
||||
blkid /= BLKPTR_PER_INDIR;
|
||||
|
|
Loading…
Reference in a new issue