From: johann Date: Mon, 18 Feb 2008 08:56:07 +0000 (+0000) Subject: Branch b1_6 X-Git-Tag: v1_8_0_110~760 X-Git-Url: https://git.whamcloud.com/?a=commitdiff_plain;h=63dc6137a7773ffcc37de60f55f5a5ee655ad10d;p=fs%2Flustre-release.git Branch b1_6 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 1aac8df..d801c98 100644 --- a/lustre/ChangeLog +++ b/lustre/ChangeLog @@ -344,6 +344,12 @@ Details : add support for several checksum algorithms. Currently, CRC32 and Adler-32 are supported. The checksum type can be changed on the fly through /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-12-07 Cluster File Systems, Inc. diff --git a/lustre/llite/rw.c b/lustre/llite/rw.c index 9af5a4f..3989328 100644 --- a/lustre/llite/rw.c +++ b/lustre/llite/rw.c @@ -198,7 +198,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); @@ -649,9 +653,11 @@ static struct ll_async_page *llap_from_page_with_lockh(struct page *page, out: if (unlikely(sbi->ll_flags & LL_SBI_LLITE_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 || @@ -727,10 +733,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_LLITE_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", @@ -1618,8 +1626,12 @@ static ssize_t ll_file_copy_pages(struct page **pages, int numpages, struct ll_async_page *llap; llap = llap_cast_private(pages[i]); - llap->llap_checksum = crc32_le(0, vaddr, - CFS_PAGE_SIZE); + llap->llap_checksum = + init_checksum(OSC_DEFAULT_CKSUM); + llap->llap_checksum = + compute_checksum(llap->llap_checksum, + vaddr, CFS_PAGE_SIZE, + OSC_DEFAULT_CKSUM); } } else { left = copy_to_user(buf, vaddr + offset, bytes);