mirror of
https://git.proxmox.com/git/mirror_zfs.git
synced 2025-11-05 22:04:53 +03:00
Fix gcc array subscript above bounds warning
In a debug build, certain GCC versions flag an array bounds warning in
the below code from dnode_sync.c
} else {
int i;
ASSERT(dn->dn_next_nblkptr[txgoff] < dnp->dn_nblkptr);
/* the blkptrs we are losing better be unallocated */
for (i = dn->dn_next_nblkptr[txgoff];
i < dnp->dn_nblkptr; i++)
ASSERT(BP_IS_HOLE(&dnp->dn_blkptr[i]));
This usage is in fact safe, since the ASSERT ensures the index does
not exceed to maximum possible number of block pointers. However gcc
can't determine that the assignment 'i = dn->dn_next_nblkptr[txgoff];'
falls within the array bounds so it issues a warning. To avoid this,
initialize i to zero to make gcc happy but skip the elements before
dn->dn_next_nblkptr[txgoff] in the loop body. Since a dnode contains
at most 3 block pointers this overhead should be negligible.
Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>
Closes #950
This commit is contained in:
parent
e44056fcb6
commit
37f000c5aa
@ -666,9 +666,10 @@ dnode_sync(dnode_t *dn, dmu_tx_t *tx)
|
||||
int i;
|
||||
ASSERT(dn->dn_next_nblkptr[txgoff] < dnp->dn_nblkptr);
|
||||
/* the blkptrs we are losing better be unallocated */
|
||||
for (i = dn->dn_next_nblkptr[txgoff];
|
||||
i < dnp->dn_nblkptr; i++)
|
||||
ASSERT(BP_IS_HOLE(&dnp->dn_blkptr[i]));
|
||||
for (i = 0; i < dnp->dn_nblkptr; i++) {
|
||||
if (i >= dn->dn_next_nblkptr[txgoff])
|
||||
ASSERT(BP_IS_HOLE(&dnp->dn_blkptr[i]));
|
||||
}
|
||||
#endif
|
||||
}
|
||||
mutex_enter(&dn->dn_mtx);
|
||||
|
||||
Loading…
Reference in New Issue
Block a user