vol: convert vnode macros to inline functions 97/12397/3
authorMichael Meffie <mmeffie@sinenomine.net>
Mon, 26 Sep 2016 15:19:13 +0000 (11:19 -0400)
committerBenjamin Kaduk <kaduk@mit.edu>
Sun, 25 Dec 2016 22:43:47 +0000 (17:43 -0500)
commit9c0db059b6585959e151f7acce845de280952c55
tree7e29dc418bdeff9a2ef28ebe1e9448604f014f9c
parent0ae62bfa99df8ef5d85b4848783f59a041f82828
vol: convert vnode macros to inline functions

Convert the vnode macros to inline functions to fix integer overflows
for very large vnode numbers (and generally improve the code robustness
and readability).

The macro version of vnodeIndexOffset() will evaluate to an incorrect
offset for very large vnode numbers due to 32-bit integer overflow. The
vnode index file will then be corrupted when writing to the incorrect
offset.

In code paths where the vnode number incorrectly defined as a signed
32-bit integer, this change prevents vnodeIndexOffset() from evaluating
to a negative result when a vnode number is larger than 2^31.

Thanks to Mark Vitale for reporting and providing analysis.

Change-Id: Ia6e0f2d2f97fa1091e0b5a4029d40098692ee681
Reviewed-on: https://gerrit.openafs.org/12397
Tested-by: BuildBot <buildbot@rampaginggeek.com>
Reviewed-by: Benjamin Kaduk <kaduk@mit.edu>
src/vol/vnode.h