diff options
Diffstat (limited to 'include/zfs/zio.h')
| -rw-r--r-- | include/zfs/zio.h | 92 | 
1 files changed, 92 insertions, 0 deletions
| diff --git a/include/zfs/zio.h b/include/zfs/zio.h new file mode 100644 index 000000000..4adb14cb0 --- /dev/null +++ b/include/zfs/zio.h @@ -0,0 +1,92 @@ +/* + *  GRUB  --  GRand Unified Bootloader + *  Copyright (C) 1999,2000,2001,2002,2003,2004  Free Software Foundation, Inc. + * + *  This program is free software; you can redistribute it and/or modify + *  it under the terms of the GNU General Public License as published by + *  the Free Software Foundation; either version 2 of the License, or + *  (at your option) any later version. + * + *  This program 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 this program; if not, write to the Free Software + *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ +/* + * Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved. + */ + +#ifndef _ZIO_H +#define	_ZIO_H + +#include <zfs/spa.h> + +#define	ZEC_MAGIC	0x210da7ab10c7a11ULL	/* zio data bloc tail */ + +typedef struct zio_eck { +	uint64_t	zec_magic;	/* for validation, endianness	*/ +	zio_cksum_t	zec_cksum;	/* 256-bit checksum		*/ +} zio_eck_t; + +/* + * Gang block headers are self-checksumming and contain an array + * of block pointers. + */ +#define	SPA_GANGBLOCKSIZE	SPA_MINBLOCKSIZE +#define	SPA_GBH_NBLKPTRS	((SPA_GANGBLOCKSIZE - \ +	sizeof(zio_eck_t)) / sizeof(blkptr_t)) +#define	SPA_GBH_FILLER		((SPA_GANGBLOCKSIZE - \ +	sizeof(zio_eck_t) - \ +	(SPA_GBH_NBLKPTRS * sizeof(blkptr_t))) /\ +	sizeof(uint64_t)) + +#define	ZIO_GET_IOSIZE(zio)	\ +	(BP_IS_GANG((zio)->io_bp) ? \ +	SPA_GANGBLOCKSIZE : BP_GET_PSIZE((zio)->io_bp)) + +typedef struct zio_gbh { +	blkptr_t		zg_blkptr[SPA_GBH_NBLKPTRS]; +	uint64_t		zg_filler[SPA_GBH_FILLER]; +	zio_eck_t		zg_tail; +} zio_gbh_phys_t; + +enum zio_checksum { +	ZIO_CHECKSUM_INHERIT = 0, +	ZIO_CHECKSUM_ON, +	ZIO_CHECKSUM_OFF, +	ZIO_CHECKSUM_LABEL, +	ZIO_CHECKSUM_GANG_HEADER, +	ZIO_CHECKSUM_ZILOG, +	ZIO_CHECKSUM_FLETCHER_2, +	ZIO_CHECKSUM_FLETCHER_4, +	ZIO_CHECKSUM_SHA256, +	ZIO_CHECKSUM_ZILOG2, +	ZIO_CHECKSUM_FUNCTIONS +}; + +#define	ZIO_CHECKSUM_ON_VALUE	ZIO_CHECKSUM_FLETCHER_2 +#define	ZIO_CHECKSUM_DEFAULT	ZIO_CHECKSUM_ON + +enum zio_compress { +	ZIO_COMPRESS_INHERIT = 0, +	ZIO_COMPRESS_ON, +	ZIO_COMPRESS_OFF, +	ZIO_COMPRESS_LZJB, +	ZIO_COMPRESS_EMPTY, +	ZIO_COMPRESS_GZIP1, +	ZIO_COMPRESS_GZIP2, +	ZIO_COMPRESS_GZIP3, +	ZIO_COMPRESS_GZIP4, +	ZIO_COMPRESS_GZIP5, +	ZIO_COMPRESS_GZIP6, +	ZIO_COMPRESS_GZIP7, +	ZIO_COMPRESS_GZIP8, +	ZIO_COMPRESS_GZIP9, +	ZIO_COMPRESS_FUNCTIONS +}; + +#endif	/* _ZIO_H */ |