xfs: remove the inode log format from the inode log item
No need to keep the inode log format around all the time, we can easily generate it at iop_format time. Signed-off-by: Christoph Hellwig <hch@lst.de> Reviewed-by: Dave Chinner <dchinner@redhat.com> Signed-off-by: Dave Chinner <david@fromorbit.com>
This commit is contained in:
parent
da7765031d
commit
2f251293b0
|
@ -370,17 +370,21 @@ xfs_inode_item_format(
|
||||||
struct xfs_inode_log_format *ilf;
|
struct xfs_inode_log_format *ilf;
|
||||||
struct xfs_log_iovec *vecp = NULL;
|
struct xfs_log_iovec *vecp = NULL;
|
||||||
|
|
||||||
ilf = xlog_copy_iovec(lv, &vecp, XLOG_REG_TYPE_IFORMAT,
|
ilf = xlog_prepare_iovec(lv, &vecp, XLOG_REG_TYPE_IFORMAT);
|
||||||
&iip->ili_format,
|
ilf->ilf_type = XFS_LI_INODE;
|
||||||
sizeof(struct xfs_inode_log_format));
|
ilf->ilf_ino = ip->i_ino;
|
||||||
ilf->ilf_size = 1;
|
ilf->ilf_blkno = ip->i_imap.im_blkno;
|
||||||
|
ilf->ilf_len = ip->i_imap.im_len;
|
||||||
|
ilf->ilf_boffset = ip->i_imap.im_boffset;
|
||||||
|
ilf->ilf_fields = XFS_ILOG_CORE;
|
||||||
|
ilf->ilf_size = 2; /* format + core */
|
||||||
|
xlog_finish_iovec(lv, vecp, sizeof(struct xfs_inode_log_format));
|
||||||
|
|
||||||
if (ip->i_d.di_version == 1)
|
if (ip->i_d.di_version == 1)
|
||||||
xfs_inode_item_format_v1_inode(ip);
|
xfs_inode_item_format_v1_inode(ip);
|
||||||
xlog_copy_iovec(lv, &vecp, XLOG_REG_TYPE_ICORE,
|
xlog_copy_iovec(lv, &vecp, XLOG_REG_TYPE_ICORE,
|
||||||
&ip->i_d,
|
&ip->i_d,
|
||||||
xfs_icdinode_size(ip->i_d.di_version));
|
xfs_icdinode_size(ip->i_d.di_version));
|
||||||
ilf->ilf_size++;
|
|
||||||
|
|
||||||
xfs_inode_item_format_data_fork(iip, ilf, lv, &vecp);
|
xfs_inode_item_format_data_fork(iip, ilf, lv, &vecp);
|
||||||
if (XFS_IFORK_Q(ip)) {
|
if (XFS_IFORK_Q(ip)) {
|
||||||
|
@ -390,14 +394,8 @@ xfs_inode_item_format(
|
||||||
~(XFS_ILOG_ADATA | XFS_ILOG_ABROOT | XFS_ILOG_AEXT);
|
~(XFS_ILOG_ADATA | XFS_ILOG_ABROOT | XFS_ILOG_AEXT);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/* update the format with the exact fields we actually logged */
|
||||||
* Now update the log format that goes out to disk from the in-core
|
ilf->ilf_fields |= (iip->ili_fields & ~XFS_ILOG_TIMESTAMP);
|
||||||
* values. We always write the inode core to make the arithmetic
|
|
||||||
* games in recovery easier, which isn't a big deal as just about any
|
|
||||||
* transaction would dirty it anyway.
|
|
||||||
*/
|
|
||||||
iip->ili_format.ilf_fields = XFS_ILOG_CORE |
|
|
||||||
(iip->ili_fields & ~XFS_ILOG_TIMESTAMP);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -601,11 +599,6 @@ xfs_inode_item_init(
|
||||||
iip->ili_inode = ip;
|
iip->ili_inode = ip;
|
||||||
xfs_log_item_init(mp, &iip->ili_item, XFS_LI_INODE,
|
xfs_log_item_init(mp, &iip->ili_item, XFS_LI_INODE,
|
||||||
&xfs_inode_item_ops);
|
&xfs_inode_item_ops);
|
||||||
iip->ili_format.ilf_type = XFS_LI_INODE;
|
|
||||||
iip->ili_format.ilf_ino = ip->i_ino;
|
|
||||||
iip->ili_format.ilf_blkno = ip->i_imap.im_blkno;
|
|
||||||
iip->ili_format.ilf_len = ip->i_imap.im_len;
|
|
||||||
iip->ili_format.ilf_boffset = ip->i_imap.im_boffset;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -34,7 +34,6 @@ typedef struct xfs_inode_log_item {
|
||||||
unsigned short ili_logged; /* flushed logged data */
|
unsigned short ili_logged; /* flushed logged data */
|
||||||
unsigned int ili_last_fields; /* fields when flushed */
|
unsigned int ili_last_fields; /* fields when flushed */
|
||||||
unsigned int ili_fields; /* fields to be logged */
|
unsigned int ili_fields; /* fields to be logged */
|
||||||
xfs_inode_log_format_t ili_format; /* logged structure */
|
|
||||||
} xfs_inode_log_item_t;
|
} xfs_inode_log_item_t;
|
||||||
|
|
||||||
static inline int xfs_inode_clean(xfs_inode_t *ip)
|
static inline int xfs_inode_clean(xfs_inode_t *ip)
|
||||||
|
|
Loading…
Reference in New Issue