Message ID | 150905613147.28563.3642613984403228295.stgit@magnolia (mailing list archive) |
---|---|
State | Accepted |
Headers | show |
On 10/26/17 5:15 PM, Darrick J. Wong wrote: > From: Darrick J. Wong <darrick.wong@oracle.com> > > Make sure that we never leave the filesystem with a zero cowextsize hint > while the cowextsize inode flag is set. > > Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com> Ok. Is there anything that catches cowextsize set on di_version < 3? Reviewed-by: Eric Sandeen <sandeen@redhat.com> -- To unsubscribe from this list: send the line "unsubscribe linux-xfs" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On Thu, Oct 26, 2017 at 09:06:10PM -0500, Eric Sandeen wrote: > On 10/26/17 5:15 PM, Darrick J. Wong wrote: > > From: Darrick J. Wong <darrick.wong@oracle.com> > > > > Make sure that we never leave the filesystem with a zero cowextsize hint > > while the cowextsize inode flag is set. > > > > Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com> > > Ok. Is there anything that catches cowextsize set on di_version < 3? No, because the inode core structure isn't large enough to have cowextsize if version < 3. --D > > Reviewed-by: Eric Sandeen <sandeen@redhat.com> > > -- > To unsubscribe from this list: send the line "unsubscribe linux-xfs" in > the body of a message to majordomo@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html -- To unsubscribe from this list: send the line "unsubscribe linux-xfs" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On 10/27/17 11:17 AM, Darrick J. Wong wrote: > On Thu, Oct 26, 2017 at 09:06:10PM -0500, Eric Sandeen wrote: >> On 10/26/17 5:15 PM, Darrick J. Wong wrote: >>> From: Darrick J. Wong <darrick.wong@oracle.com> >>> >>> Make sure that we never leave the filesystem with a zero cowextsize hint >>> while the cowextsize inode flag is set. >>> >>> Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com> >> >> Ok. Is there anything that catches cowextsize set on di_version < 3? > > No, because the inode core structure isn't large enough to have > cowextsize if version < 3. Oh right - no di_flags2 to hold the XFS_DIFLAG2_COWEXTSIZE flag, and no di_cowextsize to hold a value. Derp, sorry for the noise. -Eric -- To unsubscribe from this list: send the line "unsubscribe linux-xfs" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/repair/dinode.c b/repair/dinode.c index e62ec33..32cc769 100644 --- a/repair/dinode.c +++ b/repair/dinode.c @@ -2694,6 +2694,7 @@ _("Cannot have non-zero CoW extent size %u on non-cowextsize inode %" PRIu64 ", be32_to_cpu(dino->di_cowextsize), lino); if (!no_modify) { do_warn(_("resetting to zero\n")); + dino->di_flags2 &= ~cpu_to_be64(XFS_DIFLAG2_COWEXTSIZE); dino->di_cowextsize = 0; *dirty = 1; } else @@ -2702,6 +2703,24 @@ _("Cannot have non-zero CoW extent size %u on non-cowextsize inode %" PRIu64 ", } /* + * Can't have the COWEXTSIZE flag set with no hint. + */ + if (dino->di_version >= 3 && + be32_to_cpu(dino->di_cowextsize) == 0 && + (be64_to_cpu(dino->di_flags2) & XFS_DIFLAG2_COWEXTSIZE)) { + do_warn( +_("Cannot have CoW extent size of zero on cowextsize inode %" PRIu64 ", "), + lino); + if (!no_modify) { + do_warn(_("clearing cowextsize flag\n")); + dino->di_flags2 &= ~cpu_to_be64(XFS_DIFLAG2_COWEXTSIZE); + *dirty = 1; + } else { + do_warn(_("would clear cowextsize flag\n")); + } + } + + /* * general size/consistency checks: */ if (process_check_inode_sizes(mp, dino, lino, type) != 0)