int flashcache_read_compute_checksum(struct cache_c *dmc, int index, void *block) { #if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,27) struct io_region where; #else struct dm_io_region where; #endif int error; u_int64_t sum = 0, *idx; int cnt; where.bdev = dmc->cache_dev->bdev; where.sector = INDEX_TO_CACHE_ADDR(dmc, index); where.count = dmc->block_size; #if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,27) error = flashcache_dm_io_sync_vm(dmc, &where, READ, block); #else error = flashcache_dm_io_sync_vm(dmc, &where, READ, block); #endif if (error) return error; cnt = dmc->block_size * 512; idx = (u_int64_t *)block; while (cnt > 0) { sum += *idx++; cnt -= sizeof(u_int64_t); } dmc->cache[index].checksum = sum; return 0; }
int flashcache_read_compute_checksum(struct cache_c *dmc, int index, void *block) { struct io_region where; int error; u_int64_t sum = 0, *idx; int cnt; where.bdev = dmc->cache_dev->bdev; where.sector = (index << dmc->block_shift) + dmc->md_sectors; where.count = dmc->block_size; error = flashcache_dm_io_sync_vm(&where, READ, block); if (error) return error; cnt = dmc->block_size * 512; idx = (u_int64_t *)block; while (cnt > 0) { sum += *idx++; cnt -= sizeof(u_int64_t); } dmc->cache[index].checksum = sum; return 0; }