The linux kernel implementations of crc32c perform final bit
inversion after loop calculation of checksum.
Signed-off-by: Alexander Boyko <alexander_boyko@xyratex.com>
Change-Id: I5fa6af60c51f6f86f394f3cc71aa2672be614f7b
Reviewed-on: http://review.whamcloud.com/2018
Tested-by: Hudson
Reviewed-by: Shuichi Ihara <sihara@ddn.com>
Reviewed-by: Andreas Dilger <adilger@whamcloud.com>
Tested-by: Maloo <whamcloud.maloo@gmail.com>
return 0;
}
+static inline __u32 fini_checksum(__u32 cksum, cksum_type_t cksum_type)
+{
+ if (cksum_type == OBD_CKSUM_CRC32C)
+ return ~cksum;
+ return cksum;
+}
+
static inline __u32 compute_checksum(__u32 cksum, unsigned char const *p,
size_t len, cksum_type_t cksum_type)
{
if (opc == OST_WRITE && OBD_FAIL_CHECK(OBD_FAIL_OSC_CHECKSUM_SEND))
cksum++;
- return cksum;
+ return fini_checksum(cksum, cksum_type);
}
static int osc_brw_prep_request(int cmd, struct client_obd *cli,struct obdo *oa,
kunmap(page);
}
- return cksum;
+ return fini_checksum(cksum, cksum_type);
}
static int ost_brw_lock_get(int mode, struct obd_export *exp,