2005-10-31 05:37:29 +03:00
/*
2008-01-30 17:00:02 +03:00
* Copyright ( C ) 2001 - 2004 Sistina Software , Inc . All rights reserved .
2005-10-31 05:37:29 +03:00
* 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 ,
2016-01-21 13:49:46 +03:00
* Inc . , 51 Franklin Street , Fifth Floor , Boston , MA 02110 - 1301 USA
2005-10-31 05:37:29 +03:00
*/
# 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 ,
2014-11-27 17:02:13 +03:00
struct processing_handle * handle )
2007-08-31 00:16:01 +04:00
{
2014-11-27 17:02:13 +03:00
struct pvresize_params * params = ( struct pvresize_params * ) handle - > custom_handle ;
2007-08-31 00:16:01 +04:00
2014-11-13 19:40:30 +03:00
if ( ! params ) {
log_error ( INTERNAL_ERROR " Invalid resize params. " ) ;
return ECMD_FAILED ;
}
2007-08-31 00:16:01 +04:00
params - > total + + ;
2005-10-31 05:37:29 +03:00
2016-03-10 22:28:47 +03:00
if ( vg & & vg_is_exported ( vg ) ) {
log_error ( " Volume group %s is exported " , vg - > name ) ;
return ECMD_FAILED ;
}
2015-03-05 23:00:44 +03:00
/*
* Needed to change a property on an orphan PV .
* i . e . the global lock is only needed for orphans .
* Convert sh to ex .
*/
2016-01-16 00:18:25 +03:00
if ( is_orphan ( pv ) ) {
if ( ! lockd_gl ( cmd , " ex " , 0 ) )
return_ECMD_FAILED ;
cmd - > lockd_gl_disable = 1 ;
}
2015-03-05 23:00:44 +03:00
2013-06-29 01:25:28 +04:00
if ( ! pv_resize_single ( cmd , vg , pv , params - > new_size ) )
2013-07-01 13:27:22 +04:00
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 ;
2015-02-13 12:36:06 +03:00
struct processing_handle * handle = NULL ;
2015-02-19 16:03:45 +03:00
int ret ;
2005-10-31 05:37:29 +03:00
if ( ! argc ) {
log_error ( " Please supply physical volume(s) " ) ;
2014-11-28 17:04:25 +03:00
ret = EINVALID_CMD_LINE ;
goto out ;
2005-10-31 05:37:29 +03:00
}
2012-02-28 18:24:57 +04:00
if ( arg_sign_value ( cmd , physicalvolumesize_ARG , SIGN_NONE ) = = SIGN_MINUS ) {
2005-10-31 05:37:29 +03:00
log_error ( " Physical volume size may not be negative " ) ;
2014-11-28 17:04:25 +03:00
ret = EINVALID_CMD_LINE ;
goto out ;
2005-10-31 05:37:29 +03:00
}
params . new_size = arg_uint64_value ( cmd , physicalvolumesize_ARG ,
2007-11-14 03:08:25 +03:00
UINT64_C ( 0 ) ) ;
2005-10-31 05:37:29 +03:00
params . done = 0 ;
params . total = 0 ;
2016-02-22 18:42:03 +03:00
set_pv_notify ( cmd ) ;
2015-02-13 12:36:06 +03:00
if ( ! ( handle = init_processing_handle ( cmd ) ) ) {
log_error ( " Failed to initialize processing handle. " ) ;
ret = ECMD_FAILED ;
goto out ;
}
handle - > custom_handle = & params ;
2016-03-10 22:28:47 +03:00
ret = process_each_pv ( cmd , argc , argv , NULL , 0 , READ_FOR_UPDATE | READ_ALLOW_EXPORTED , handle , _pvresize_single ) ;
2005-10-31 05:37:29 +03:00
config: add silent mode
Accept -q as the short form of --quiet.
Suppress non-essential standard output if -q is given twice.
Treat log/silent in lvm.conf as equivalent to -qq.
Review all log_print messages and change some to
log_print_unless_silent.
When silent, the following commands still produce output:
dumpconfig, lvdisplay, lvmdiskscan, lvs, pvck, pvdisplay,
pvs, version, vgcfgrestore -l, vgdisplay, vgs.
[Needs checking.]
Non-essential messages are shifted from log level 4 to log level 5
for syslog and lvm2_log_fn purposes.
2012-08-25 23:35:48 +04:00
log_print_unless_silent ( " %d physical volume(s) resized / %d physical volume(s) "
" not resized " , params . done , params . total - params . done ) ;
2014-11-28 17:04:25 +03:00
out :
2015-02-13 12:42:21 +03:00
destroy_processing_handle ( cmd , handle ) ;
2005-10-31 05:37:29 +03:00
return ret ;
}