]> git.ipfire.org Git - thirdparty/xfsprogs-dev.git/commitdiff
xfs: call xfs_dinode_verify from xfs_inode_from_disk
authorChristoph Hellwig <hch@lst.de>
Mon, 10 Aug 2020 20:32:06 +0000 (16:32 -0400)
committerEric Sandeen <sandeen@sandeen.net>
Mon, 10 Aug 2020 20:32:06 +0000 (16:32 -0400)
Source kernel commit: 2d6051d4965308c3367bf5a2468dff969872a96e

Keep the code dealing with the dinode together, and also ensure we verify
the dinode in the owner change log recovery case as well.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Brian Foster <bfoster@redhat.com>
Reviewed-by: Darrick J. Wong <darrick.wong@oracle.com>
Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
Signed-off-by: Eric Sandeen <sandeen@sandeen.net>
libxfs/xfs_inode_buf.c

index f90217af9cac6e05cb57b9de81bf2a4db167898d..8e7434b8a9e275d3270521f3e2810c9b04f5c2b9 100644 (file)
@@ -185,10 +185,18 @@ xfs_inode_from_disk(
        struct xfs_icdinode     *to = &ip->i_d;
        struct inode            *inode = VFS_I(ip);
        int                     error;
+       xfs_failaddr_t          fa;
 
        ASSERT(ip->i_cowfp == NULL);
        ASSERT(ip->i_afp == NULL);
 
+       fa = xfs_dinode_verify(ip->i_mount, ip->i_ino, from);
+       if (fa) {
+               xfs_inode_verifier_error(ip, -EFSCORRUPTED, "dinode", from,
+                               sizeof(*from), fa);
+               return -EFSCORRUPTED;
+       }
+
        /*
         * First get the permanent information that is needed to allocate an
         * inode. If the inode is unused, mode is zero and we shouldn't mess
@@ -624,7 +632,6 @@ xfs_iread(
 {
        xfs_buf_t       *bp;
        xfs_dinode_t    *dip;
-       xfs_failaddr_t  fa;
        int             error;
 
        /*
@@ -649,15 +656,6 @@ xfs_iread(
        if (error)
                return error;
 
-       /* even unallocated inodes are verified */
-       fa = xfs_dinode_verify(mp, ip->i_ino, dip);
-       if (fa) {
-               xfs_inode_verifier_error(ip, -EFSCORRUPTED, "dinode", dip,
-                               sizeof(*dip), fa);
-               error = -EFSCORRUPTED;
-               goto out_brelse;
-       }
-
        error = xfs_inode_from_disk(ip, dip);
        if (error)
                goto out_brelse;