2005-10-31 05:37:29 +03:00
/*
* Copyright ( C ) 2001 - 2004 Sistina Software , Inc . All rights reserved .
* Copyright ( C ) 2004 - 2005 Red Hat , Inc . All rights reserved .
* Copyright ( C ) 2005 Zak Kipling . 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
2007-08-21 00:55:30 +04:00
* of the GNU Lesser General Public License v .2 .1 .
2005-10-31 05:37:29 +03:00
*
2007-08-21 00:55:30 +04:00
* You should have received a copy of the GNU Lesser General Public License
2005-10-31 05:37:29 +03:00
* along with this program ; if not , write to the Free Software Foundation ,
* Inc . , 59 Temple Place , Suite 330 , Boston , MA 02111 - 1307 USA
*/
# include "tools.h"
struct pvresize_params {
uint64_t new_size ;
unsigned done ;
unsigned total ;
} ;
2007-08-31 00:16:01 +04:00
static int _pvresize_single ( struct cmd_context * cmd ,
struct volume_group * vg ,
struct physical_volume * pv ,
void * handle )
{
struct pvresize_params * params = ( struct pvresize_params * ) handle ;
params - > total + + ;
2005-10-31 05:37:29 +03:00
2007-08-31 00:16:01 +04:00
if ( ! pv_resize_single ( cmd , vg , pv , params - > new_size ) )
return ECMD_FAILED ;
2005-10-31 05:37:29 +03:00
params - > done + + ;
2007-08-31 00:16:01 +04:00
return ECMD_PROCESSED ;
2005-10-31 05:37:29 +03:00
}
int pvresize ( struct cmd_context * cmd , int argc , char * * argv )
{
struct pvresize_params params ;
int ret ;
if ( ! argc ) {
log_error ( " Please supply physical volume(s) " ) ;
return EINVALID_CMD_LINE ;
}
if ( arg_sign_value ( cmd , physicalvolumesize_ARG , 0 ) = = SIGN_MINUS ) {
log_error ( " Physical volume size may not be negative " ) ;
return 0 ;
}
params . new_size = arg_uint64_value ( cmd , physicalvolumesize_ARG ,
UINT64_C ( 0 ) ) * 2 ;
params . done = 0 ;
params . total = 0 ;
ret = process_each_pv ( cmd , argc , argv , NULL , & params , _pvresize_single ) ;
log_print ( " %d physical volume(s) resized / %d physical volume(s) "
" not resized " , params . done , params . total - params . done ) ;
return ret ;
}