On Fri, May 08, 2020 at 08:34:13AM +0200, Christoph Hellwig wrote: > 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@xxxxxx> > Reviewed-by: Brian Foster <bfoster@xxxxxxxxxx> LGTM, Reviewed-by: Darrick J. Wong <darrick.wong@xxxxxxxxxx> --D > --- > fs/xfs/libxfs/xfs_inode_buf.c | 7 ++++--- > fs/xfs/libxfs/xfs_inode_buf.h | 2 +- > fs/xfs/xfs_log_recover.c | 4 +--- > 3 files changed, 6 insertions(+), 7 deletions(-) > > diff --git a/fs/xfs/libxfs/xfs_inode_buf.c b/fs/xfs/libxfs/xfs_inode_buf.c > index 81a010422bea3..dc00ce6fc4a2f 100644 > --- a/fs/xfs/libxfs/xfs_inode_buf.c > +++ b/fs/xfs/libxfs/xfs_inode_buf.c > @@ -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", > diff --git a/fs/xfs/libxfs/xfs_inode_buf.h b/fs/xfs/libxfs/xfs_inode_buf.h > index d9b4781ac9fd4..0fbb99224ec73 100644 > --- a/fs/xfs/libxfs/xfs_inode_buf.h > +++ b/fs/xfs/libxfs/xfs_inode_buf.h > @@ -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); > > diff --git a/fs/xfs/xfs_log_recover.c b/fs/xfs/xfs_log_recover.c > index 3207851158332..3960caf51c9f7 100644 > --- a/fs/xfs/xfs_log_recover.c > +++ b/fs/xfs/xfs_log_recover.c > @@ -2874,9 +2874,7 @@ 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; > > -- > 2.26.2 >