2010-09-30 17:15:42 +04:00
/*
2010-10-01 00:47:18 +04:00
* Copyright ( C ) 2001 - 2004 Sistina Software , Inc . All rights reserved .
* Copyright ( C ) 2004 - 2010 Red Hat , Inc . All rights reserved .
2010-09-30 17:15:42 +04:00
*
* This file is part of LVM2 .
*
* This copyrighted material is made available to anyone wishing to use ,
* modify , copy , or redistribute it subject to the terms and conditions
* of the GNU Lesser General Public License v .2 .1 .
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program ; if not , write to the Free Software Foundation ,
2016-01-21 13:49:46 +03:00
* Inc . , 51 Franklin Street , Fifth Floor , Boston , MA 02110 - 1301 USA
2010-09-30 17:15:42 +04:00
*/
2010-10-25 16:01:59 +04:00
# ifndef _LVM_PV_H
# define _LVM_PV_H
2010-09-30 17:15:42 +04:00
2018-05-14 12:30:20 +03:00
# include "lib/uuid/uuid.h"
2018-06-08 14:31:45 +03:00
# include "device_mapper/all.h"
2012-01-26 02:26:33 +04:00
2010-09-30 17:15:42 +04:00
struct device ;
struct format_type ;
struct volume_group ;
struct physical_volume {
struct id id ;
2011-02-21 15:31:28 +03:00
struct id old_id ; /* Set during pvchange -u. */
2010-09-30 17:15:42 +04:00
struct device * dev ;
const struct format_type * fmt ;
2011-02-21 15:12:32 +03:00
struct format_instance * fid ;
2010-09-30 17:15:42 +04:00
/*
* vg_name and vgid are used before the parent VG struct exists .
* FIXME : Investigate removal / substitution with ' vg ' fields .
*/
const char * vg_name ;
struct id vgid ;
/*
* ' vg ' is set and maintained when the PV belongs to a ' pvs '
* list in a parent VG struct .
*/
struct volume_group * vg ;
uint64_t status ;
uint64_t size ;
2013-05-28 14:37:22 +04:00
/* bootloader area */
uint64_t ba_start ;
uint64_t ba_size ;
2013-02-14 18:35:57 +04:00
2010-09-30 17:15:42 +04:00
/* physical extents */
uint32_t pe_size ;
uint64_t pe_start ;
uint32_t pe_count ;
uint32_t pe_alloc_count ;
unsigned long pe_align ;
unsigned long pe_align_offset ;
2011-06-01 23:29:31 +04:00
/* This is true whenever the represented PV has a label associated. */
uint64_t is_labelled : 1 ;
/* NB. label_sector is valid whenever is_labelled is true */
uint64_t label_sector ;
2010-09-30 17:15:42 +04:00
struct dm_list segments ; /* Ordered pv_segments covering complete PV */
struct dm_list tags ;
} ;
2010-09-30 18:09:22 +04:00
char * pv_fmt_dup ( const struct physical_volume * pv ) ;
2015-09-21 14:38:53 +03:00
char * pv_name_dup ( struct dm_pool * mem , const struct physical_volume * pv ) ;
2010-09-30 17:15:42 +04:00
struct device * pv_dev ( const struct physical_volume * pv ) ;
const char * pv_vg_name ( const struct physical_volume * pv ) ;
2010-09-30 17:52:55 +04:00
char * pv_attr_dup ( struct dm_pool * mem , const struct physical_volume * pv ) ;
2010-09-30 17:15:42 +04:00
const char * pv_dev_name ( const struct physical_volume * pv ) ;
2015-09-21 14:38:53 +03:00
char * pv_uuid_dup ( struct dm_pool * mem , const struct physical_volume * pv ) ;
2010-09-30 18:08:19 +04:00
char * pv_tags_dup ( const struct physical_volume * pv ) ;
2010-09-30 17:15:42 +04:00
uint64_t pv_size ( const struct physical_volume * pv ) ;
uint64_t pv_size_field ( const struct physical_volume * pv ) ;
uint64_t pv_dev_size ( const struct physical_volume * pv ) ;
uint64_t pv_free ( const struct physical_volume * pv ) ;
uint64_t pv_status ( const struct physical_volume * pv ) ;
uint32_t pv_pe_size ( const struct physical_volume * pv ) ;
uint64_t pv_pe_start ( const struct physical_volume * pv ) ;
2013-05-28 14:37:22 +04:00
uint64_t pv_ba_start ( const struct physical_volume * pv ) ;
uint64_t pv_ba_size ( const struct physical_volume * pv ) ;
2010-09-30 17:15:42 +04:00
uint32_t pv_pe_count ( const struct physical_volume * pv ) ;
uint32_t pv_pe_alloc_count ( const struct physical_volume * pv ) ;
2010-09-30 18:09:10 +04:00
uint64_t pv_mda_size ( const struct physical_volume * pv ) ;
2013-07-29 20:52:28 +04:00
struct lvmcache_info ;
uint64_t lvmcache_info_mda_free ( struct lvmcache_info * info ) ;
2010-09-30 18:09:10 +04:00
uint64_t pv_mda_free ( const struct physical_volume * pv ) ;
uint64_t pv_used ( const struct physical_volume * pv ) ;
2010-09-30 17:15:42 +04:00
uint32_t pv_mda_count ( const struct physical_volume * pv ) ;
uint32_t pv_mda_used_count ( const struct physical_volume * pv ) ;
2017-07-20 20:13:32 +03:00
unsigned pv_mda_set_ignored ( const struct physical_volume * pv , unsigned mda_ignored ) ;
2010-09-30 17:15:42 +04:00
int is_orphan ( const struct physical_volume * pv ) ;
int is_missing_pv ( const struct physical_volume * pv ) ;
2016-02-12 12:17:18 +03:00
int is_used_pv ( const struct physical_volume * pv ) ;
2010-09-30 17:15:42 +04:00
int is_pv ( const struct physical_volume * pv ) ;
2013-07-29 20:54:59 +04:00
struct label * pv_label ( const struct physical_volume * pv ) ;
2010-09-30 17:15:42 +04:00
2010-10-25 16:01:59 +04:00
# endif /* _LVM_PV_H */