On Fri, Jul 02, 2021 at 07:57:50PM -0700, Darrick J. Wong wrote: > From: Darrick J. Wong <djwong@xxxxxxxxxx> > > If we encounter a directory that has been configured to pass on an > extent size hint to a new realtime file and the hint isn't an integer > multiple of the rt extent size, we should turn off the hint because that > is a misconfiguration. > > Signed-off-by: Darrick J. Wong <djwong@xxxxxxxxxx> > --- > repair/dinode.c | 28 +++++++++++++++++++++++++++- > 1 file changed, 27 insertions(+), 1 deletion(-) > > > diff --git a/repair/dinode.c b/repair/dinode.c > index 291c5807..1275c90b 100644 > --- a/repair/dinode.c > +++ b/repair/dinode.c > @@ -2178,6 +2178,31 @@ _("Bad %s nsec %u on inode %" PRIu64 ", "), name, be32_to_cpu(t->t_nsec), lino); > *dirty = 1; > } > } > +/* > + * Inode verifiers on older kernels don't check that the extent size hint is an > + * integer multiple of the rt extent size on a directory with both rtinherit > + * and extszinherit flags set. If we encounter a directory that is > + * misconfigured in this way, or a regular file that inherited a bad hint from > + * a directory, clear the hint. > + */ > +static bool > +zap_bad_rt_extsize_hint( The name suggests this function does the zapping itself, while it actually leaves that to the caller. Oterwise looks good: Reviewed-by: Christoph Hellwig <hch@xxxxxx>