4 * Copyright (C) 2003-2004 Sistina Software, Inc. All rights reserved.
5 * Copyright (C) 2004-2006 Red Hat, Inc. All rights reserved.
7 * This file is part of LVM2.
9 * This copyrighted material is made available to anyone wishing to use,
10 * modify, copy, or redistribute it subject to the terms and conditions
11 * of the GNU Lesser General Public License v.2.1.
13 * You should have received a copy of the GNU Lesser General Public License
14 * along with this program; if not, write to the Free Software Foundation,
15 * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18 #ifndef _LVM_LV_ALLOC_H
20 struct lv_segment
*alloc_lv_segment(struct dm_pool
*mem
,
21 const struct segment_type
*segtype
,
22 struct logical_volume
*lv
,
23 uint32_t le
, uint32_t len
,
26 struct logical_volume
*log_lv
,
31 uint32_t extents_copied
);
33 struct lv_segment
*alloc_snapshot_seg(struct logical_volume
*lv
,
34 uint32_t status
, uint32_t old_le_count
);
36 int set_lv_segment_area_pv(struct lv_segment
*seg
, uint32_t area_num
,
37 struct physical_volume
*pv
, uint32_t pe
);
38 int set_lv_segment_area_lv(struct lv_segment
*seg
, uint32_t area_num
,
39 struct logical_volume
*lv
, uint32_t le
,
41 int move_lv_segment_area(struct lv_segment
*seg_to
, uint32_t area_to
,
42 struct lv_segment
*seg_from
, uint32_t area_from
);
43 void release_lv_segment_area(struct lv_segment
*seg
, uint32_t s
,
44 uint32_t area_reduction
);
47 struct alloc_handle
*allocate_extents(struct volume_group
*vg
,
48 struct logical_volume
*lv
,
49 const struct segment_type
*segtype
,
51 uint32_t mirrors
, uint32_t log_count
,
52 uint32_t log_region_size
, uint32_t extents
,
53 struct dm_list
*allocatable_pvs
,
55 struct dm_list
*parallel_areas
);
57 int lv_add_segment(struct alloc_handle
*ah
,
58 uint32_t first_area
, uint32_t num_areas
,
59 struct logical_volume
*lv
,
60 const struct segment_type
*segtype
,
64 struct logical_volume
*log_lv
);
66 int lv_add_mirror_areas(struct alloc_handle
*ah
,
67 struct logical_volume
*lv
, uint32_t le
,
68 uint32_t region_size
);
69 int lv_add_mirror_lvs(struct logical_volume
*lv
,
70 struct logical_volume
**sub_lvs
,
71 uint32_t num_extra_areas
,
72 uint32_t status
, uint32_t region_size
);
74 int lv_add_log_segment(struct alloc_handle
*ah
, struct logical_volume
*log_lv
);
75 int lv_add_virtual_segment(struct logical_volume
*lv
, uint32_t status
,
76 uint32_t extents
, const struct segment_type
*segtype
);
78 void alloc_destroy(struct alloc_handle
*ah
);
80 struct dm_list
*build_parallel_areas_from_lv(struct cmd_context
*cmd
,
81 struct logical_volume
*lv
);