2010-08-20 03:08:18 +04:00
/*
* Copyright ( C ) 2010 Red Hat , Inc . 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
* 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 ,
2016-01-21 13:49:46 +03:00
* Inc . , 51 Franklin Street , Fifth Floor , Boston , MA 02110 - 1301 USA
2010-08-20 03:08:18 +04:00
*/
2018-05-14 12:30:20 +03:00
# include "lib/misc/lib.h"
# include "lib/device/dev-type.h"
2010-08-20 03:08:18 +04:00
# define LUKS_SIGNATURE "LUKS\xba\xbe"
# define LUKS_SIGNATURE_SIZE 6
devices: rework libudev usage
related to config settings:
obtain_device_info_from_udev (controls if lvm gets
a list of devices from readdir /dev or from libudev)
external_device_info_source (controls if lvm asks
libudev for device information)
. Make the obtain_device_list_from_udev setting
affect only the choice of readdir /dev vs libudev.
The setting no longer controls if udev is used for
device type checks.
. Change obtain_device_list_from_udev default to 0.
This helps avoid boot timeouts due to slow libudev
queries, avoids reported failures from
udev_enumerate_scan_devices, and avoids delays from
"device not initialized in udev database" errors.
Even without errors, for a system booting with 1024 PVs,
lvm2-pvscan times improve from about 100 sec to 15 sec,
and the pvscan command from about 64 sec to about 4 sec.
. For external_device_info_source="none", remove all
libudev device info queries, and use only lvm
native device info.
. For external_device_info_source="udev", first check
lvm native device info, then check libudev info.
. Remove sleep/retry loop when attempting libudev
queries for device info. udev info will simply
be skipped if it's not immediately available.
. Only set up a libdev connection if it will be used by
obtain_device_list_from_udev/external_device_info_source.
. For native multipath component detection, use
/etc/multipath/wwids. If a device has a wwid
matching an entry in the wwids file, then it's
considered a multipath component. This is
necessary to natively detect multipath
components when the mpath device is not set up.
2021-06-09 01:12:09 +03:00
int dev_is_luks ( struct cmd_context * cmd , struct device * dev , uint64_t * offset_found , int full )
2010-08-20 03:08:18 +04:00
{
char buf [ LUKS_SIGNATURE_SIZE ] ;
int ret = - 1 ;
2018-05-04 01:12:07 +03:00
if ( ! scan_bcache )
return - EAGAIN ;
2010-08-20 03:08:18 +04:00
2013-11-06 18:09:29 +04:00
if ( offset_found )
* offset_found = 0 ;
2010-08-20 03:08:18 +04:00
2018-05-04 01:12:07 +03:00
if ( ! dev_read_bytes ( dev , 0 , LUKS_SIGNATURE_SIZE , buf ) )
2010-08-20 03:08:18 +04:00
goto_out ;
ret = memcmp ( buf , LUKS_SIGNATURE , LUKS_SIGNATURE_SIZE ) ? 0 : 1 ;
out :
return ret ;
}