aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--fs/xfs/xfs_inode_item.c29
-rw-r--r--fs/xfs/xfs_inode_item.h1
2 files changed, 11 insertions, 19 deletions
diff --git a/fs/xfs/xfs_inode_item.c b/fs/xfs/xfs_inode_item.c
index 45224d28049e..686889b4a1e5 100644
--- a/fs/xfs/xfs_inode_item.c
+++ b/fs/xfs/xfs_inode_item.c
@@ -370,17 +370,21 @@ xfs_inode_item_format(
370 struct xfs_inode_log_format *ilf; 370 struct xfs_inode_log_format *ilf;
371 struct xfs_log_iovec *vecp = NULL; 371 struct xfs_log_iovec *vecp = NULL;
372 372
373 ilf = xlog_copy_iovec(lv, &vecp, XLOG_REG_TYPE_IFORMAT, 373 ilf = xlog_prepare_iovec(lv, &vecp, XLOG_REG_TYPE_IFORMAT);
374 &iip->ili_format, 374 ilf->ilf_type = XFS_LI_INODE;
375 sizeof(struct xfs_inode_log_format)); 375 ilf->ilf_ino = ip->i_ino;
376 ilf->ilf_size = 1; 376 ilf->ilf_blkno = ip->i_imap.im_blkno;
377 ilf->ilf_len = ip->i_imap.im_len;
378 ilf->ilf_boffset = ip->i_imap.im_boffset;
379 ilf->ilf_fields = XFS_ILOG_CORE;
380 ilf->ilf_size = 2; /* format + core */
381 xlog_finish_iovec(lv, vecp, sizeof(struct xfs_inode_log_format));
377 382
378 if (ip->i_d.di_version == 1) 383 if (ip->i_d.di_version == 1)
379 xfs_inode_item_format_v1_inode(ip); 384 xfs_inode_item_format_v1_inode(ip);
380 xlog_copy_iovec(lv, &vecp, XLOG_REG_TYPE_ICORE, 385 xlog_copy_iovec(lv, &vecp, XLOG_REG_TYPE_ICORE,
381 &ip->i_d, 386 &ip->i_d,
382 xfs_icdinode_size(ip->i_d.di_version)); 387 xfs_icdinode_size(ip->i_d.di_version));
383 ilf->ilf_size++;
384 388
385 xfs_inode_item_format_data_fork(iip, ilf, lv, &vecp); 389 xfs_inode_item_format_data_fork(iip, ilf, lv, &vecp);
386 if (XFS_IFORK_Q(ip)) { 390 if (XFS_IFORK_Q(ip)) {
@@ -390,14 +394,8 @@ xfs_inode_item_format(
390 ~(XFS_ILOG_ADATA | XFS_ILOG_ABROOT | XFS_ILOG_AEXT); 394 ~(XFS_ILOG_ADATA | XFS_ILOG_ABROOT | XFS_ILOG_AEXT);
391 } 395 }
392 396
393 /* 397 /* update the format with the exact fields we actually logged */
394 * Now update the log format that goes out to disk from the in-core 398 ilf->ilf_fields |= (iip->ili_fields & ~XFS_ILOG_TIMESTAMP);
395 * values. We always write the inode core to make the arithmetic
396 * games in recovery easier, which isn't a big deal as just about any
397 * transaction would dirty it anyway.
398 */
399 iip->ili_format.ilf_fields = XFS_ILOG_CORE |
400 (iip->ili_fields & ~XFS_ILOG_TIMESTAMP);
401} 399}
402 400
403/* 401/*
@@ -601,11 +599,6 @@ xfs_inode_item_init(
601 iip->ili_inode = ip; 599 iip->ili_inode = ip;
602 xfs_log_item_init(mp, &iip->ili_item, XFS_LI_INODE, 600 xfs_log_item_init(mp, &iip->ili_item, XFS_LI_INODE,
603 &xfs_inode_item_ops); 601 &xfs_inode_item_ops);
604 iip->ili_format.ilf_type = XFS_LI_INODE;
605 iip->ili_format.ilf_ino = ip->i_ino;
606 iip->ili_format.ilf_blkno = ip->i_imap.im_blkno;
607 iip->ili_format.ilf_len = ip->i_imap.im_len;
608 iip->ili_format.ilf_boffset = ip->i_imap.im_boffset;
609} 602}
610 603
611/* 604/*
diff --git a/fs/xfs/xfs_inode_item.h b/fs/xfs/xfs_inode_item.h
index 29b5f2b6533a..488d81254e28 100644
--- a/fs/xfs/xfs_inode_item.h
+++ b/fs/xfs/xfs_inode_item.h
@@ -34,7 +34,6 @@ typedef struct xfs_inode_log_item {
34 unsigned short ili_logged; /* flushed logged data */ 34 unsigned short ili_logged; /* flushed logged data */
35 unsigned int ili_last_fields; /* fields when flushed */ 35 unsigned int ili_last_fields; /* fields when flushed */
36 unsigned int ili_fields; /* fields to be logged */ 36 unsigned int ili_fields; /* fields to be logged */
37 xfs_inode_log_format_t ili_format; /* logged structure */
38} xfs_inode_log_item_t; 37} xfs_inode_log_item_t;
39 38
40static inline int xfs_inode_clean(xfs_inode_t *ip) 39static inline int xfs_inode_clean(xfs_inode_t *ip)