From: shadow Date: Thu, 17 Apr 2008 12:47:06 +0000 (+0000) Subject: refactor dual checksum support. X-Git-Tag: v1_7_0_51~37 X-Git-Url: https://git.whamcloud.com/?p=fs%2Flustre-release.git;a=commitdiff_plain;h=689ea74b583aff80c50210e90548379f8f22c201 refactor dual checksum support. move platform independed part of chksum into separate include i=johann i=green --- diff --git a/lustre/include/darwin/obd_cksum.h b/lustre/include/darwin/obd_cksum.h new file mode 100644 index 0000000..205433b --- /dev/null +++ b/lustre/include/darwin/obd_cksum.h @@ -0,0 +1,36 @@ +/* -*- mode: c; c-basic-offset: 8; indent-tabs-mode: nil; -*- + * vim:expandtab:shiftwidth=8:tabstop=8: + * + * Copyright (C) 2008 Sun Microsystems, Inc. + * + * This file is part of Lustre, http://www.lustre.org. + * + * Lustre is free software; you can redistribute it and/or + * modify it under the terms of version 2 of the GNU General Public + * License as published by the Free Software Foundation. + * + * Lustre is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Lustre; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + * + */ + +#ifndef __DARWIN_OBD_CKSUM +#define __DARWIN_OBD_CKSUM + +#ifndef __OBD_CKSUM +#error Do not #include this file directly. #include instead +#endif + +#include + +#if !defined(__KERNEL__) && defined(HAVE_ADLER) +# include +#endif /* !__KERNEL__ */ + +#endif diff --git a/lustre/include/darwin/obd_support.h b/lustre/include/darwin/obd_support.h index 8ff7200..7313518 100644 --- a/lustre/include/darwin/obd_support.h +++ b/lustre/include/darwin/obd_support.h @@ -29,25 +29,6 @@ #include -#define CRCPOLY_LE 0xedb88320 -/** - * crc32_le() - Calculate bitwise little-endian Ethernet AUTODIN II CRC32 - * @crc - seed value for computation. ~0 for Ethernet, sometimes 0 for - * other uses, or the previous crc32 value if computing incrementally. - * @p - pointer to buffer over which CRC is run - * @len - length of buffer @p - */ -static inline __u32 crc32_le(__u32 crc, unsigned char const *p, size_t len) -{ - int i; - while (len--) { - crc ^= *p++; - for (i = 0; i < 8; i++) - crc = (crc >> 1) ^ ((crc & 1) ? CRCPOLY_LE : 0); - } - return crc; -} - #define OBD_SLEEP_ON(wq) sleep_on(wq) /* for obd_class.h */ diff --git a/lustre/include/liblustre.h b/lustre/include/liblustre.h index 4a89f50..67f0066 100644 --- a/lustre/include/liblustre.h +++ b/lustre/include/liblustre.h @@ -47,9 +47,6 @@ #ifdef HAVE_SYS_IOCTL_H # include #endif -#ifndef _IOWR -# include "ioctl.h" -#endif #include #include @@ -69,6 +66,10 @@ #include #include +#ifndef _IOWR +# include "ioctl.h" +#endif + /* definitions for liblustre */ #ifdef __CYGWIN__ diff --git a/lustre/include/linux/obd_cksum.h b/lustre/include/linux/obd_cksum.h new file mode 100644 index 0000000..3beb3df --- /dev/null +++ b/lustre/include/linux/obd_cksum.h @@ -0,0 +1,55 @@ +/* -*- mode: c; c-basic-offset: 8; indent-tabs-mode: nil; -*- + * vim:expandtab:shiftwidth=8:tabstop=8: + * + * Copyright (C) 2001, 2002 Cluster File Systems, Inc. + * + * This file is part of Lustre, http://www.lustre.org. + * + * Lustre is free software; you can redistribute it and/or + * modify it under the terms of version 2 of the GNU General Public + * License as published by the Free Software Foundation. + * + * Lustre is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Lustre; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + * + */ + +#ifndef __LINUX_OBD_CKSUM +#define __LINUX_OBD_CKSUM + +#ifndef __OBD_CKSUM +#error Do not #include this file directly. #include instead +#endif + +#ifdef __KERNEL__ +#include +#endif + +#include + +/* Prefer the kernel's version, if it exports it, because it might be + * optimized for this CPU. */ +#if defined(__KERNEL__) && (defined(CONFIG_CRC32) || defined(CONFIG_CRC32_MODULE)) +# include +# define HAVE_ARCH_CRC32 +#endif + +#ifdef __KERNEL__ +# include +# ifndef HAVE_ADLER +# define HAVE_ADLER +# endif +# define adler32(a,b,l) zlib_adler32(a,b,l) +#else /* __KERNEL__ */ +# ifdef HAVE_ADLER +# include +# endif +#endif /*! __KERNEL__ */ + +#endif diff --git a/lustre/include/linux/obd_support.h b/lustre/include/linux/obd_support.h index 362cbcb..dada502 100644 --- a/lustre/include/linux/obd_support.h +++ b/lustre/include/linux/obd_support.h @@ -39,117 +39,6 @@ #include #include -/* Prefer the kernel's version, if it exports it, because it might be - * optimized for this CPU. */ -#if defined(__KERNEL__) && (defined(CONFIG_CRC32) || defined(CONFIG_CRC32_MODULE)) -# include -#else -/* crc32_le lifted from the Linux kernel, which had the following to say: - * - * This code is in the public domain; copyright abandoned. - * Liability for non-performance of this code is limited to the amount - * you paid for it. Since it is distributed for free, your refund will - * be very very small. If it breaks, you get to keep both pieces. - */ -#define CRCPOLY_LE 0xedb88320 -/** - * crc32_le() - Calculate bitwise little-endian Ethernet AUTODIN II CRC32 - * @crc - seed value for computation. ~0 for Ethernet, sometimes 0 for - * other uses, or the previous crc32 value if computing incrementally. - * @p - pointer to buffer over which CRC is run - * @len - length of buffer @p - */ -static inline __u32 crc32_le(__u32 crc, unsigned char const *p, size_t len) -{ - int i; - while (len--) { - crc ^= *p++; - for (i = 0; i < 8; i++) - crc = (crc >> 1) ^ ((crc & 1) ? CRCPOLY_LE : 0); - } - return crc; -} -#endif - -#ifdef __KERNEL__ -# include -# ifndef HAVE_ADLER -# define HAVE_ADLER -# endif -#else /* ! __KERNEL__ */ -# ifdef HAVE_ADLER -# include - -static inline __u32 zlib_adler32(__u32 adler, unsigned char const *p, - size_t len) -{ - return adler32(adler, p, len); -} -# endif -#endif /* __KERNEL__ */ - -static inline __u32 init_checksum(cksum_type_t cksum_type) -{ - switch(cksum_type) { - case OBD_CKSUM_CRC32: - return ~0U; -#ifdef HAVE_ADLER - case OBD_CKSUM_ADLER: - return 1U; -#endif - default: - CERROR("Unknown checksum type (%x)!!!\n", cksum_type); - LBUG(); - } - return 0; -} - -static inline __u32 compute_checksum(__u32 cksum, unsigned char const *p, - size_t len, cksum_type_t cksum_type) -{ - switch(cksum_type) { - case OBD_CKSUM_CRC32: - return crc32_le(cksum, p, len); -#ifdef HAVE_ADLER - case OBD_CKSUM_ADLER: - return zlib_adler32(cksum, p, len); -#endif - default: - CERROR("Unknown checksum type (%x)!!!\n", cksum_type); - LBUG(); - } - return 0; -} - -static inline obd_flag cksum_type_pack(cksum_type_t cksum_type) -{ - switch(cksum_type) { - case OBD_CKSUM_CRC32: - return OBD_FL_CKSUM_CRC32; -#ifdef HAVE_ADLER - case OBD_CKSUM_ADLER: - return OBD_FL_CKSUM_ADLER; -#endif - default: - CWARN("unknown cksum type %x\n", cksum_type); - } - return OBD_FL_CKSUM_CRC32; -} - -static inline cksum_type_t cksum_type_unpack(obd_flag o_flags) -{ - o_flags &= OBD_FL_CKSUM_ALL; - if ((o_flags - 1) & o_flags) - CWARN("several checksum types are set: %x\n", o_flags); - if (o_flags & OBD_FL_CKSUM_ADLER) -#ifdef HAVE_ADLER - return OBD_CKSUM_ADLER; -#else - CWARN("checksum type is set to adler32, but adler32 is not " - "supported (%x)\n", o_flags); -#endif - return OBD_CKSUM_CRC32; -} #ifdef __KERNEL__ # include diff --git a/lustre/include/obd.h b/lustre/include/obd.h index 15d9377..0f55ecd 100644 --- a/lustre/include/obd.h +++ b/lustre/include/obd.h @@ -1447,24 +1447,4 @@ static inline struct lustre_capa *oinfo_capa(struct obd_info *oinfo) return oinfo->oi_capa; } -/* - * Checksums - */ - -#ifdef HAVE_ADLER -/* Default preferred checksum algorithm to use (if supported by the server) */ -#define OSC_DEFAULT_CKSUM OBD_CKSUM_ADLER -/* Adler-32 is supported */ -#define CHECKSUM_ADLER OBD_CKSUM_ADLER -#else -#define OSC_DEFAULT_CKSUM OBD_CKSUM_CRC32 -#define CHECKSUM_ADLER 0 -#endif - -#define OBD_CKSUM_ALL (OBD_CKSUM_CRC32 | CHECKSUM_ADLER) - -/* Checksum algorithm names. Must be defined in the same order as the - * OBD_CKSUM_* flags. */ -#define DECLARE_CKSUM_NAME char *cksum_name[] = {"crc32", "adler"} - #endif /* __OBD_H */ diff --git a/lustre/include/obd_cksum.h b/lustre/include/obd_cksum.h new file mode 100644 index 0000000..9d35014 --- /dev/null +++ b/lustre/include/obd_cksum.h @@ -0,0 +1,150 @@ +/* -*- mode: c; c-basic-offset: 8; indent-tabs-mode: nil; -*- + * vim:expandtab:shiftwidth=8:tabstop=8: + * + * Copyright (C) 2001, 2002 Cluster File Systems, Inc. + * + * This file is part of Lustre, http://www.lustre.org. + * + * Lustre is free software; you can redistribute it and/or + * modify it under the terms of version 2 of the GNU General Public + * License as published by the Free Software Foundation. + * + * Lustre is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Lustre; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + * + */ + +#ifndef __OBD_CKSUM +#define __OBD_CKSUM + +#if defined(__linux__) +#include +#elif defined(__APPLE__) +#include +#elif defined(__WINNT__) +#include +#else +#error Unsupported operating system. +#endif + +#include +#include + +/* + * Checksums + */ + +#ifndef HAVE_ARCH_CRC32 +/* crc32_le lifted from the Linux kernel, which had the following to say: + * + * This code is in the public domain; copyright abandoned. + * Liability for non-performance of this code is limited to the amount + * you paid for it. Since it is distributed for free, your refund will + * be very very small. If it breaks, you get to keep both pieces. + */ +#define CRCPOLY_LE 0xedb88320 +/** + * crc32_le() - Calculate bitwise little-endian Ethernet AUTODIN II CRC32 + * @crc - seed value for computation. ~0 for Ethernet, sometimes 0 for + * other uses, or the previous crc32 value if computing incrementally. + * @p - pointer to buffer over which CRC is run + * @len - length of buffer @p + */ +static inline __u32 crc32_le(__u32 crc, unsigned char const *p, size_t len) +{ + int i; + while (len--) { + crc ^= *p++; + for (i = 0; i < 8; i++) + crc = (crc >> 1) ^ ((crc & 1) ? CRCPOLY_LE : 0); + } + return crc; +} +#endif + +static inline __u32 init_checksum(cksum_type_t cksum_type) +{ + switch(cksum_type) { + case OBD_CKSUM_CRC32: + return ~0U; +#ifdef HAVE_ADLER + case OBD_CKSUM_ADLER: + return 1U; +#endif + default: + CERROR("Unknown checksum type (%x)!!!\n", cksum_type); + LBUG(); + } + return 0; +} + +static inline __u32 compute_checksum(__u32 cksum, unsigned char const *p, + size_t len, cksum_type_t cksum_type) +{ + switch(cksum_type) { + case OBD_CKSUM_CRC32: + return crc32_le(cksum, p, len); +#ifdef HAVE_ADLER + case OBD_CKSUM_ADLER: + return adler32(cksum, p, len); +#endif + default: + CERROR("Unknown checksum type (%x)!!!\n", cksum_type); + LBUG(); + } + return 0; +} + +static inline obd_flag cksum_type_pack(cksum_type_t cksum_type) +{ + switch(cksum_type) { + case OBD_CKSUM_CRC32: + return OBD_FL_CKSUM_CRC32; +#ifdef HAVE_ADLER + case OBD_CKSUM_ADLER: + return OBD_FL_CKSUM_ADLER; +#endif + default: + CWARN("unknown cksum type %x\n", cksum_type); + } + return OBD_FL_CKSUM_CRC32; +} + +static inline cksum_type_t cksum_type_unpack(obd_flag o_flags) +{ + o_flags &= OBD_FL_CKSUM_ALL; + if ((o_flags - 1) & o_flags) + CWARN("several checksum types are set: %x\n", o_flags); + if (o_flags & OBD_FL_CKSUM_ADLER) +#ifdef HAVE_ADLER + return OBD_CKSUM_ADLER; +#else + CWARN("checksum type is set to adler32, but adler32 is not " + "supported (%x)\n", o_flags); +#endif + return OBD_CKSUM_CRC32; +} + +#ifdef HAVE_ADLER +/* Default preferred checksum algorithm to use (if supported by the server) */ +#define OSC_DEFAULT_CKSUM OBD_CKSUM_ADLER +/* Adler-32 is supported */ +#define CHECKSUM_ADLER OBD_CKSUM_ADLER +#else +#define OSC_DEFAULT_CKSUM OBD_CKSUM_CRC32 +#define CHECKSUM_ADLER 0 +#endif + +#define OBD_CKSUM_ALL (OBD_CKSUM_CRC32 | CHECKSUM_ADLER) + +/* Checksum algorithm names. Must be defined in the same order as the + * OBD_CKSUM_* flags. */ +#define DECLARE_CKSUM_NAME char *cksum_name[] = {"crc32", "adler"} + +#endif /* __OBD_H */ diff --git a/lustre/include/obd_class.h b/lustre/include/obd_class.h index 30a3f7f..edf8899 100644 --- a/lustre/include/obd_class.h +++ b/lustre/include/obd_class.h @@ -19,7 +19,6 @@ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * */ - #ifndef __CLASS_OBD_H #define __CLASS_OBD_H diff --git a/lustre/llite/llite_lib.c b/lustre/llite/llite_lib.c index 0fd008c..52e89e9 100644 --- a/lustre/llite/llite_lib.c +++ b/lustre/llite/llite_lib.c @@ -35,6 +35,7 @@ #include #include #include +#include #include "llite_internal.h" cfs_mem_cache_t *ll_file_data_slab; diff --git a/lustre/llite/rw.c b/lustre/llite/rw.c index a16aac6..3eba56d 100644 --- a/lustre/llite/rw.c +++ b/lustre/llite/rw.c @@ -20,9 +20,7 @@ * along with Lustre; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ -#ifndef AUTOCONF_INCLUDED -#include -#endif +#include #include #include #include @@ -45,6 +43,7 @@ //#include #include +#include #include "llite_internal.h" #include diff --git a/lustre/obdfilter/filter.c b/lustre/obdfilter/filter.c index b8b64ed..c9ce969 100644 --- a/lustre/obdfilter/filter.c +++ b/lustre/obdfilter/filter.c @@ -47,6 +47,7 @@ #include #include +#include #include #include #include diff --git a/lustre/osc/lproc_osc.c b/lustre/osc/lproc_osc.c index ba665a8..8712ef6 100644 --- a/lustre/osc/lproc_osc.c +++ b/lustre/osc/lproc_osc.c @@ -26,6 +26,7 @@ #include #include +#include #include #include #include diff --git a/lustre/osc/osc_request.c b/lustre/osc/osc_request.c index a5380b4..4150ef5 100644 --- a/lustre/osc/osc_request.c +++ b/lustre/osc/osc_request.c @@ -44,6 +44,7 @@ #include #include #include +#include #include #include diff --git a/lustre/ost/ost_handler.c b/lustre/ost/ost_handler.c index 02faf06..2a1fa8c 100644 --- a/lustre/ost/ost_handler.c +++ b/lustre/ost/ost_handler.c @@ -39,6 +39,7 @@ #define DEBUG_SUBSYSTEM S_OST #include +#include #include #include #include diff --git a/lustre/ptlrpc/import.c b/lustre/ptlrpc/import.c index 17fb8cb..aba05cf 100644 --- a/lustre/ptlrpc/import.c +++ b/lustre/ptlrpc/import.c @@ -34,6 +34,7 @@ #include #include #include +#include #include #include "ptlrpc_internal.h" diff --git a/lustre/ptlrpc/sec_bulk.c b/lustre/ptlrpc/sec_bulk.c index e49d19b..22ed4ff 100644 --- a/lustre/ptlrpc/sec_bulk.c +++ b/lustre/ptlrpc/sec_bulk.c @@ -34,6 +34,7 @@ #endif #include +#include #include #include #include