2004-04-16 20:12:04 +04:00
/*
* Copyright ( C ) 2004 Luca Berra
2007-08-21 00:55:30 +04:00
* Copyright ( C ) 2004 - 2006 Red Hat , Inc . All rights reserved .
2004-04-16 20:12:04 +04:00
*
* 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
* of the GNU Lesser General Public License v .2 .1 .
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program ; if not , write to the Free Software Foundation ,
* Inc . , 59 Temple Place , Suite 330 , Boston , MA 02111 - 1307 USA
*/
# include "lib.h"
2013-08-14 02:26:58 +04:00
# include "filter.h"
2004-04-16 20:12:04 +04:00
2013-11-13 17:56:29 +04:00
# ifdef __linux__
2004-04-16 20:12:04 +04:00
2015-09-03 15:19:48 +03:00
# define MSG_SKIPPING "%s: Skipping md component device"
2010-07-09 19:34:40 +04:00
static int _ignore_md ( struct dev_filter * f __attribute__ ( ( unused ) ) ,
2008-01-31 15:19:36 +03:00
struct device * dev )
2004-04-16 20:12:04 +04:00
{
2004-11-19 22:25:07 +03:00
int ret ;
if ( ! md_filtering ( ) )
return 1 ;
ret = dev_is_md ( dev , NULL ) ;
2004-04-16 20:12:04 +04:00
2004-11-18 23:02:21 +03:00
if ( ret = = 1 ) {
2015-09-03 15:19:48 +03:00
if ( dev - > ext . src = = DEV_EXT_NONE )
log_debug_devs ( MSG_SKIPPING , dev_name ( dev ) ) ;
else
log_debug_devs ( MSG_SKIPPING " [%s:%p] " , dev_name ( dev ) ,
dev_ext_name ( dev ) , dev - > ext . handle ) ;
2004-04-16 20:12:04 +04:00
return 0 ;
}
2004-11-18 23:02:21 +03:00
if ( ret < 0 ) {
2013-01-08 02:30:29 +04:00
log_debug_devs ( " %s: Skipping: error in md component detection " ,
dev_name ( dev ) ) ;
2004-04-16 20:12:04 +04:00
return 0 ;
}
return 1 ;
}
static void _destroy ( struct dev_filter * f )
{
2010-09-22 05:36:13 +04:00
if ( f - > use_count )
2010-09-22 05:50:38 +04:00
log_error ( INTERNAL_ERROR " Destroying md filter while in use %u times. " , f - > use_count ) ;
2010-09-22 05:36:13 +04:00
2005-10-17 03:03:59 +04:00
dm_free ( f ) ;
2004-04-16 20:12:04 +04:00
}
2013-06-12 14:08:56 +04:00
struct dev_filter * md_filter_create ( struct dev_types * dt )
2004-04-16 20:12:04 +04:00
{
struct dev_filter * f ;
2012-08-18 20:59:07 +04:00
if ( ! ( f = dm_zalloc ( sizeof ( * f ) ) ) ) {
2004-04-16 20:12:04 +04:00
log_error ( " md filter allocation failed " ) ;
return NULL ;
}
f - > passes_filter = _ignore_md ;
f - > destroy = _destroy ;
2010-09-22 05:36:13 +04:00
f - > use_count = 0 ;
2013-06-12 14:08:56 +04:00
f - > private = dt ;
2004-04-16 20:12:04 +04:00
2013-08-14 02:26:58 +04:00
log_debug_devs ( " MD filter initialised. " ) ;
2004-04-16 20:12:04 +04:00
return f ;
}
# else
2013-06-12 14:08:56 +04:00
struct dev_filter * md_filter_create ( struct dev_types * dt )
2004-04-16 20:12:04 +04:00
{
return NULL ;
}
# endif