]> git.ipfire.org Git - thirdparty/xfsprogs-dev.git/commit
libxfs: always initialize internal buffer map
authorDarrick J. Wong <djwong@kernel.org>
Thu, 6 Jan 2022 22:13:16 +0000 (14:13 -0800)
committerDarrick J. Wong <djwong@kernel.org>
Thu, 20 Jan 2022 00:02:50 +0000 (16:02 -0800)
commit8c2dc30f85448b8800e94ace56aa1f542a274c60
treeb67eca4e122117ffc4cb686ae6fd00b05254548d
parentb9812a496b17a65d538b235f216c85f86cd8d947
libxfs: always initialize internal buffer map

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@kernel.org>
libxfs/rdwr.c