fs: ext4: Fix alignment of cache buffers
authorJan Kiszka <jan.kiszka@siemens.com>
Wed, 25 Mar 2020 20:27:51 +0000 (21:27 +0100)
committerTom Rini <trini@konsulko.com>
Fri, 27 Mar 2020 19:42:04 +0000 (15:42 -0400)
We need to align the cache buffer to ARCH_DMA_MINALIGN in order to avoid
access errors like

CACHE: Misaligned operation at range [be0231e0be0235e0]

seen on the MCIMX7SABRE.

Fixes: d5aee659f217 ("fs: ext4: cache extent data")
Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
Reviewed-by: Tom Rini <trini@konsulko.com>
Reviewed-by: Stephen Warren <swarren@nvidia.com>
Tested-by: Peter Robinson <pbrobinson@gmail.com>
fs/ext4/ext4fs.c

index 1c616a26a272ba7c15736b317bbd9f50a2524dbe..966b427a974ec7e45aea0c90ae0d8c4849c241ca 100644 (file)
@@ -288,7 +288,7 @@ int ext_cache_read(struct ext_block_cache *cache, lbaint_t block, int size)
        if (cache->buf && cache->block == block && cache->size == size)
                return 1;
        ext_cache_fini(cache);
        if (cache->buf && cache->block == block && cache->size == size)
                return 1;
        ext_cache_fini(cache);
-       cache->buf = malloc(size);
+       cache->buf = memalign(ARCH_DMA_MINALIGN, size);
        if (!cache->buf)
                return 0;
        if (!ext4fs_devread(block, 0, size, cache->buf)) {
        if (!cache->buf)
                return 0;
        if (!ext4fs_devread(block, 0, size, cache->buf)) {