Whamcloud - gitweb
branch: HEAD
authorericm <ericm>
Fri, 7 Mar 2008 06:02:01 +0000 (06:02 +0000)
committerericm <ericm>
Fri, 7 Mar 2008 06:02:01 +0000 (06:02 +0000)
fix build failure when zlib is absent.

lustre/ptlrpc/sec_bulk.c
lustre/ptlrpc/sec_config.c

index c7f41f7..f09663e 100644 (file)
 #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>
@@ -854,6 +852,7 @@ EXPORT_SYMBOL(bulk_sec_desc_unpack);
 
 #ifdef __KERNEL__
 
+#ifdef HAVE_ADLER
 static int do_bulk_checksum_adler32(struct ptlrpc_bulk_desc *desc, void *buf)
 {
         struct page    *page;
@@ -877,6 +876,7 @@ static int do_bulk_checksum_adler32(struct ptlrpc_bulk_desc *desc, void *buf)
         memcpy(buf, &adler32, sizeof(adler32));
         return 0;
 }
+#endif
 
 static int do_bulk_checksum_crc32(struct ptlrpc_bulk_desc *desc, void *buf)
 {
@@ -911,10 +911,17 @@ static int do_bulk_checksum(struct ptlrpc_bulk_desc *desc, __u32 alg, 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) {
@@ -949,7 +956,7 @@ out_tfm:
 
 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);
@@ -963,17 +970,27 @@ static int do_bulk_checksum(struct ptlrpc_bulk_desc *desc, __u32 alg, void *buf)
                 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.
index 97aaa2a..ed70aba 100644 (file)
@@ -82,6 +82,12 @@ EXPORT_SYMBOL(sptlrpc_target_sec_part);
  * 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,
@@ -108,7 +114,7 @@ static void get_flavor_by_rpc(struct sptlrpc_rule *rule, __u16 rpc_flavor)
         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;
@@ -134,7 +140,7 @@ static void get_flavor_by_bulk(struct sptlrpc_rule *rule,
                 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: