]> git.ipfire.org Git - thirdparty/xfsprogs-dev.git/commitdiff
Fix two issues with bmap, ablock and dblock commands in xfs_db
authorBarry Naujok <bnaujok@sgi.com>
Fri, 8 Dec 2006 05:11:05 +0000 (05:11 +0000)
committerBarry Naujok <bnaujok@sgi.com>
Fri, 8 Dec 2006 05:11:05 +0000 (05:11 +0000)
Merge of master-melb:xfs-cmds:27664a by kenmcd.

  Stop bmap() from infinite looping or crashing with local format

db/bmap.c
doc/CHANGES

index 555e9df40d257ee6c383006bf961ba60b2938ccf..934b42c8756d73ee4a61084ff7a590d203e2a45b 100644 (file)
--- 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;
 }
index a245139bc8538ae3fdd1f9d7805a474f5004379d..d197d07be607665419f2561baab0b6aea96c9ef6 100644 (file)
@@ -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 <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.