On Thu, Aug 13, 2020 at 09:53:45PM +0800, Gao Xiang wrote: > Hi, > > On Thu, Aug 13, 2020 at 02:03:24PM +0800, Zorro Lang wrote: > > A test fails as: > > # xfs_db -c "inode 133" -c "addr" -c "p core.size" -c "type inode" -c "addr" -c "p core.size" /dev/sdb1 > > current > > byte offset 68096, length 512 > > buffer block 128 (fsbno 16), 32 bbs > > inode 133, dir inode -1, type inode > > core.size = 123142 > > current > > byte offset 65536, length 512 > > buffer block 128 (fsbno 16), 32 bbs > > inode 128, dir inode 128, type inode > > core.size = 42 > > > > The "type inode" get wrong inode addr due to it trys to get the > > beginning of an inode chunk, refer to "533d1d229 xfs_db: properly set > > inode type". > > From the kernel side, the prefered way is > commit id ("subject") Hi Xiang, Thanks for your review. I'll change my commit log. > > > > > We don't need to get the beginning of a chunk in set_iocur_type, due > > to set_cur_inode(ino) will help to do all of that and make a proper > > verification. We just need to give it a correct inode. > > > > Reported-by: Jianhong Yin <jiyin@xxxxxxxxxx> > > Signed-off-by: Zorro Lang <zlang@xxxxxxxxxx> > > --- > > db/io.c | 3 ++- > > 1 file changed, 2 insertions(+), 1 deletion(-) > > > > diff --git a/db/io.c b/db/io.c > > index 6628d061..61940a07 100644 > > --- a/db/io.c > > +++ b/db/io.c > > @@ -591,6 +591,7 @@ set_iocur_type( > > /* Inodes are special; verifier checks all inodes in the chunk */ > > if (type->typnm == TYP_INODE) { > > xfs_daddr_t b = iocur_top->bb; > > + int bo = iocur_top->boff; > > xfs_ino_t ino; > > > > /* > > @@ -598,7 +599,7 @@ set_iocur_type( > > * which contains the current disk location; daddr may change. > > */ > > ino = XFS_AGINO_TO_INO(mp, xfs_daddr_to_agno(mp, b), > > - ((b << BBSHIFT) >> mp->m_sb.sb_inodelog) % > > + (((b << BBSHIFT) + bo) >> mp->m_sb.sb_inodelog) % > > XFS_AGB_TO_AGINO(mp, mp->m_sb.sb_agblocks)); > > set_cur_inode(ino); > > return; > > Not familar with such code, but after looking into a bit, (my premature > thought is that) I'm wondering if we need to reverify original buffer in > > if (type->fields) { > ... > set_cur() > } > > iocur_top->typ = type; > > /* verify the buffer if the type has one. */ > ... > > since set_cur() already verified the buffer in > set_cur->libxfs_buf_read->...->libxfs_readbuf_verify? > > Not related to this patchset but I'm a bit curious about it now... I'm not the one who learn about xfsprogs best:) But by looking into set_cur_inode() -> set_cur(), I think the set_cur() does the xfs_buf verification, so I don't think we need to do that again at the end of set_iocur_type(). Thanks, Zorro > > Thanks, > Gao Xiang > > > -- > > 2.20.1 > > >