2001-09-25 16:49:28 +04:00
/*
2004-03-30 23:35:44 +04:00
* Copyright ( C ) 2001 - 2004 Sistina Software , Inc . All rights reserved .
2009-02-09 12:45:49 +03:00
* Copyright ( C ) 2004 - 2009 Red Hat , Inc . All rights reserved .
2001-09-25 16:49:28 +04:00
*
2004-03-30 23:35:44 +04:00
* This file is part of LVM2 .
2001-09-25 16:49:28 +04:00
*
2004-03-30 23:35:44 +04:00
* 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 .
2001-09-25 16:49:28 +04:00
*
2007-08-21 00:55:30 +04:00
* You should have received a copy of the GNU Lesser General Public License
2004-03-30 23:35:44 +04: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
2001-09-25 16:49:28 +04:00
*/
2001-10-01 19:14:39 +04:00
# ifndef _LVM_TOOLLIB_H
# define _LVM_TOOLLIB_H
2001-09-25 16:49:28 +04:00
2007-07-18 19:38:58 +04:00
# include "metadata-exported.h"
2014-11-27 17:02:13 +03:00
# include "report.h"
2002-02-11 23:50:53 +03:00
2013-09-03 18:06:16 +04:00
int become_daemon ( struct cmd_context * cmd , int skip_lvm ) ;
2014-11-27 17:02:13 +03:00
/*
* The " struct processing_handle " is used as a handle for processing
* functions ( process_each_ * and related ) .
*
* The " custom_handle " is any handle used to pass custom data into
* process_each_ * and related functions .
*
* The " internal_report_for_select=0 " makes processing function to
* skip checking the report / selection criteria ( if given on cmd line )
* before executing the action on the item .
*
* The " selection_handle " is only used if " internal_report_for_select=1 " .
*
* Some important notes about selection :
* = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
* In case we ' re processing for display , the selection is directly
* a part of reporting for the display on output so we don ' t need to
* report the item in memory to get the selection result , then dropping
* the report and then reporting the same thing again for it to be
* displayed on output .
* For example , compare these code paths :
*
* - when reporting for display on output :
* _report - > process_each_ * - > . . . - > dm_report_object
* ( Here the dm_report_object does both selection and
* reporting for display on output . )
*
* - for any other processing and reporting for selection :
* process_each_ * - > _select_match_ * - > . . . - > dm_report_object_is_selected
* |
* - - > ( selection result ) - - > . . .
* ( Here the dm_report_object_is_selected just gets
* the selection result and it drops reporting buffer
* immediately . Then based on the selection result ,
* the process_each_ * action on the item is executed
* or not . . . )
*
* Simply , we want to avoid this double reporting when reporting
* for display on output :
* _report - > process_each_ * - > _select_match_ * - > . . . - > dm_report_object_is_selected
* |
* - - > ( selection result ) - > dm_report_object
*
* So whenever the processing action is " to display item on output " , use
* " internal_report_for_select=0 " as report / selection is already
* a part of that reporting for display ( dm_report_object ) .
*/
struct processing_handle {
2016-05-31 13:24:05 +03:00
struct processing_handle * parent ;
2014-11-27 17:02:13 +03:00
int internal_report_for_select ;
2016-03-01 17:22:48 +03:00
int include_historical_lvs ;
2014-11-27 17:02:13 +03:00
struct selection_handle * selection_handle ;
void * custom_handle ;
} ;
2010-04-14 03:57:41 +04:00
typedef int ( * process_single_vg_fn_t ) ( struct cmd_context * cmd ,
const char * vg_name ,
struct volume_group * vg ,
2014-11-27 17:02:13 +03:00
struct processing_handle * handle ) ;
2010-04-14 03:57:41 +04:00
typedef int ( * process_single_pv_fn_t ) ( struct cmd_context * cmd ,
struct volume_group * vg ,
struct physical_volume * pv ,
2014-11-27 17:02:13 +03:00
struct processing_handle * handle ) ;
2013-07-29 20:51:27 +04:00
typedef int ( * process_single_label_fn_t ) ( struct cmd_context * cmd ,
struct label * label ,
2014-11-27 17:02:13 +03:00
struct processing_handle * handle ) ;
2010-04-14 03:57:41 +04:00
typedef int ( * process_single_lv_fn_t ) ( struct cmd_context * cmd ,
struct logical_volume * lv ,
2014-11-27 17:02:13 +03:00
struct processing_handle * handle ) ;
2010-04-14 03:57:41 +04:00
typedef int ( * process_single_seg_fn_t ) ( struct cmd_context * cmd ,
struct lv_segment * seg ,
2014-11-27 17:02:13 +03:00
struct processing_handle * handle ) ;
2010-04-14 03:57:41 +04:00
typedef int ( * process_single_pvseg_fn_t ) ( struct cmd_context * cmd ,
struct volume_group * vg ,
struct pv_segment * pvseg ,
2014-11-27 17:02:13 +03:00
struct processing_handle * handle ) ;
2010-04-14 03:57:41 +04:00
2016-04-29 00:18:20 +03:00
int process_each_vg ( struct cmd_context * cmd ,
int argc , char * * argv ,
const char * one_vgname ,
struct dm_list * use_vgnames ,
uint32_t flags ,
2016-05-03 12:46:28 +03:00
int include_internal ,
2015-12-01 02:00:26 +03:00
struct processing_handle * handle ,
2010-04-14 03:57:41 +04:00
process_single_vg_fn_t process_single_vg ) ;
2001-10-08 22:44:22 +04:00
2016-02-16 23:15:24 +03:00
int process_each_pv ( struct cmd_context * cmd , int argc , char * * argv , const char * vg_name ,
int all_is_set , uint32_t read_flags ,
2014-11-27 17:02:13 +03:00
struct processing_handle * handle ,
process_single_pv_fn_t process_single_pv ) ;
2009-02-09 12:45:49 +03:00
2013-07-29 20:51:27 +04:00
int process_each_label ( struct cmd_context * cmd , int argc , char * * argv ,
2014-11-27 17:02:13 +03:00
struct processing_handle * handle ,
process_single_label_fn_t process_single_label ) ;
2013-07-29 20:51:27 +04:00
2005-04-20 00:58:25 +04:00
int process_each_segment_in_pv ( struct cmd_context * cmd ,
struct volume_group * vg ,
struct physical_volume * pv ,
2014-11-27 17:02:13 +03:00
struct processing_handle * handle ,
2010-04-14 03:57:41 +04:00
process_single_pvseg_fn_t process_single_pvseg ) ;
2002-11-18 17:04:08 +03:00
2002-02-11 23:50:53 +03:00
int process_each_lv ( struct cmd_context * cmd , int argc , char * * argv ,
2016-05-23 21:42:17 +03:00
const char * one_vgname , const char * one_lvname ,
2014-11-27 17:02:13 +03:00
uint32_t flags , struct processing_handle * handle ,
2010-04-14 03:57:41 +04:00
process_single_lv_fn_t process_single_lv ) ;
2001-11-19 18:20:50 +03:00
2002-12-12 23:55:49 +03:00
int process_each_segment_in_lv ( struct cmd_context * cmd ,
2014-11-27 17:02:13 +03:00
struct logical_volume * lv ,
struct processing_handle * handle ,
2010-04-14 03:57:41 +04:00
process_single_seg_fn_t process_single_seg ) ;
2007-08-07 13:06:05 +04:00
2002-02-11 23:50:53 +03:00
int process_each_pv_in_vg ( struct cmd_context * cmd , struct volume_group * vg ,
2014-11-27 17:02:13 +03:00
struct processing_handle * handle ,
process_single_pv_fn_t process_single_pv ) ;
2007-08-07 13:06:05 +04:00
2002-11-18 17:04:08 +03:00
2014-10-07 19:45:45 +04:00
int process_each_lv_in_vg ( struct cmd_context * cmd , struct volume_group * vg ,
struct dm_list * arg_lvnames , const struct dm_list * tagsl ,
2014-11-27 17:02:13 +03:00
int stop_on_error , struct processing_handle * handle ,
2010-04-14 03:57:41 +04:00
process_single_lv_fn_t process_single_lv ) ;
2001-10-08 22:44:22 +04:00
2016-05-31 13:24:05 +03:00
struct processing_handle * init_processing_handle ( struct cmd_context * cmd , struct processing_handle * parent_handle ) ;
2015-02-10 15:46:37 +03:00
int init_selection_handle ( struct cmd_context * cmd , struct processing_handle * handle ,
report_type_t initial_report_type ) ;
2015-02-13 12:42:21 +03:00
void destroy_processing_handle ( struct cmd_context * cmd , struct processing_handle * handle ) ;
2014-11-28 16:46:18 +03:00
2014-11-28 16:34:56 +03:00
int select_match_vg ( struct cmd_context * cmd , struct processing_handle * handle ,
2016-05-30 17:28:47 +03:00
struct volume_group * vg ) ;
2014-11-28 16:34:56 +03:00
int select_match_lv ( struct cmd_context * cmd , struct processing_handle * handle ,
2016-05-30 17:28:47 +03:00
struct volume_group * vg , struct logical_volume * lv ) ;
2014-11-28 16:34:56 +03:00
int select_match_pv ( struct cmd_context * cmd , struct processing_handle * handle ,
2016-05-30 17:28:47 +03:00
struct volume_group * vg , struct physical_volume * pv ) ;
2014-11-24 13:08:41 +03:00
2002-12-20 02:25:55 +03:00
const char * extract_vgname ( struct cmd_context * cmd , const char * lv_name ) ;
2011-02-18 17:47:28 +03:00
const char * skip_dev_dir ( struct cmd_context * cmd , const char * vg_name ,
unsigned * dev_dir_found ) ;
2001-10-29 16:52:23 +03:00
2016-02-19 00:38:23 +03:00
int pvcreate_params_from_args ( struct cmd_context * cmd , struct pvcreate_params * pp ) ;
int pvcreate_each_device ( struct cmd_context * cmd , struct processing_handle * handle , struct pvcreate_params * pp ) ;
2016-02-16 23:15:24 +03:00
2002-01-21 19:05:23 +03:00
/*
* Builds a list of pv ' s from the names in argv . Used in
* lvcreate / extend .
*/
2008-11-04 01:14:30 +03:00
struct dm_list * create_pv_list ( struct dm_pool * mem , struct volume_group * vg , int argc ,
2004-08-18 01:55:23 +04:00
char * * argv , int allocatable_only ) ;
2002-01-21 19:05:23 +03:00
2008-11-04 01:14:30 +03:00
struct dm_list * clone_pv_list ( struct dm_pool * mem , struct dm_list * pvs ) ;
2003-04-25 02:23:24 +04:00
2014-09-12 12:03:12 +04:00
int vgcreate_params_set_defaults ( struct cmd_context * cmd ,
struct vgcreate_params * vp_def ,
2009-11-01 23:02:32 +03:00
struct volume_group * vg ) ;
2009-11-01 23:03:24 +03:00
int vgcreate_params_set_from_args ( struct cmd_context * cmd ,
struct vgcreate_params * vp_new ,
struct vgcreate_params * vp_def ) ;
2013-04-11 15:51:08 +04:00
int lv_change_activate ( struct cmd_context * cmd , struct logical_volume * lv ,
activation_change_t activate ) ;
2008-12-19 17:22:48 +03:00
int lv_refresh ( struct cmd_context * cmd , struct logical_volume * lv ) ;
2008-12-22 12:00:51 +03:00
int vg_refresh_visible ( struct cmd_context * cmd , struct volume_group * vg ) ;
2009-09-30 00:22:35 +04:00
void lv_spawn_background_polling ( struct cmd_context * cmd ,
struct logical_volume * lv ) ;
2010-03-24 01:30:18 +03:00
int get_activation_monitoring_mode ( struct cmd_context * cmd ,
int * monitoring_mode ) ;
2013-03-06 14:58:09 +04:00
2013-06-27 13:22:02 +04:00
int get_pool_params ( struct cmd_context * cmd ,
2014-07-23 00:20:18 +04:00
const struct segment_type * segtype ,
2013-06-27 13:22:02 +04:00
int * passed_args ,
2014-07-23 00:20:18 +04:00
uint64_t * pool_metadata_size ,
2014-10-31 13:52:30 +03:00
int * pool_metadata_spare ,
2012-11-15 17:48:32 +04:00
uint32_t * chunk_size ,
thin_discards_t * discards ,
int * zero ) ;
2013-03-11 15:37:09 +04:00
2016-07-30 04:05:50 +03:00
int get_stripe_params ( struct cmd_context * cmd , const struct segment_type * segtype ,
2016-08-19 15:51:43 +03:00
uint32_t * stripes , uint32_t * stripe_size ,
unsigned * stripes_supplied , unsigned * stripe_size_supplied ) ;
2010-04-13 05:54:32 +04:00
2015-07-23 16:35:12 +03:00
int get_cache_params ( struct cmd_context * cmd ,
2016-04-25 14:39:30 +03:00
cache_mode_t * cache_mode ,
2015-07-23 16:35:12 +03:00
const char * * name ,
struct dm_config_tree * * settings ) ;
2014-11-19 20:39:29 +03:00
2011-01-24 16:38:31 +03:00
int change_tag ( struct cmd_context * cmd , struct volume_group * vg ,
struct logical_volume * lv , struct physical_volume * pv , int arg ) ;
2014-09-27 20:53:08 +04:00
int get_and_validate_major_minor ( const struct cmd_context * cmd ,
const struct format_type * fmt ,
int32_t * major , int32_t * minor ) ;
2014-09-28 14:57:39 +04:00
int validate_lvname_param ( struct cmd_context * cmd , const char * * vg_name ,
const char * * lv_name ) ;
2014-10-08 13:14:33 +04:00
int validate_restricted_lvname_param ( struct cmd_context * cmd , const char * * vg_name ,
const char * * lv_name ) ;
2014-09-28 14:57:39 +04:00
2014-10-07 19:45:45 +04:00
int lvremove_single ( struct cmd_context * cmd , struct logical_volume * lv ,
2014-11-27 17:02:13 +03:00
struct processing_handle * handle __attribute__ ( ( unused ) ) ) ;
2014-10-07 19:45:45 +04:00
2001-09-25 16:49:28 +04:00
# endif