]> www.infradead.org Git - users/hch/xfsprogs.git/commitdiff
xfs_repair: clear bad flags in process_dinode_int
authorEric Sandeen <sandeen@redhat.com>
Mon, 15 Sep 2014 23:23:39 +0000 (09:23 +1000)
committerDave Chinner <david@fromorbit.com>
Mon, 15 Sep 2014 23:23:39 +0000 (09:23 +1000)
process_dinode_int() reports bad flags if dino->di_flags &
~XFS_DIFLAG_ANY - i.e. if any flags are set outside the known set.
But then instead of clearing them, it does flags &= ~XFS_DIFLAG_ANY
which keeps *only* the bad flags.  This leads to persistent,
unrepairable errors of the form:

"Bad flags set in inode XXX"

Fix this.

While we are at it, fix a couple lines which look like they used to
be continuation lines, but are no longer.

Signed-off-by: Eric Sandeen <sandeen@redhat.com>
Reviewed-by: Brian Foster <bfoster@redhat.com>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Dave Chinner <david@fromorbit.com>
repair/dinode.c

index 8891e84ee7d234530c6a979763c9102af5595824..38a65623486b3ade3c7f88f8a0021c187b9b32c6 100644 (file)
@@ -2456,7 +2456,7 @@ _("bad (negative) size %" PRId64 " on inode %" PRIu64 "\n"),
        _("Bad flags set in inode %" PRIu64 "\n"),
                                        lino);
                        }
-                       flags &= ~XFS_DIFLAG_ANY;
+                       flags &= XFS_DIFLAG_ANY;
                }
 
                if (flags & (XFS_DIFLAG_REALTIME | XFS_DIFLAG_RTINHERIT)) {
@@ -2513,11 +2513,11 @@ _("bad (negative) size %" PRId64 " on inode %" PRIu64 "\n"),
                }
                if (!verify_mode && flags != be16_to_cpu(dino->di_flags)) {
                        if (!no_modify) {
-                               do_warn(_("fixing bad flags.\n"));
+                               do_warn(_("fixing bad flags.\n"));
                                dino->di_flags = cpu_to_be16(flags);
                                *dirty = 1;
                        } else
-                               do_warn(_("would fix bad flags.\n"));
+                               do_warn(_("would fix bad flags.\n"));
                }
        }