2009-07-24 03:40:05 +04:00
/*
* Copyright ( C ) 2008 , 2009 Red Hat , Inc . All rights reserved .
*
* 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 ,
* Inc . , 59 Temple Place , Suite 330 , Boston , MA 02111 - 1307 USA
*/
# include "lib.h"
2010-09-30 18:07:47 +04:00
# include "metadata.h"
2009-07-24 03:40:05 +04:00
# include "lvm-string.h"
2010-10-25 18:08:55 +04:00
# include "lvm_misc.h"
2010-12-15 02:20:58 +03:00
# include "lvm2app.h"
2009-07-24 03:40:05 +04:00
2010-04-19 19:22:24 +04:00
const char * lvm_pv_get_uuid ( const pv_t pv )
2009-07-24 03:40:05 +04:00
{
2010-09-30 18:07:47 +04:00
return pv_uuid_dup ( pv ) ;
2009-07-24 03:40:05 +04:00
}
2010-04-19 19:22:24 +04:00
const char * lvm_pv_get_name ( const pv_t pv )
2009-07-24 03:40:05 +04:00
{
2010-04-19 19:22:24 +04:00
return dm_pool_strndup ( pv - > vg - > vgmem ,
( const char * ) pv_dev_name ( pv ) , NAME_LEN + 1 ) ;
2009-07-24 03:40:05 +04:00
}
2009-08-13 16:18:15 +04:00
uint64_t lvm_pv_get_mda_count ( const pv_t pv )
2009-07-26 17:06:59 +04:00
{
return ( uint64_t ) pv_mda_count ( pv ) ;
}
2009-07-28 01:00:50 +04:00
2010-02-14 06:21:37 +03:00
uint64_t lvm_pv_get_dev_size ( const pv_t pv )
{
2010-02-16 03:27:01 +03:00
return ( uint64_t ) SECTOR_SIZE * pv_dev_size ( pv ) ;
2010-02-14 06:21:37 +03:00
}
uint64_t lvm_pv_get_size ( const pv_t pv )
{
2010-02-16 03:27:01 +03:00
return ( uint64_t ) SECTOR_SIZE * pv_size_field ( pv ) ;
2010-02-14 06:21:37 +03:00
}
uint64_t lvm_pv_get_free ( const pv_t pv )
{
2010-02-16 03:27:01 +03:00
return ( uint64_t ) SECTOR_SIZE * pv_free ( pv ) ;
2010-02-14 06:21:37 +03:00
}
2010-10-25 18:08:55 +04:00
struct lvm_property_value lvm_pv_get_property ( const pv_t pv , const char * name )
{
2010-11-17 23:12:39 +03:00
return get_property ( pv , NULL , NULL , NULL , NULL , name ) ;
}
struct lvm_property_value lvm_pvseg_get_property ( const pvseg_t pvseg ,
const char * name )
{
return get_property ( NULL , NULL , NULL , NULL , pvseg , name ) ;
2010-10-25 18:08:55 +04:00
}
2010-11-17 23:10:42 +03:00
struct dm_list * lvm_pv_list_pvsegs ( pv_t pv )
{
struct dm_list * list ;
pvseg_list_t * pvseg ;
struct pv_segment * pvl ;
if ( dm_list_empty ( & pv - > segments ) )
return NULL ;
if ( ! ( list = dm_pool_zalloc ( pv - > vg - > vgmem , sizeof ( * list ) ) ) ) {
log_errno ( ENOMEM , " Memory allocation fail for dm_list. " ) ;
return NULL ;
}
dm_list_init ( list ) ;
dm_list_iterate_items ( pvl , & pv - > segments ) {
if ( ! ( pvseg = dm_pool_zalloc ( pv - > vg - > vgmem , sizeof ( * pvseg ) ) ) ) {
log_errno ( ENOMEM ,
" Memory allocation fail for lvm_pvseg_list. " ) ;
return NULL ;
}
pvseg - > pvseg = pvl ;
dm_list_add ( list , & pvseg - > list ) ;
}
return list ;
}
2010-11-25 17:33:44 +03:00
pv_t lvm_pv_from_name ( vg_t vg , const char * name )
{
struct pv_list * pvl ;
dm_list_iterate_items ( pvl , & vg - > pvs ) {
if ( ! strcmp ( name , pv_dev_name ( pvl - > pv ) ) )
return pvl - > pv ;
}
return NULL ;
}
2010-11-25 17:34:51 +03:00
pv_t lvm_pv_from_uuid ( vg_t vg , const char * uuid )
{
struct pv_list * pvl ;
struct id id ;
if ( strlen ( uuid ) < ID_LEN ) {
log_errno ( EINVAL , " Invalid UUID string length " ) ;
return NULL ;
}
if ( strlen ( uuid ) > = ID_LEN ) {
if ( ! id_read_format ( & id , uuid ) ) {
log_errno ( EINVAL , " Invalid UUID format " ) ;
return NULL ;
}
}
dm_list_iterate_items ( pvl , & vg - > pvs ) {
if ( id_equal ( & id , & pvl - > pv - > id ) )
return pvl - > pv ;
}
return NULL ;
}
2010-11-25 17:33:44 +03:00
2009-08-13 16:18:15 +04:00
int lvm_pv_resize ( const pv_t pv , uint64_t new_size )
2009-07-28 01:00:50 +04:00
{
/* FIXME: add pv resize code here */
2009-07-28 01:03:15 +04:00
log_error ( " NOT IMPLEMENTED YET " ) ;
2009-07-28 01:00:50 +04:00
return - 1 ;
}