xfs: call xfs_iformat_fork from xfs_inode_from_disk
authorChristoph Hellwig <hch@lst.de>
Thu, 14 May 2020 21:00:02 +0000 (14:00 -0700)
committerDarrick J. Wong <darrick.wong@oracle.com>
Tue, 19 May 2020 16:40:57 +0000 (09:40 -0700)
We always need to fill out the fork structures when reading the inode,
so call xfs_iformat_fork from the tail of xfs_inode_from_disk.

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>
fs/xfs/libxfs/xfs_inode_buf.c
fs/xfs/libxfs/xfs_inode_buf.h
fs/xfs/xfs_inode_item_recover.c

index 81a010422bea31650a7889e72a5a955a27ad34c2..dc00ce6fc4a2f42662742863e6791d2864140b0d 100644 (file)
@@ -180,7 +180,7 @@ xfs_imap_to_bp(
        return 0;
 }
 
-void
+int
 xfs_inode_from_disk(
        struct xfs_inode        *ip,
        struct xfs_dinode       *from)
@@ -241,6 +241,8 @@ xfs_inode_from_disk(
                to->di_flags2 = be64_to_cpu(from->di_flags2);
                to->di_cowextsize = be32_to_cpu(from->di_cowextsize);
        }
+
+       return xfs_iformat_fork(ip, from);
 }
 
 void
@@ -641,8 +643,7 @@ xfs_iread(
         * Otherwise, just get the truly permanent information.
         */
        if (dip->di_mode) {
-               xfs_inode_from_disk(ip, dip);
-               error = xfs_iformat_fork(ip, dip);
+               error = xfs_inode_from_disk(ip, dip);
                if (error)  {
 #ifdef DEBUG
                        xfs_alert(mp, "%s: xfs_iformat() returned error %d",
index d9b4781ac9fd4ea0a86fb597f298ba49cc3ae223..0fbb99224ec73a09f4c79a0eca06a9bef226fe9f 100644 (file)
@@ -54,7 +54,7 @@ int   xfs_iread(struct xfs_mount *, struct xfs_trans *,
 void   xfs_dinode_calc_crc(struct xfs_mount *, struct xfs_dinode *);
 void   xfs_inode_to_disk(struct xfs_inode *ip, struct xfs_dinode *to,
                          xfs_lsn_t lsn);
-void   xfs_inode_from_disk(struct xfs_inode *ip, struct xfs_dinode *from);
+int    xfs_inode_from_disk(struct xfs_inode *ip, struct xfs_dinode *from);
 void   xfs_log_dinode_to_disk(struct xfs_log_dinode *from,
                               struct xfs_dinode *to);
 
index 2bdba612aa71f6ab1360f1be02e7fd5f240d0ea4..82ca5ce312c52c2190c24fc348112c32e6605be1 100644 (file)
@@ -89,9 +89,8 @@ xfs_recover_inode_owner_change(
 
        /* instantiate the inode */
        ASSERT(dip->di_version >= 3);
-       xfs_inode_from_disk(ip, dip);
 
-       error = xfs_iformat_fork(ip, dip);
+       error = xfs_inode_from_disk(ip, dip);
        if (error)
                goto out_free_ip;