[Bug 267654] UFS "cylinder checksum failed" on temporary storage or data disk on arm64 vm in Azure
Date: Fri, 18 Nov 2022 05:58:51 UTC
https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=267654 --- Comment #9 from Kirk McKusick <mckusick@FreeBSD.org> --- Newfs is generating the check hashes using the libufs cgwrite(3) routine. The cgwrite(3) routine calls calculate_crc32c() which comes from sys/libkern/gsb_crc32.c. The kernel check also uses calculate_crc32c() from sys/libkern/gsb_crc32.c so they should be getting the same answer. If the structures were somehow laid out differently that might explain it, but then a lot of other things would also break. I also note that the same calculate_crc32c() function is used for the superblock checksum and the inode checksum which are both working fine which makes it even more of a mystery why the cylinder group checksums are broken. Another option is to disable cylinder group checksums in newfs(8) using something like this patch: diff --git a/sbin/newfs/mkfs.c b/sbin/newfs/mkfs.c index 48091d7882d0..5000adff138f 100644 --- a/sbin/newfs/mkfs.c +++ b/sbin/newfs/mkfs.c @@ -499,8 +499,10 @@ mkfs(struct partition *pp, char *fsys) */ if (Oflag > 1) { sblock.fs_flags |= FS_METACKHASH; +#ifndef AZURE if (getosreldate() >= P_OSREL_CK_CYLGRP) sblock.fs_metackhash |= CK_CYLGRP; +#endif if (getosreldate() >= P_OSREL_CK_SUPERBLOCK) sblock.fs_metackhash |= CK_SUPERBLOCK; if (getosreldate() >= P_OSREL_CK_INODE) -- You are receiving this mail because: You are the assignee for the bug.