From: johann Date: Fri, 7 Mar 2008 07:57:04 +0000 (+0000) Subject: Branch HEAD X-Git-Tag: v1_7_0_51~155 X-Git-Url: https://git.whamcloud.com/?a=commitdiff_plain;h=3b6b93c54e1fa99af9d1ef9094de1c68beea8614;p=fs%2Flustre-release.git Branch HEAD b=14648 i=adilger i=bobijam when available, use the Adler-32 algorithm instead of CRC32 for page checksums. --- diff --git a/lustre/ChangeLog b/lustre/ChangeLog index 27cfdd9..45e8399 100644 --- a/lustre/ChangeLog +++ b/lustre/ChangeLog @@ -798,6 +798,12 @@ Details : add support for several checksum algorithm. Currently, only CRC32 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. diff --git a/lustre/llite/rw.c b/lustre/llite/rw.c index 805ac4b..3b96985 100644 --- a/lustre/llite/rw.c +++ b/lustre/llite/rw.c @@ -171,7 +171,11 @@ void ll_truncate(struct inode *inode) 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); @@ -643,9 +647,11 @@ struct ll_async_page *llap_from_page(struct page *page, unsigned origin) 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) { @@ -715,10 +721,12 @@ static int queue_or_sync_write(struct obd_export *exp, struct inode *inode, /* 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",