⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lvm.h

📁 unxi下共享内存的使用
💻 H
📖 第 1 页 / 共 2 页
字号:
/* * include/linux/lvm.h * kernel/lvm.h * tools/lib/lvm.h * * Copyright (C) 1997 - 2001  Heinz Mauelshagen, Sistina Software * * February-November 1997 * May-July 1998 * January-March,July,September,October,Dezember 1999 * January,February,July,November 2000 * January-March,June,July 2001 * * lvm 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, or (at your option) * any later version. * * lvm 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 GNU CC; see the file COPYING.  If not, write to * the Free Software Foundation, 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. * *//* * Changelog * *    10/10/1997 - beginning of new structure creation *    12/05/1998 - incorporated structures from lvm_v1.h and deleted lvm_v1.h *    07/06/1998 - avoided LVM_KMALLOC_MAX define by using vmalloc/vfree *                 instead of kmalloc/kfree *    01/07/1998 - fixed wrong LVM_MAX_SIZE *    07/07/1998 - extended pe_t structure by ios member (for statistic) *    02/08/1998 - changes for official char/block major numbers *    07/08/1998 - avoided init_module() and cleanup_module() to be static *    29/08/1998 - seprated core and disk structure type definitions *    01/09/1998 - merged kernel integration version (mike) *    20/01/1999 - added LVM_PE_DISK_OFFSET macro for use in *                 vg_read_with_pv_and_lv(), pv_move_pe(), pv_show_pe_text()... *    18/02/1999 - added definition of time_disk_t structure for; *                 keeps time stamps on disk for nonatomic writes (future) *    15/03/1999 - corrected LV() and VG() macro definition to use argument *                 instead of minor *    03/07/1999 - define for genhd.c name handling *    23/07/1999 - implemented snapshot part *    08/12/1999 - changed LVM_LV_SIZE_MAX macro to reflect current 1TB limit *    01/01/2000 - extended lv_v2 core structure by wait_queue member *    12/02/2000 - integrated Andrea Arcagnelli's snapshot work *    18/02/2000 - seperated user and kernel space parts by *                 #ifdef them with __KERNEL__ *    08/03/2000 - implemented cluster/shared bits for vg_access *    26/06/2000 - implemented snapshot persistency and resizing support *    02/11/2000 - added hash table size member to lv structure *    12/11/2000 - removed unneeded timestamp definitions *    24/12/2000 - removed LVM_TO_{CORE,DISK}*, use cpu_{from, to}_le* *                 instead - Christoph Hellwig *    22/01/2001 - Change ulong to uint32_t *    14/02/2001 - changed LVM_SNAPSHOT_MIN_CHUNK to 1 page *    20/02/2001 - incremented IOP version to 11 because of incompatible *                 change in VG activation (in order to support devfs better) *    01/03/2001 - Revert to IOP10 and add VG_CREATE_OLD call for compatibility *    08/03/2001 - new lv_t (in core) version number 5: changed page member *                 to (struct kiobuf *) to use for COW exception table io *    26/03/2001 - changed lv_v4 to lv_v5 in structure definition (HM) *    21/06/2001 - changed BLOCK_SIZE back to 1024 for non S/390 *    22/06/2001 - added Andreas Dilger's PE on 4k boundary alignment enhancements *    19/07/2001 - added rwsem compatibility macros for 2.2 kernels *    13/11/2001 - reduced userspace inclusion of kernel headers to a minimum * */#ifndef _LVM_H_INCLUDE#define _LVM_H_INCLUDE#define LVM_RELEASE_NAME "1.0.3"#define LVM_RELEASE_DATE "19/02/2002"#define	_LVM_KERNEL_H_VERSION	"LVM "LVM_RELEASE_NAME" ("LVM_RELEASE_DATE")"#include <linux/version.h>/* * preprocessor definitions *//* if you like emergency reset code in the driver */#define	LVM_TOTAL_RESET#ifdef __KERNEL__#undef LVM_HD_NAME /* display nice names in /proc/partitions *//* lots of debugging output (see driver source)   #define DEBUG_LVM_GET_INFO   #define DEBUG   #define DEBUG_MAP   #define DEBUG_MAP_SIZE   #define DEBUG_IOCTL   #define DEBUG_READ   #define DEBUG_GENDISK   #define DEBUG_VG_CREATE   #define DEBUG_DEVICE   #define DEBUG_KFREE */#include <linux/kdev_t.h>#include <linux/list.h>#include <asm/types.h>#include <linux/major.h>#else/* This prevents the need to include <linux/list.h> which   causes problems on some platforms. It's not nice but then   neither is the alternative. */struct list_head {        struct list_head *next, *prev;};#define __KERNEL__#include <linux/kdev_t.h>#undef __KERNEL__#endif				/* #ifndef __KERNEL__ */#ifdef __KERNEL__#include <linux/spinlock.h>#include <asm/semaphore.h>#endif				/* #ifdef __KERNEL__ */#include <asm/page.h>#if !defined ( LVM_BLK_MAJOR) || !defined ( LVM_CHAR_MAJOR)#error Bad include/linux/major.h - LVM MAJOR undefined#endif#ifdef	BLOCK_SIZE#undef	BLOCK_SIZE#endif#ifdef CONFIG_ARCH_S390#define BLOCK_SIZE	4096#else#define BLOCK_SIZE	1024#endif#ifndef	SECTOR_SIZE#define SECTOR_SIZE	512#endif/* structure version */#define LVM_STRUCT_VERSION 1#define	LVM_DIR_PREFIX	"/dev/"/* * i/o protocol version * * defined here for the driver and defined seperate in the * user land tools/lib/liblvm.h * */#define	LVM_DRIVER_IOP_VERSION	        10#define LVM_NAME        "lvm"#define LVM_GLOBAL	"global"#define LVM_DIR		"lvm"#define LVM_VG_SUBDIR	"VGs"#define LVM_LV_SUBDIR	"LVs"#define LVM_PV_SUBDIR	"PVs"/* * VG/LV indexing macros *//* character minor maps directly to volume group */#define	VG_CHR(a) ( a)/* block minor indexes into a volume group/logical volume indirection table */#define	VG_BLK(a)	( vg_lv_map[a].vg_number)#define LV_BLK(a)	( vg_lv_map[a].lv_number)/* * absolute limits for VGs, PVs per VG and LVs per VG */#define ABS_MAX_VG	99#define ABS_MAX_PV	256#define ABS_MAX_LV	256	/* caused by 8 bit minor */#define MAX_VG  ABS_MAX_VG#define MAX_LV	ABS_MAX_LV#define	MAX_PV	ABS_MAX_PV#if ( MAX_VG > ABS_MAX_VG)#undef MAX_VG#define MAX_VG ABS_MAX_VG#endif#if ( MAX_LV > ABS_MAX_LV)#undef MAX_LV#define MAX_LV ABS_MAX_LV#endif/* * VGDA: default disk spaces and offsets * *   There's space after the structures for later extensions. *   The physical volume structure holds offset and size definitions *   for itself (well, kind of redundant ;-) and all other structure{s| arrays}; * *   In recent versions since LVM 0.9.1 we align to 4k offsets in order to ease *   future kernel reads of the metadata. * *   offset               what                               size *   ---------------      --------------------------------   ------------ *   0                    physical volume structure          pv->pv_on_disk.size *                                                           (~500 byte) *   pv->vg_on_disk.base  volume group structure             pv->vg_on_disk.size * *   pv->uuidlist_on_disk.base                               128 byte each *                        uuidlist of physical volumes *                        holding one uuid per physical volume * *   pv->lv_on_disk.base  logical volume structures;         pv->lv_on_disk.size *                        one structure per logical volume   (~300 byte each) * *   pv->pe_on_disk.base  physical extent alloc. structs     pv->pe_on_disk.size *                        one strcuture per physical extent  (4 byte each) * *   End of disk -        first physical extent              default 4 megabyte *   PE total * *   PE size *   (rounded to 64k offset today) * *   pv->pe_on_disk.base + pv->pe_on_disk.size == start of first physical extent * *//* DONT TOUCH THESE !!! *//* * LVM_PE_T_MAX corresponds to: * * 8KB PE size can map a ~512 MB logical volume at the cost of 1MB memory, * * 128MB PE size can map a 8TB logical volume at the same cost of memory. * * Default PE size of 4 MB gives a maximum logical volume size of 256 GB. * * Maximum PE size of 16GB gives a maximum logical volume size of 1024 TB. * * AFAIK, the actual kernels limit this to 2 TB. * * Should be a sufficient spectrum ;*) *//* This is the usable size of pe_disk_t.le_num !!!        v     v */#define	LVM_PE_T_MAX		( ( 1 << ( sizeof ( uint16_t) * 8)) - 2)#define	LVM_LV_SIZE_MAX(a)	( ( long long) LVM_PE_T_MAX * (a)->pe_size > ( long long) 1024*1024/SECTOR_SIZE*1024*1024 ? ( long long) 1024*1024/SECTOR_SIZE*1024*1024 : ( long long) LVM_PE_T_MAX * (a)->pe_size)#define	LVM_MIN_PE_SIZE		( 8192L / SECTOR_SIZE) /* 8 KB in sectors */#define	LVM_MAX_PE_SIZE		( 16L * 1024L * 1024L / SECTOR_SIZE * 1024)	/* 16GB in sectors */#define	LVM_DEFAULT_PE_SIZE	( 4096L * 1024 / SECTOR_SIZE)	/* 4 MB in sectors */#define	LVM_DEFAULT_STRIPE_SIZE	16L	/* 16 KB  */#define	LVM_MIN_STRIPE_SIZE	( PAGE_SIZE/SECTOR_SIZE)	/* PAGESIZE in sectors */#define	LVM_MAX_STRIPE_SIZE	( 512L * 1024 / SECTOR_SIZE)	/* 512 KB in sectors */#define	LVM_MAX_STRIPES		128	/* max # of stripes */#define	LVM_MAX_SIZE            ( 1024LU * 1024 / SECTOR_SIZE * 1024 * 1024)	/* 1TB[sectors] */#define	LVM_MAX_MIRRORS    	2	/* future use */#define	LVM_MIN_READ_AHEAD	0	/* minimum read ahead sectors */#define	LVM_DEFAULT_READ_AHEAD	1024	/* sectors for 512k scsi segments */#define	LVM_MAX_READ_AHEAD	10000	/* maximum read ahead sectors */#define	LVM_MAX_LV_IO_TIMEOUT	60	/* seconds I/O timeout (future use) */#define	LVM_PARTITION           0xfe	/* LVM partition id */#define	LVM_NEW_PARTITION       0x8e	/* new LVM partition id (10/09/1999) */#define	LVM_PE_SIZE_PV_SIZE_REL	5	/* max relation PV size and PE size */#define	LVM_SNAPSHOT_MAX_CHUNK	1024	/* 1024 KB */#define	LVM_SNAPSHOT_DEF_CHUNK	64	/* 64  KB */#define	LVM_SNAPSHOT_MIN_CHUNK	(PAGE_SIZE/1024)	/* 4 or 8 KB */#define	UNDEF	-1/* * ioctls * FIXME: the last parameter to _IO{W,R,WR} is a data type.  The macro will *	  expand this using sizeof(), so putting "1" there is misleading *	  because sizeof(1) = sizeof(int) = sizeof(2) = 4 on a 32-bit machine! *//* volume group */#define	VG_CREATE_OLD           _IOW ( 0xfe, 0x00, 1)#define	VG_REMOVE               _IOW ( 0xfe, 0x01, 1)#define	VG_EXTEND               _IOW ( 0xfe, 0x03, 1)#define	VG_REDUCE               _IOW ( 0xfe, 0x04, 1)#define	VG_STATUS               _IOWR ( 0xfe, 0x05, 1)#define	VG_STATUS_GET_COUNT     _IOWR ( 0xfe, 0x06, 1)#define	VG_STATUS_GET_NAMELIST  _IOWR ( 0xfe, 0x07, 1)#define	VG_SET_EXTENDABLE       _IOW ( 0xfe, 0x08, 1)#define	VG_RENAME		_IOW ( 0xfe, 0x09, 1)/* Since 0.9beta6 */#define	VG_CREATE               _IOW ( 0xfe, 0x0a, 1)/* logical volume */#define	LV_CREATE               _IOW ( 0xfe, 0x20, 1)#define	LV_REMOVE               _IOW ( 0xfe, 0x21, 1)#define	LV_ACTIVATE             _IO ( 0xfe, 0x22)#define	LV_DEACTIVATE           _IO ( 0xfe, 0x23)#define	LV_EXTEND               _IOW ( 0xfe, 0x24, 1)#define	LV_REDUCE               _IOW ( 0xfe, 0x25, 1)#define	LV_STATUS_BYNAME        _IOWR ( 0xfe, 0x26, 1)#define	LV_STATUS_BYINDEX       _IOWR ( 0xfe, 0x27, 1)#define LV_SET_ACCESS           _IOW ( 0xfe, 0x28, 1)#define LV_SET_ALLOCATION       _IOW ( 0xfe, 0x29, 1)#define LV_SET_STATUS           _IOW ( 0xfe, 0x2a, 1)#define LE_REMAP                _IOW ( 0xfe, 0x2b, 1)#define LV_SNAPSHOT_USE_RATE    _IOWR ( 0xfe, 0x2c, 1)#define	LV_STATUS_BYDEV		_IOWR ( 0xfe, 0x2e, 1)#define	LV_RENAME		_IOW ( 0xfe, 0x2f, 1)#define	LV_BMAP			_IOWR ( 0xfe, 0x30, 1)/* physical volume */#define	PV_STATUS               _IOWR ( 0xfe, 0x40, 1)#define	PV_CHANGE               _IOWR ( 0xfe, 0x41, 1)#define	PV_FLUSH                _IOW ( 0xfe, 0x42, 1)/* physical extent */#define	PE_LOCK_UNLOCK          _IOW ( 0xfe, 0x50, 1)/* i/o protocol version */#define	LVM_GET_IOP_VERSION     _IOR ( 0xfe, 0x98, 1)#ifdef LVM_TOTAL_RESET/* special reset function for testing purposes */#define	LVM_RESET               _IO ( 0xfe, 0x99)#endif/* lock the logical volume manager */#if LVM_DRIVER_IOP_VERSION > 11#define	LVM_LOCK_LVM            _IO ( 0xfe, 0x9A)#else/* This is actually the same as _IO ( 0xff, 0x00), oops.  Remove for IOP 12+ */#define	LVM_LOCK_LVM            _IO ( 0xfe, 0x100)#endif/* END ioctls *//* * Status flags *//* volume group */#define	VG_ACTIVE            0x01	/* vg_status */#define	VG_EXPORTED          0x02	/*     "     */#define	VG_EXTENDABLE        0x04	/*     "     */#define	VG_READ              0x01	/* vg_access */#define	VG_WRITE             0x02	/*     "     */#define	VG_CLUSTERED         0x04	/*     "     */#define	VG_SHARED            0x08	/*     "     *//* logical volume */#define	LV_ACTIVE            0x01	/* lv_status */#define	LV_SPINDOWN          0x02	/*     "     */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -