aboutsummaryrefslogtreecommitdiffstats
path: root/fs/xfs/xfs_log_recover.c
diff options
context:
space:
mode:
authorChristoph Hellwig <hch@lst.de>2008-11-27 22:23:39 -0500
committerNiv Sardi <xaiki@sgi.com>2008-11-30 19:37:35 -0500
commit81591fe2db19d0fc1ec2aaaa6a790a5ab97ac3ab (patch)
tree254b73b8f0b19bfbadda0e89021767f04dd20308 /fs/xfs/xfs_log_recover.c
parentd42f08f61c5e7f0ed4c6b6df4c9987ddb85ec66e (diff)
[XFS] kill xfs_dinode_core_t
Now that we have a separate xfs_icdinode_t for the in-core inode which gets logged there is no need anymore for the xfs_dinode vs xfs_dinode_core split - the fact that part of the structure gets logged through the inode log item and a small part not can better be described in a comment. All sizeof operations on the dinode_core either really wanted the icdinode and are switched to that one, or had already added the size of the agi unlinked list pointer. Later both will be replaced with helpers once we get the larger CRC-enabled dinode. Removing the data and attribute fork unions also has the advantage that xfs_dinode.h doesn't need to pull in every header under the sun. While we're at it also add some more comments describing the dinode structure. (First sent on October 7th) Signed-off-by: Christoph Hellwig <hch@lst.de> Reviewed-by: Dave Chinner <david@fromorbit.com> Signed-off-by: Niv Sardi <xaiki@sgi.com>
Diffstat (limited to 'fs/xfs/xfs_log_recover.c')
-rw-r--r--fs/xfs/xfs_log_recover.c29
1 files changed, 15 insertions, 14 deletions
diff --git a/fs/xfs/xfs_log_recover.c b/fs/xfs/xfs_log_recover.c
index 9abb96a7674d..4099618f5fa0 100644
--- a/fs/xfs/xfs_log_recover.c
+++ b/fs/xfs/xfs_log_recover.c
@@ -2320,7 +2320,7 @@ xlog_recover_do_inode_trans(
2320 * Make sure the place we're flushing out to really looks 2320 * Make sure the place we're flushing out to really looks
2321 * like an inode! 2321 * like an inode!
2322 */ 2322 */
2323 if (unlikely(be16_to_cpu(dip->di_core.di_magic) != XFS_DINODE_MAGIC)) { 2323 if (unlikely(be16_to_cpu(dip->di_magic) != XFS_DINODE_MAGIC)) {
2324 xfs_buf_relse(bp); 2324 xfs_buf_relse(bp);
2325 xfs_fs_cmn_err(CE_ALERT, mp, 2325 xfs_fs_cmn_err(CE_ALERT, mp,
2326 "xfs_inode_recover: Bad inode magic number, dino ptr = 0x%p, dino bp = 0x%p, ino = %Ld", 2326 "xfs_inode_recover: Bad inode magic number, dino ptr = 0x%p, dino bp = 0x%p, ino = %Ld",
@@ -2343,12 +2343,12 @@ xlog_recover_do_inode_trans(
2343 } 2343 }
2344 2344
2345 /* Skip replay when the on disk inode is newer than the log one */ 2345 /* Skip replay when the on disk inode is newer than the log one */
2346 if (dicp->di_flushiter < be16_to_cpu(dip->di_core.di_flushiter)) { 2346 if (dicp->di_flushiter < be16_to_cpu(dip->di_flushiter)) {
2347 /* 2347 /*
2348 * Deal with the wrap case, DI_MAX_FLUSH is less 2348 * Deal with the wrap case, DI_MAX_FLUSH is less
2349 * than smaller numbers 2349 * than smaller numbers
2350 */ 2350 */
2351 if (be16_to_cpu(dip->di_core.di_flushiter) == DI_MAX_FLUSH && 2351 if (be16_to_cpu(dip->di_flushiter) == DI_MAX_FLUSH &&
2352 dicp->di_flushiter < (DI_MAX_FLUSH >> 1)) { 2352 dicp->di_flushiter < (DI_MAX_FLUSH >> 1)) {
2353 /* do nothing */ 2353 /* do nothing */
2354 } else { 2354 } else {
@@ -2408,7 +2408,7 @@ xlog_recover_do_inode_trans(
2408 error = EFSCORRUPTED; 2408 error = EFSCORRUPTED;
2409 goto error; 2409 goto error;
2410 } 2410 }
2411 if (unlikely(item->ri_buf[1].i_len > sizeof(xfs_dinode_core_t))) { 2411 if (unlikely(item->ri_buf[1].i_len > sizeof(struct xfs_icdinode))) {
2412 XFS_CORRUPTION_ERROR("xlog_recover_do_inode_trans(7)", 2412 XFS_CORRUPTION_ERROR("xlog_recover_do_inode_trans(7)",
2413 XFS_ERRLEVEL_LOW, mp, dicp); 2413 XFS_ERRLEVEL_LOW, mp, dicp);
2414 xfs_buf_relse(bp); 2414 xfs_buf_relse(bp);
@@ -2420,23 +2420,24 @@ xlog_recover_do_inode_trans(
2420 } 2420 }
2421 2421
2422 /* The core is in in-core format */ 2422 /* The core is in in-core format */
2423 xfs_dinode_to_disk(&dip->di_core, 2423 xfs_dinode_to_disk(dip, (xfs_icdinode_t *)item->ri_buf[1].i_addr);
2424 (xfs_icdinode_t *)item->ri_buf[1].i_addr);
2425 2424
2426 /* the rest is in on-disk format */ 2425 /* the rest is in on-disk format */
2427 if (item->ri_buf[1].i_len > sizeof(xfs_dinode_core_t)) { 2426 if (item->ri_buf[1].i_len > sizeof(struct xfs_icdinode)) {
2428 memcpy((xfs_caddr_t) dip + sizeof(xfs_dinode_core_t), 2427 memcpy((xfs_caddr_t) dip + sizeof(struct xfs_icdinode),
2429 item->ri_buf[1].i_addr + sizeof(xfs_dinode_core_t), 2428 item->ri_buf[1].i_addr + sizeof(struct xfs_icdinode),
2430 item->ri_buf[1].i_len - sizeof(xfs_dinode_core_t)); 2429 item->ri_buf[1].i_len - sizeof(struct xfs_icdinode));
2431 } 2430 }
2432 2431
2433 fields = in_f->ilf_fields; 2432 fields = in_f->ilf_fields;
2434 switch (fields & (XFS_ILOG_DEV | XFS_ILOG_UUID)) { 2433 switch (fields & (XFS_ILOG_DEV | XFS_ILOG_UUID)) {
2435 case XFS_ILOG_DEV: 2434 case XFS_ILOG_DEV:
2436 dip->di_u.di_dev = cpu_to_be32(in_f->ilf_u.ilfu_rdev); 2435 xfs_dinode_put_rdev(dip, in_f->ilf_u.ilfu_rdev);
2437 break; 2436 break;
2438 case XFS_ILOG_UUID: 2437 case XFS_ILOG_UUID:
2439 dip->di_u.di_muuid = in_f->ilf_u.ilfu_uuid; 2438 memcpy(XFS_DFORK_DPTR(dip),
2439 &in_f->ilf_u.ilfu_uuid,
2440 sizeof(uuid_t));
2440 break; 2441 break;
2441 } 2442 }
2442 2443
@@ -2452,12 +2453,12 @@ xlog_recover_do_inode_trans(
2452 switch (fields & XFS_ILOG_DFORK) { 2453 switch (fields & XFS_ILOG_DFORK) {
2453 case XFS_ILOG_DDATA: 2454 case XFS_ILOG_DDATA:
2454 case XFS_ILOG_DEXT: 2455 case XFS_ILOG_DEXT:
2455 memcpy(&dip->di_u, src, len); 2456 memcpy(XFS_DFORK_DPTR(dip), src, len);
2456 break; 2457 break;
2457 2458
2458 case XFS_ILOG_DBROOT: 2459 case XFS_ILOG_DBROOT:
2459 xfs_bmbt_to_bmdr(mp, (struct xfs_btree_block *)src, len, 2460 xfs_bmbt_to_bmdr(mp, (struct xfs_btree_block *)src, len,
2460 &dip->di_u.di_bmbt, 2461 (xfs_bmdr_block_t *)XFS_DFORK_DPTR(dip),
2461 XFS_DFORK_DSIZE(dip, mp)); 2462 XFS_DFORK_DSIZE(dip, mp));
2462 break; 2463 break;
2463 2464