From: Zhang Yi ext4_da_map_blocks() returns a delalloc mapping through @map without touching map->m_pblk at all. Callers that only set up m_lblk and m_len of their local struct ext4_map_blocks and leave the rest to the mapping helper, like ext4_iomap_map_blocks() does, end up with whatever happened to be on their stack, so the trace_ext4_iomap_buffered_write_begin() tracepoint prints an uninitialized pblk for a delalloc mapping. This has been harmless so far, ext4_da_get_block_prep() and ext4_set_iomap() both ignore m_pblk for a delalloc mapping, only the new tracepoint dumps it. Initialize m_pblk along with m_flags at the beginning of ext4_da_map_blocks(), so that a delalloc mapping is always reported with pblk 0, the same way ext4_map_blocks() reports it. Fixes: 008f019ab559 ("ext4: add block mapping tracepoints for iomap buffered I/O path") Signed-off-by: Zhang Yi --- fs/ext4/inode.c | 1 + 1 file changed, 1 insertion(+) diff --git a/fs/ext4/inode.c b/fs/ext4/inode.c index 6b2f1b07f41e6..c1c46e86bba3e 100644 --- a/fs/ext4/inode.c +++ b/fs/ext4/inode.c @@ -2041,6 +2041,7 @@ static int ext4_da_map_blocks(struct inode *inode, struct ext4_map_blocks *map) #endif map->m_flags = 0; + map->m_pblk = 0; ext_debug(inode, "max_blocks %u, logical block %lu\n", map->m_len, (unsigned long) map->m_lblk); -- 2.52.0