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);
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);
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;
co = 0;
eo = -1;
}
+ cosave = co;
for (whichfork = XFS_DATA_FORK;
whichfork <= XFS_ATTR_FORK;
whichfork++) {
be.blockcount, be.flag);
co = be.startoff + be.blockcount;
}
+ co = cosave;
}
return 0;
}
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 <utako@tnes.nec.co.jp> for these.
+ Thanks to Utako Kusaka <utako@tnes.nec.co.jp> for the above three
+ fixes.
xfsprogs-2.8.17
- Fix up libxfs SEGV when attempting to mount a non-XFS filesystem.