On 1/19/22 6:21 PM, Darrick J. Wong wrote:
From: Darrick J. Wong <djwong@xxxxxxxxxx> The __initbuf function is responsible for initializing the fields of an xfs_buf. Buffers are always required to have a mapping, though in the typical case there's only one mapping, so we can use the internal one. The single-mapping b_maps init code at the end of the function doesn't quite get this right though -- if a single-mapping buffer in the cache was allowed to expire and now is being repurposed, it'll come out with b_maps == &__b_map, in which case we incorrectly skip initializing the map. This has gone unnoticed until now because (AFAICT) the code paths that use b_maps are the same ones that are called with multi-mapping buffers, which are initialized correctly. Anyway, the improperly initialized single-mappings will cause problems in upcoming patches where we turn b_bn into the cache key and require the use of b_maps[0].bm_bn for the buffer LBA. Fix this. Signed-off-by: Darrick J. Wong <djwong@xxxxxxxxxx>
Reviewed-by: Eric Sandeen <sandeen@xxxxxxxxxx>