Commit 8fbb1877 authored by Yuto Ohnuki's avatar Yuto Ohnuki Committed by Carlos Maiolino
Browse files

xfs: zero directory data block padding on write verification



Old kernels did not zero the pad field in xfs_dir3_data_hdr when
initializing directory data blocks, so existing filesystems may have
non-zero padding on disk.

Zero the pad field in xfs_dir3_data_write_verify alongside the existing
LSN and checksum updates. The pad field is pure alignment padding with
no runtime meaning, so zeroing it during write verification is safe and
has no additional I/O cost. This lets filesystems gradually self-heal
stale non-zero padding as directories are modified, without requiring an
explicit repair pass.

Suggested-by: default avatarDave Chinner <dgc@kernel.org>
Signed-off-by: default avatarYuto Ohnuki <ytohnuki@amazon.com>
Reviewed-by: default avatarDarrick J. Wong <djwong@kernel.org>
Signed-off-by: default avatarCarlos Maiolino <cem@kernel.org>
parent 00dd8d7e
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
@@ -382,6 +382,7 @@ xfs_dir3_data_write_verify(
	struct xfs_mount	*mp = bp->b_mount;
	struct xfs_buf_log_item	*bip = bp->b_log_item;
	struct xfs_dir3_blk_hdr	*hdr3 = bp->b_addr;
	struct xfs_dir3_data_hdr *datahdr3 = bp->b_addr;
	xfs_failaddr_t		fa;

	fa = xfs_dir3_data_verify(bp);
@@ -396,6 +397,11 @@ xfs_dir3_data_write_verify(
	if (bip)
		hdr3->lsn = cpu_to_be64(bip->bli_item.li_lsn);

	/*
	 * Zero padding that may be stale from old kernels.
	 */
	datahdr3->pad = 0;

	xfs_buf_update_cksum(bp, XFS_DIR3_DATA_CRC_OFF);
}