#ifndef __KERNEL__
#include <liblustre.h>
#include <libcfs/list.h>
-#include <zlib.h>
#else
#include <linux/crypto.h>
-#include <linux/zutil.h>
#endif
#include <obd.h>
#ifdef __KERNEL__
+#ifdef HAVE_ADLER
static int do_bulk_checksum_adler32(struct ptlrpc_bulk_desc *desc, void *buf)
{
struct page *page;
memcpy(buf, &adler32, sizeof(adler32));
return 0;
}
+#endif
static int do_bulk_checksum_crc32(struct ptlrpc_bulk_desc *desc, void *buf)
{
LASSERT(alg > BULK_HASH_ALG_NULL &&
alg < BULK_HASH_ALG_MAX);
- if (alg == BULK_HASH_ALG_ADLER32)
+ switch (alg) {
+ case BULK_HASH_ALG_ADLER32:
+#ifdef HAVE_ADLER
return do_bulk_checksum_adler32(desc, buf);
- if (alg == BULK_HASH_ALG_CRC32)
+#else
+ CERROR("Adler32 not supported\n");
+ return -EINVAL;
+#endif
+ case BULK_HASH_ALG_CRC32:
return do_bulk_checksum_crc32(desc, buf);
+ }
tfm = crypto_alloc_tfm(hash_types[alg].sht_tfm_name, 0);
if (tfm == NULL) {
static int do_bulk_checksum(struct ptlrpc_bulk_desc *desc, __u32 alg, void *buf)
{
- __u32 csum32 = ~0;
+ __u32 csum32;
int i;
LASSERT(alg == BULK_HASH_ALG_ADLER32 || alg == BULK_HASH_ALG_CRC32);
char *ptr = desc->bd_iov[i].iov_base;
int len = desc->bd_iov[i].iov_len;
- if (alg == BULK_HASH_ALG_ADLER32)
+ switch (alg) {
+ case BULK_HASH_ALG_ADLER32:
+#ifdef HAVE_ADLER
csum32 = zlib_adler32(csum32, ptr, len);
- else
+#else
+ CERROR("Adler32 not supported\n");
+ return -EINVAL;
+#endif
+ break;
+ case BULK_HASH_ALG_CRC32:
csum32 = crc32_le(csum32, ptr, len);
+ break;
+ }
}
- *((__u32 *) buf) = csum32;
+ csum32 = cpu_to_le32(csum32);
+ memcpy(buf, &csum32, sizeof(csum32));
return 0;
}
-#endif
+#endif /* __KERNEL__ */
/*
* perform algorithm @alg checksum on @desc, store result in @buf.
* user supplied flavor string parsing *
****************************************/
+#ifdef HAVE_ADLER
+#define BULK_HASH_ALG_DEFAULT BULK_HASH_ALG_ADLER32
+#else
+#define BULK_HASH_ALG_DEFAULT BULK_HASH_ALG_CRC32
+#endif
+
typedef enum {
BULK_TYPE_N = 0,
BULK_TYPE_I = 1,
case SPTLRPC_FLVR_PLAIN:
case SPTLRPC_FLVR_KRB5N:
case SPTLRPC_FLVR_KRB5A:
- rule->sr_flvr.sf_bulk_hash = BULK_HASH_ALG_ADLER32;
+ rule->sr_flvr.sf_bulk_hash = BULK_HASH_ALG_DEFAULT;
break;
case SPTLRPC_FLVR_KRB5P:
rule->sr_flvr.sf_bulk_ciph = BULK_CIPH_ALG_AES128;
case SPTLRPC_FLVR_PLAIN:
case SPTLRPC_FLVR_KRB5N:
case SPTLRPC_FLVR_KRB5A:
- rule->sr_flvr.sf_bulk_hash = BULK_HASH_ALG_ADLER32;
+ rule->sr_flvr.sf_bulk_hash = BULK_HASH_ALG_DEFAULT;
break;
case SPTLRPC_FLVR_KRB5I:
case SPTLRPC_FLVR_KRB5P: