2002-02-08 14:30:37 +00:00
/*
2004-03-30 19:35:44 +00:00
* Copyright ( C ) 2001 - 2004 Sistina Software , Inc . All rights reserved .
2007-08-20 20:55:30 +00:00
* Copyright ( C ) 2004 - 2007 Red Hat , Inc . All rights reserved .
2002-02-08 14:30:37 +00:00
*
2004-03-30 19:35:44 +00:00
* This file is part of LVM2 .
2002-02-08 14:30:37 +00:00
*
2004-03-30 19:35:44 +00: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-20 20:55:30 +00:00
* of the GNU Lesser General Public License v .2 .1 .
2004-03-30 19:35:44 +00:00
*
2007-08-20 20:55:30 +00:00
* You should have received a copy of the GNU Lesser General Public License
2004-03-30 19:35:44 +00:00
* along with this program ; if not , write to the Free Software Foundation ,
* Inc . , 59 Temple Place , Suite 330 , Boston , MA 02111 - 1307 USA
2002-02-08 14:30:37 +00:00
*/
2006-05-09 21:23:51 +00:00
# ifndef _LVM_LOCKING_H
# define _LVM_LOCKING_H
2002-02-08 14:30:37 +00:00
# include "uuid.h"
# include "config.h"
2006-05-16 16:48:31 +00:00
int init_locking ( int type , struct cmd_context * cmd ) ;
2002-02-08 14:30:37 +00:00
void fin_locking ( void ) ;
2003-05-06 12:03:13 +00:00
void reset_locking ( void ) ;
2003-11-21 19:54:40 +00:00
int vg_write_lock_held ( void ) ;
2005-03-21 22:55:12 +00:00
int locking_is_clustered ( void ) ;
2002-02-08 14:30:37 +00:00
/*
2002-02-11 11:43:17 +00:00
* LCK_VG :
2008-05-09 19:26:58 +00:00
* Lock / unlock on - disk volume group data .
* Use VG_ORPHANS to lock all orphan PVs .
* Use VG_GLOBAL as a global lock and to wipe the internal cache .
* char * vol holds volume group name .
* Set the LCK_CACHE flag to invalidate ' vol ' in the internal cache .
2002-02-08 14:30:37 +00:00
*
2002-02-11 11:43:17 +00:00
* LCK_LV :
2002-02-08 14:30:37 +00:00
* Lock / unlock an individual logical volume
2002-03-11 15:08:39 +00:00
* char * vol holds lvid
2002-02-08 14:30:37 +00:00
*/
2007-08-22 14:38:18 +00:00
int lock_vol ( struct cmd_context * cmd , const char * vol , uint32_t flags ) ;
2002-02-08 14:30:37 +00:00
2008-05-09 19:26:58 +00:00
/*
* Internal locking representation .
* LCK_VG : Uses prefix V_ unless the vol begins with # ( i . e . # global or # orphans )
* or the LCK_CACHE flag is set when it uses the prefix P_ .
* If LCK_CACHE is set , we do not take out a real lock .
*/
2002-11-01 19:57:25 +00:00
/*
* Does the LVM1 driver have this VG active ?
*/
int check_lvm1_vg_inactive ( struct cmd_context * cmd , const char * vgname ) ;
2002-02-08 14:30:37 +00:00
/*
2002-04-04 13:31:21 +00:00
* Lock type - these numbers are the same as VMS and the IBM DLM
2002-02-08 14:30:37 +00:00
*/
2007-08-22 14:38:18 +00:00
# define LCK_TYPE_MASK 0x00000007U
2002-04-04 13:31:21 +00:00
2007-08-22 14:38:18 +00:00
# define LCK_NULL 0x00000000U /* LCK$_NLMODE */
# define LCK_READ 0x00000001U /* LCK$_CRMODE */
2002-11-01 19:57:25 +00:00
/* LCK$_CWMODE */
2007-08-22 14:38:18 +00:00
# define LCK_PREAD 0x00000003U /* LCK$_PRMODE */
# define LCK_WRITE 0x00000004U /* LCK$_PWMODE */
# define LCK_EXCL 0x00000005U /* LCK$_EXMODE */
# define LCK_UNLOCK 0x00000006U /* This is ours */
2002-02-08 14:30:37 +00:00
/*
* Lock scope
*/
2007-08-22 14:38:18 +00:00
# define LCK_SCOPE_MASK 0x00000008U
# define LCK_VG 0x00000000U
# define LCK_LV 0x00000008U
2002-02-08 14:30:37 +00:00
/*
* Lock bits
*/
2007-08-22 14:38:18 +00:00
# define LCK_NONBLOCK 0x00000010U /* Don't block waiting for lock? */
# define LCK_HOLD 0x00000020U /* Hold lock when lock_vol returns? */
# define LCK_LOCAL 0x00000040U /* Don't propagate to other nodes */
# define LCK_CLUSTER_VG 0x00000080U /* VG is clustered */
2008-05-09 19:26:58 +00:00
# define LCK_CACHE 0x00000100U /* Operation on cache only using P_ lock */
2002-02-08 14:30:37 +00:00
2006-03-09 22:34:13 +00:00
/*
* Additional lock bits for cluster communication
*/
2007-08-22 14:38:18 +00:00
# define LCK_MIRROR_NOSYNC_MODE 0x00000002U /* Mirrors don't require sync */
# define LCK_DMEVENTD_MONITOR_MODE 0x00000004U /* Register with dmeventd */
2006-05-12 19:16:48 +00:00
2007-08-23 15:02:26 +00:00
/*
* Special cases of VG locks .
*/
# define VG_ORPHANS "#orphans"
# define VG_GLOBAL "#global"
2006-03-09 22:34:13 +00:00
2002-02-27 12:26:41 +00:00
/*
* Common combinations
*/
2007-11-15 21:30:52 +00:00
# define LCK_NONE (LCK_VG | LCK_NULL)
2007-11-15 02:55:22 +00:00
2002-03-05 20:03:09 +00:00
# define LCK_VG_READ (LCK_VG | LCK_READ | LCK_HOLD)
# define LCK_VG_WRITE (LCK_VG | LCK_WRITE | LCK_HOLD)
2002-04-04 11:18:45 +00:00
# define LCK_VG_UNLOCK (LCK_VG | LCK_UNLOCK)
2008-04-15 14:46:19 +00:00
# define LCK_VG_DROP_CACHE (LCK_VG | LCK_WRITE | LCK_CACHE)
2002-02-27 12:26:41 +00:00
2004-05-05 12:03:07 +00:00
# define LCK_LV_EXCLUSIVE (LCK_LV | LCK_EXCL | LCK_NONBLOCK)
# define LCK_LV_SUSPEND (LCK_LV | LCK_WRITE | LCK_NONBLOCK)
2004-03-26 21:46:01 +00:00
# define LCK_LV_RESUME (LCK_LV | LCK_UNLOCK | LCK_NONBLOCK)
2004-05-05 12:03:07 +00:00
# define LCK_LV_ACTIVATE (LCK_LV | LCK_READ | LCK_NONBLOCK)
# define LCK_LV_DEACTIVATE (LCK_LV | LCK_NULL | LCK_NONBLOCK)
2002-02-27 12:26:41 +00:00
2005-08-15 13:24:46 +00:00
# define LCK_LV_CLUSTERED(lv) \
2008-04-10 17:09:32 +00:00
( vg_is_clustered ( ( lv ) - > vg ) ? LCK_CLUSTER_VG : 0 )
2005-08-15 13:24:46 +00:00
# define lock_lv_vol(cmd, lv, flags) \
lock_vol ( cmd , ( lv ) - > lvid . s , flags | LCK_LV_CLUSTERED ( lv ) )
2002-03-11 15:08:39 +00:00
# define unlock_vg(cmd, vol) lock_vol(cmd, vol, LCK_VG_UNLOCK)
2004-03-26 20:49:35 +00:00
2005-08-15 13:24:46 +00:00
# define resume_lv(cmd, lv) lock_lv_vol(cmd, lv, LCK_LV_RESUME)
# define suspend_lv(cmd, lv) lock_lv_vol(cmd, lv, LCK_LV_SUSPEND | LCK_HOLD)
# define deactivate_lv(cmd, lv) lock_lv_vol(cmd, lv, LCK_LV_DEACTIVATE)
# define activate_lv(cmd, lv) lock_lv_vol(cmd, lv, LCK_LV_ACTIVATE | LCK_HOLD)
2005-08-15 12:00:04 +00:00
# define activate_lv_excl(cmd, lv) \
2005-08-15 13:24:46 +00:00
lock_lv_vol ( cmd , lv , LCK_LV_EXCLUSIVE | LCK_HOLD )
2005-08-15 12:00:04 +00:00
# define activate_lv_local(cmd, lv) \
2005-08-15 13:24:46 +00:00
lock_lv_vol ( cmd , lv , LCK_LV_ACTIVATE | LCK_HOLD | LCK_LOCAL )
2005-08-15 12:00:04 +00:00
# define deactivate_lv_local(cmd, lv) \
2005-08-15 13:24:46 +00:00
lock_lv_vol ( cmd , lv , LCK_LV_DEACTIVATE | LCK_LOCAL )
2008-04-15 14:46:19 +00:00
# define drop_cached_metadata(vg) \
lock_vol ( ( vg ) - > cmd , ( vg ) - > name , LCK_VG_DROP_CACHE )
2004-05-05 12:03:07 +00:00
2004-03-26 20:49:35 +00:00
/* Process list of LVs */
2008-11-03 22:14:30 +00:00
int suspend_lvs ( struct cmd_context * cmd , struct dm_list * lvs ) ;
int resume_lvs ( struct cmd_context * cmd , struct dm_list * lvs ) ;
int activate_lvs ( struct cmd_context * cmd , struct dm_list * lvs , unsigned exclusive ) ;
2004-03-26 20:49:35 +00:00
2007-06-15 20:46:04 +00:00
/* Interrupt handling */
void sigint_clear ( void ) ;
void sigint_allow ( void ) ;
void sigint_restore ( void ) ;
int sigint_caught ( void ) ;
2007-06-15 10:11:14 +00:00
2006-05-09 21:23:51 +00:00
# endif