1
2/*
3 * kernel/lvm_internal.h
4 *
5 * Copyright (C) 2001 Sistina Software
6 *
7 *
8 * LVM driver is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License as published by
10 * the Free Software Foundation; either version 2, or (at your option)
11 * any later version.
12 *
13 * LVM driver is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16 * GNU General Public License for more details.
17 *
18 * You should have received a copy of the GNU General Public License
19 * along with GNU CC; see the file COPYING.  If not, write to
20 * the Free Software Foundation, 59 Temple Place - Suite 330,
21 * Boston, MA 02111-1307, USA.
22 *
23 */
24
25/*
26 * Changelog
27 *
28 *    05/01/2001 - Factored this file out of lvm.c (Joe Thornber)
29 *    11/01/2001 - Renamed lvm_internal and added declarations
30 *                 for lvm_fs.c stuff
31 *
32 */
33
34#ifndef LVM_INTERNAL_H
35#define LVM_INTERNAL_H
36
37#include <linux/lvm.h>
38
39#define	_LVM_INTERNAL_H_VERSION	"LVM "LVM_RELEASE_NAME" ("LVM_RELEASE_DATE")"
40
41/* global variables, defined in lvm.c */
42extern char *lvm_version;
43extern ushort lvm_iop_version;
44extern int loadtime;
45extern const char *const lvm_name;
46
47
48extern uint vg_count;
49extern vg_t *vg[];
50extern struct file_operations lvm_chr_fops;
51
52#ifndef	uchar
53typedef	unsigned char	uchar;
54#endif
55
56extern struct block_device_operations lvm_blk_dops;
57
58#define lvm_sectsize(dev) get_hardsect_size(dev)
59
60/* 2.4.8 had no global min/max macros, and 2.4.9's were flawed */
61
62/* debug macros */
63#ifdef DEBUG_IOCTL
64#define P_IOCTL(fmt, args...) printk(KERN_DEBUG "lvm ioctl: " fmt, ## args)
65#else
66#define P_IOCTL(fmt, args...)
67#endif
68
69#ifdef DEBUG_MAP
70#define P_MAP(fmt, args...) printk(KERN_DEBUG "lvm map: " fmt, ## args)
71#else
72#define P_MAP(fmt, args...)
73#endif
74
75#ifdef DEBUG_KFREE
76#define P_KFREE(fmt, args...) printk(KERN_DEBUG "lvm kfree: " fmt, ## args)
77#else
78#define P_KFREE(fmt, args...)
79#endif
80
81#ifdef DEBUG_DEVICE
82#define P_DEV(fmt, args...) printk(KERN_DEBUG "lvm device: " fmt, ## args)
83#else
84#define P_DEV(fmt, args...)
85#endif
86
87
88/* lvm-snap.c */
89int lvm_get_blksize(kdev_t);
90int lvm_snapshot_alloc(lv_t *);
91int lvm_snapshot_fill_COW_page(vg_t *, lv_t *);
92int lvm_snapshot_COW(kdev_t, ulong, ulong, ulong, vg_t *vg, lv_t *);
93int lvm_snapshot_remap_block(kdev_t *, ulong *, ulong, lv_t *);
94void lvm_snapshot_release(lv_t *);
95int lvm_write_COW_table_block(vg_t *, lv_t *);
96void lvm_hash_link(lv_block_exception_t *, kdev_t, ulong, lv_t *);
97int lvm_snapshot_alloc_hash_table(lv_t *);
98void lvm_drop_snapshot(vg_t *vg, lv_t *, const char *);
99
100
101/* lvm_fs.c */
102void lvm_init_fs(void);
103void lvm_fin_fs(void);
104
105void lvm_fs_create_vg(vg_t *vg_ptr);
106void lvm_fs_remove_vg(vg_t *vg_ptr);
107devfs_handle_t lvm_fs_create_lv(vg_t *vg_ptr, lv_t *lv);
108void lvm_fs_remove_lv(vg_t *vg_ptr, lv_t *lv);
109void lvm_fs_create_pv(vg_t *vg_ptr, pv_t *pv);
110void lvm_fs_remove_pv(vg_t *vg_ptr, pv_t *pv);
111
112#endif
113