2001-10-01 19:29:52 +00:00
/*
2004-03-30 19:35:44 +00:00
* Copyright ( C ) 2001 - 2004 Sistina Software , Inc . All rights reserved .
2012-03-12 14:40:41 +00:00
* Copyright ( C ) 2004 - 2012 Red Hat , Inc . All rights reserved .
2001-10-01 19:29:52 +00:00
*
2004-03-30 19:35:44 +00:00
* This file is part of LVM2 .
2001-10-01 19:29:52 +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 .
2001-10-01 19:29:52 +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
2001-10-01 19:29:52 +00:00
*/
2002-11-18 14:01:16 +00:00
# include "lib.h"
2001-10-01 19:29:52 +00:00
# include "filter.h"
2013-08-13 23:26:58 +01:00
static int _passes_partitioned_filter ( struct dev_filter * f , struct device * dev )
2001-10-01 19:29:52 +00:00
{
2013-06-12 12:08:56 +02:00
struct dev_types * dt = ( struct dev_types * ) f - > private ;
2011-11-11 16:59:30 +00:00
2013-06-12 12:08:56 +02:00
if ( dev_is_partitioned ( dt , dev ) ) {
2014-09-03 15:49:36 +02:00
log_debug_devs ( " %s: Skipping: Partition table signature found [%s:%p] " ,
dev_name ( dev ) , dev_ext_name ( dev ) , dev - > ext . handle ) ;
return 0 ;
2004-11-23 11:44:04 +00:00
}
2001-10-23 12:33:57 +00:00
2014-09-03 15:49:36 +02:00
return 1 ;
2001-10-01 19:29:52 +00:00
}
2013-08-13 23:26:58 +01:00
static void _partitioned_filter_destroy ( struct dev_filter * f )
2012-03-12 14:40:41 +00:00
{
if ( f - > use_count )
2013-08-13 23:26:58 +01:00
log_error ( INTERNAL_ERROR " Destroying partitioned filter while in use %u times. " , f - > use_count ) ;
2012-03-12 14:40:41 +00:00
dm_free ( f ) ;
}
2013-08-13 23:26:58 +01:00
struct dev_filter * partitioned_filter_create ( struct dev_types * dt )
2002-12-03 16:20:38 +00:00
{
struct dev_filter * f ;
2012-08-18 18:59:07 +02:00
if ( ! ( f = dm_zalloc ( sizeof ( struct dev_filter ) ) ) ) {
2013-08-13 23:26:58 +01:00
log_error ( " Partitioned filter allocation failed " ) ;
2002-12-03 16:20:38 +00:00
return NULL ;
}
2013-08-13 23:26:58 +01:00
f - > passes_filter = _passes_partitioned_filter ;
f - > destroy = _partitioned_filter_destroy ;
2010-09-22 01:36:13 +00:00
f - > use_count = 0 ;
2013-06-12 12:08:56 +02:00
f - > private = dt ;
2002-12-03 16:20:38 +00:00
2013-08-13 23:26:58 +01:00
log_debug_devs ( " Partitioned filter initialised. " ) ;
2002-12-03 16:20:38 +00:00
return f ;
}