and Adler-32 are supported. The checksum type can be changed on
the fly via /proc/fs/lustre/osc/*/checksum_type.
+Severity : normal
+Bugzilla : 14648
+Description: use adler32 for page checksums
+Details : when available, use the Adler-32 algorithm instead of CRC32 for
+ page checksums.
+
--------------------------------------------------------------------------------
2007-08-10 Cluster File Systems, Inc. <info@clusterfs.com>
if (llap != NULL) {
char *kaddr = kmap_atomic(page, KM_USER0);
llap->llap_checksum =
- crc32_le(0, kaddr, CFS_PAGE_SIZE);
+ init_checksum(OSC_DEFAULT_CKSUM);
+ llap->llap_checksum =
+ compute_checksum(llap->llap_checksum,
+ kaddr, CFS_PAGE_SIZE,
+ OSC_DEFAULT_CKSUM);
kunmap_atomic(kaddr, KM_USER0);
}
page_cache_release(page);
out:
if (unlikely(sbi->ll_flags & LL_SBI_CHECKSUM)) {
- __u32 csum = 0;
+ __u32 csum;
char *kaddr = kmap_atomic(page, KM_USER0);
- csum = crc32_le(csum, kaddr, CFS_PAGE_SIZE);
+ csum = init_checksum(OSC_DEFAULT_CKSUM);
+ csum = compute_checksum(csum, kaddr, CFS_PAGE_SIZE,
+ OSC_DEFAULT_CKSUM);
kunmap_atomic(kaddr, KM_USER0);
if (origin == LLAP_ORIGIN_READAHEAD ||
origin == LLAP_ORIGIN_READPAGE) {
/* compare the checksum once before the page leaves llite */
if (unlikely((sbi->ll_flags & LL_SBI_CHECKSUM) &&
llap->llap_checksum != 0)) {
- __u32 csum = 0;
+ __u32 csum;
struct page *page = llap->llap_page;
char *kaddr = kmap_atomic(page, KM_USER0);
- csum = crc32_le(csum, kaddr, CFS_PAGE_SIZE);
+ csum = init_checksum(OSC_DEFAULT_CKSUM);
+ csum = compute_checksum(csum, kaddr, CFS_PAGE_SIZE,
+ OSC_DEFAULT_CKSUM);
kunmap_atomic(kaddr, KM_USER0);
if (llap->llap_checksum == csum) {
CDEBUG(D_PAGE, "page %p cksum %x confirmed\n",