diff options
Diffstat (limited to 'fs/xfs/xfs_inode.c')
| -rw-r--r-- | fs/xfs/xfs_inode.c | 16 | 
1 files changed, 16 insertions, 0 deletions
diff --git a/fs/xfs/xfs_inode.c b/fs/xfs/xfs_inode.c index efbe1accb6c..7f7be5f98f5 100644 --- a/fs/xfs/xfs_inode.c +++ b/fs/xfs/xfs_inode.c @@ -1638,6 +1638,10 @@ xfs_iunlink(  		dip->di_next_unlinked = agi->agi_unlinked[bucket_index];  		offset = ip->i_imap.im_boffset +  			offsetof(xfs_dinode_t, di_next_unlinked); + +		/* need to recalc the inode CRC if appropriate */ +		xfs_dinode_calc_crc(mp, dip); +  		xfs_trans_inode_buf(tp, ibp);  		xfs_trans_log_buf(tp, ibp, offset,  				  (offset + sizeof(xfs_agino_t) - 1)); @@ -1723,6 +1727,10 @@ xfs_iunlink_remove(  			dip->di_next_unlinked = cpu_to_be32(NULLAGINO);  			offset = ip->i_imap.im_boffset +  				offsetof(xfs_dinode_t, di_next_unlinked); + +			/* need to recalc the inode CRC if appropriate */ +			xfs_dinode_calc_crc(mp, dip); +  			xfs_trans_inode_buf(tp, ibp);  			xfs_trans_log_buf(tp, ibp, offset,  					  (offset + sizeof(xfs_agino_t) - 1)); @@ -1796,6 +1804,10 @@ xfs_iunlink_remove(  			dip->di_next_unlinked = cpu_to_be32(NULLAGINO);  			offset = ip->i_imap.im_boffset +  				offsetof(xfs_dinode_t, di_next_unlinked); + +			/* need to recalc the inode CRC if appropriate */ +			xfs_dinode_calc_crc(mp, dip); +  			xfs_trans_inode_buf(tp, ibp);  			xfs_trans_log_buf(tp, ibp, offset,  					  (offset + sizeof(xfs_agino_t) - 1)); @@ -1809,6 +1821,10 @@ xfs_iunlink_remove(  		last_dip->di_next_unlinked = cpu_to_be32(next_agino);  		ASSERT(next_agino != 0);  		offset = last_offset + offsetof(xfs_dinode_t, di_next_unlinked); + +		/* need to recalc the inode CRC if appropriate */ +		xfs_dinode_calc_crc(mp, last_dip); +  		xfs_trans_inode_buf(tp, last_ibp);  		xfs_trans_log_buf(tp, last_ibp, offset,  				  (offset + sizeof(xfs_agino_t) - 1));  |