186d7f5d3SJohn Marino /* $NetBSD: lv_alloc.h,v 1.1.1.2 2009/02/18 11:16:47 haad Exp $ */ 286d7f5d3SJohn Marino 386d7f5d3SJohn Marino /* 486d7f5d3SJohn Marino * Copyright (C) 2003-2004 Sistina Software, Inc. All rights reserved. 586d7f5d3SJohn Marino * Copyright (C) 2004-2006 Red Hat, Inc. All rights reserved. 686d7f5d3SJohn Marino * 786d7f5d3SJohn Marino * This file is part of LVM2. 886d7f5d3SJohn Marino * 986d7f5d3SJohn Marino * This copyrighted material is made available to anyone wishing to use, 1086d7f5d3SJohn Marino * modify, copy, or redistribute it subject to the terms and conditions 1186d7f5d3SJohn Marino * of the GNU Lesser General Public License v.2.1. 1286d7f5d3SJohn Marino * 1386d7f5d3SJohn Marino * You should have received a copy of the GNU Lesser General Public License 1486d7f5d3SJohn Marino * along with this program; if not, write to the Free Software Foundation, 1586d7f5d3SJohn Marino * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 1686d7f5d3SJohn Marino */ 1786d7f5d3SJohn Marino 1886d7f5d3SJohn Marino #ifndef _LVM_LV_ALLOC_H 1986d7f5d3SJohn Marino 2086d7f5d3SJohn Marino struct lv_segment *alloc_lv_segment(struct dm_pool *mem, 2186d7f5d3SJohn Marino const struct segment_type *segtype, 2286d7f5d3SJohn Marino struct logical_volume *lv, 2386d7f5d3SJohn Marino uint32_t le, uint32_t len, 2486d7f5d3SJohn Marino uint32_t status, 2586d7f5d3SJohn Marino uint32_t stripe_size, 2686d7f5d3SJohn Marino struct logical_volume *log_lv, 2786d7f5d3SJohn Marino uint32_t area_count, 2886d7f5d3SJohn Marino uint32_t area_len, 2986d7f5d3SJohn Marino uint32_t chunk_size, 3086d7f5d3SJohn Marino uint32_t region_size, 3186d7f5d3SJohn Marino uint32_t extents_copied); 3286d7f5d3SJohn Marino 3386d7f5d3SJohn Marino struct lv_segment *alloc_snapshot_seg(struct logical_volume *lv, 3486d7f5d3SJohn Marino uint32_t status, uint32_t old_le_count); 3586d7f5d3SJohn Marino 3686d7f5d3SJohn Marino int set_lv_segment_area_pv(struct lv_segment *seg, uint32_t area_num, 3786d7f5d3SJohn Marino struct physical_volume *pv, uint32_t pe); 3886d7f5d3SJohn Marino int set_lv_segment_area_lv(struct lv_segment *seg, uint32_t area_num, 3986d7f5d3SJohn Marino struct logical_volume *lv, uint32_t le, 4086d7f5d3SJohn Marino uint32_t flags); 4186d7f5d3SJohn Marino int move_lv_segment_area(struct lv_segment *seg_to, uint32_t area_to, 4286d7f5d3SJohn Marino struct lv_segment *seg_from, uint32_t area_from); 4386d7f5d3SJohn Marino void release_lv_segment_area(struct lv_segment *seg, uint32_t s, 4486d7f5d3SJohn Marino uint32_t area_reduction); 4586d7f5d3SJohn Marino 4686d7f5d3SJohn Marino struct alloc_handle; 4786d7f5d3SJohn Marino struct alloc_handle *allocate_extents(struct volume_group *vg, 4886d7f5d3SJohn Marino struct logical_volume *lv, 4986d7f5d3SJohn Marino const struct segment_type *segtype, 5086d7f5d3SJohn Marino uint32_t stripes, 5186d7f5d3SJohn Marino uint32_t mirrors, uint32_t log_count, 5286d7f5d3SJohn Marino uint32_t log_region_size, uint32_t extents, 5386d7f5d3SJohn Marino struct dm_list *allocatable_pvs, 5486d7f5d3SJohn Marino alloc_policy_t alloc, 5586d7f5d3SJohn Marino struct dm_list *parallel_areas); 5686d7f5d3SJohn Marino 5786d7f5d3SJohn Marino int lv_add_segment(struct alloc_handle *ah, 5886d7f5d3SJohn Marino uint32_t first_area, uint32_t num_areas, 5986d7f5d3SJohn Marino struct logical_volume *lv, 6086d7f5d3SJohn Marino const struct segment_type *segtype, 6186d7f5d3SJohn Marino uint32_t stripe_size, 6286d7f5d3SJohn Marino uint32_t status, 6386d7f5d3SJohn Marino uint32_t region_size, 6486d7f5d3SJohn Marino struct logical_volume *log_lv); 6586d7f5d3SJohn Marino 6686d7f5d3SJohn Marino int lv_add_mirror_areas(struct alloc_handle *ah, 6786d7f5d3SJohn Marino struct logical_volume *lv, uint32_t le, 6886d7f5d3SJohn Marino uint32_t region_size); 6986d7f5d3SJohn Marino int lv_add_mirror_lvs(struct logical_volume *lv, 7086d7f5d3SJohn Marino struct logical_volume **sub_lvs, 7186d7f5d3SJohn Marino uint32_t num_extra_areas, 7286d7f5d3SJohn Marino uint32_t status, uint32_t region_size); 7386d7f5d3SJohn Marino 7486d7f5d3SJohn Marino int lv_add_log_segment(struct alloc_handle *ah, struct logical_volume *log_lv); 7586d7f5d3SJohn Marino int lv_add_virtual_segment(struct logical_volume *lv, uint32_t status, 7686d7f5d3SJohn Marino uint32_t extents, const struct segment_type *segtype); 7786d7f5d3SJohn Marino 7886d7f5d3SJohn Marino void alloc_destroy(struct alloc_handle *ah); 7986d7f5d3SJohn Marino 8086d7f5d3SJohn Marino struct dm_list *build_parallel_areas_from_lv(struct cmd_context *cmd, 8186d7f5d3SJohn Marino struct logical_volume *lv); 8286d7f5d3SJohn Marino 8386d7f5d3SJohn Marino #endif 84