From a65177d51b3fd82ac3c3515fe2b7f0fb66e2ddd5 Mon Sep 17 00:00:00 2001 From: "Darrick J. Wong" Date: Thu, 28 Jun 2018 15:09:21 -0500 Subject: [PATCH] xfs_repair: clear extent size hints when clearing inode core In kernel 4.18 we become more strict about what can be in the extent size hint fields, even for freed inodes. Therefore, if repair decides to clear out an inode core, zero the hint fields and clear the flags so that the kernel won't trip over the cleared inode if and when it tries to read the chunk. Signed-off-by: Darrick J. Wong Reviewed-by: Eric Sandeen Signed-off-by: Eric Sandeen --- repair/dinode.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/repair/dinode.c b/repair/dinode.c index 49d5d058a..72e09cc99 100644 --- a/repair/dinode.c +++ b/repair/dinode.c @@ -194,6 +194,11 @@ clear_dinode_core(struct xfs_mount *mp, xfs_dinode_t *dinoc, xfs_ino_t ino_num) dinoc->di_anextents = 0; } + if (be32_to_cpu(dinoc->di_extsize) != 0) { + __dirty_no_modify_ret(dirty); + dinoc->di_extsize = 0; + } + if (dinoc->di_version > 1 && be32_to_cpu(dinoc->di_nlink) != 0) { __dirty_no_modify_ret(dirty); @@ -237,6 +242,11 @@ clear_dinode_core(struct xfs_mount *mp, xfs_dinode_t *dinoc, xfs_ino_t ino_num) dinoc->di_changecount = 0; } + if (be32_to_cpu(dinoc->di_cowextsize) != 0) { + __dirty_no_modify_ret(dirty); + dinoc->di_cowextsize = 0; + } + return dirty; } -- 2.47.2