From: Barry Naujok Date: Fri, 8 Dec 2006 05:11:05 +0000 (+0000) Subject: Fix two issues with bmap, ablock and dblock commands in xfs_db X-Git-Tag: v2.9.0~22 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=c9ee470ef96cb51dbb95be97df95652440247f46;p=thirdparty%2Fxfsprogs-dev.git Fix two issues with bmap, ablock and dblock commands in xfs_db Merge of master-melb:xfs-cmds:27664a by kenmcd. Stop bmap() from infinite looping or crashing with local format --- diff --git a/db/bmap.c b/db/bmap.c index 555e9df40..934b42c87 100644 --- a/db/bmap.c +++ b/db/bmap.c @@ -77,7 +77,8 @@ bmap( fmt = (xfs_dinode_fmt_t)XFS_DFORK_FORMAT(dip, whichfork); typ = whichfork == XFS_DATA_FORK ? TYP_BMAPBTD : TYP_BMAPBTA; ASSERT(typtab[typ].typnm == typ); - ASSERT(fmt == XFS_DINODE_FMT_EXTENTS || fmt == XFS_DINODE_FMT_BTREE); + ASSERT(fmt == XFS_DINODE_FMT_LOCAL || fmt == XFS_DINODE_FMT_EXTENTS || + fmt == XFS_DINODE_FMT_BTREE); if (fmt == XFS_DINODE_FMT_EXTENTS) { nextents = XFS_DFORK_NEXTENTS(dip, whichfork); xp = (xfs_bmbt_rec_64_t *)XFS_DFORK_PTR(dip, whichfork); @@ -85,7 +86,7 @@ bmap( if (!bmap_one_extent(ep, &curoffset, eoffset, &n, bep)) break; } - } else { + } else if (fmt == XFS_DINODE_FMT_BTREE) { push_cur(); bno = NULLFSBLOCK; rblock = (xfs_bmdr_block_t *)XFS_DFORK_PTR(dip, whichfork); @@ -147,7 +148,7 @@ bmap_f( int afork = 0; bmap_ext_t be; int c; - xfs_dfiloff_t co; + xfs_dfiloff_t co, cosave; int dfork = 0; xfs_dinode_t *dip; xfs_dfiloff_t eo; @@ -205,6 +206,7 @@ bmap_f( co = 0; eo = -1; } + cosave = co; for (whichfork = XFS_DATA_FORK; whichfork <= XFS_ATTR_FORK; whichfork++) { @@ -226,6 +228,7 @@ bmap_f( be.blockcount, be.flag); co = be.startoff + be.blockcount; } + co = cosave; } return 0; } diff --git a/doc/CHANGES b/doc/CHANGES index a245139bc..d197d07be 100644 --- a/doc/CHANGES +++ b/doc/CHANGES @@ -1,7 +1,11 @@ xfsprogs-2.8.x + - Fix up two issues with xfs_db and bmap. If the data/attr fork is + local, it either infinite loops or crashes. If both are displayed, + the attrs are wrong. - Fix up xfs_io mmap read that read from the wrong offset. - Updated xfs_io man page. - Thanks to Utako Kusaka for these. + Thanks to Utako Kusaka for the above three + fixes. xfsprogs-2.8.17 - Fix up libxfs SEGV when attempting to mount a non-XFS filesystem.