On Mar 24, 2024 / 20:13, Chao Yu wrote: ... > Hi Shinichiro, > > Can you please check below diff? IIUC, for the case: f2fs_map_blocks() > returns zero blkaddr in non-primary device, which is a verified valid > block address, we'd better to check m_flags & F2FS_MAP_MAPPED instead > of map.m_pblk != NULL_ADDR to decide whether tagging IOMAP_MAPPED flag > or not. > > --- > fs/f2fs/data.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/fs/f2fs/data.c b/fs/f2fs/data.c > index 6f66e3e4221a..41a56d4298c8 100644 > --- a/fs/f2fs/data.c > +++ b/fs/f2fs/data.c > @@ -4203,7 +4203,7 @@ static int f2fs_iomap_begin(struct inode *inode, loff_t offset, loff_t length, > if (WARN_ON_ONCE(map.m_pblk == COMPRESS_ADDR)) > return -EINVAL; > > - if (map.m_pblk != NULL_ADDR) { > + if (map.m_flags & F2FS_MAP_MAPPED) { > iomap->length = blks_to_bytes(inode, map.m_len); > iomap->type = IOMAP_MAPPED; > iomap->flags |= IOMAP_F_MERGED; > Thanks Chao, I confirmed that the diff above avoids the WARN and zbd/010 failure. From that point of view, it looks good. One thing I noticed is that the commit message of 8d3c1fa3fa5ea ("f2fs: don't rely on F2FS_MAP_* in f2fs_iomap_begin") says that f2fs_map_blocks() might be setting F2FS_MAP_* flag on a hole, and that's why the commit avoided the F2FS_MAP_MAPPED flag check. So I was not sure if it is the right thing to reintroduce the flag check.