mirror of
git://sourceware.org/git/lvm2.git
synced 2024-12-21 13:34:40 +03:00
Replace PV_MIN_SIZE with function pv_min_size()
Add configurable option to define minimal size of of block device usable as a PV. pv_min_size() is added to lvm-globals and it's being initialized through _process_config. Macro PV_MIN_SIZE is unused and removed. New define DEFAULT_PV_MIN_SIZE_KB is added to lvm-global and unlike PV_MIN_SIZE it uses KB units. Should help users with various slow devices attached to the system, which cannot be easily filtered out (like FDD on /dev/sdX): https://bugzilla.redhat.com/show_bug.cgi?id=644578
This commit is contained in:
parent
9dd091e4f4
commit
794e94fe16
@ -1,5 +1,6 @@
|
||||
Version 2.02.85 -
|
||||
===================================
|
||||
Add configurable pv_min_size to select block devices by its size.
|
||||
Add function to read 64bit ints from config find_config_tree_int64.
|
||||
Fix to make resuming exclusive cluster mirror use local target type.
|
||||
|
||||
|
@ -144,6 +144,14 @@ devices {
|
||||
|
||||
# Allow use of pvcreate --uuid without requiring --restorefile.
|
||||
require_restorefile_with_uuid = 1
|
||||
|
||||
# Minimal size (in KB) of the block device which can be used as a PV.
|
||||
# In clustered environment all nodes have to use the same value.
|
||||
# Any value smaller then 512KB is ignored.
|
||||
pv_min_size = 512
|
||||
|
||||
# Example: Ignore devices smaller then 2MB (i.e. floppy drives).
|
||||
# pv_min_size = 2048
|
||||
}
|
||||
|
||||
# This section allows you to configure the way in which LVM selects
|
||||
|
@ -205,6 +205,7 @@ static int _process_config(struct cmd_context *cmd)
|
||||
struct stat st;
|
||||
const struct config_node *cn;
|
||||
const struct config_value *cv;
|
||||
int64_t pv_min_kb;
|
||||
|
||||
/* umask */
|
||||
cmd->default_settings.umask = find_config_tree_int(cmd,
|
||||
@ -318,6 +319,15 @@ static int _process_config(struct cmd_context *cmd)
|
||||
cmd->metadata_read_only = find_config_tree_int(cmd, "global/metadata_read_only",
|
||||
DEFAULT_METADATA_READ_ONLY);
|
||||
|
||||
pv_min_kb = find_config_tree_int64(cmd, "devices/pv_min_size", DEFAULT_PV_MIN_SIZE_KB);
|
||||
if (pv_min_kb < DEFAULT_PV_MIN_SIZE_KB) {
|
||||
log_warn("Ignoring too small pv_min_size %" PRId64 "KB, using default %dKB.",
|
||||
pv_min_kb, DEFAULT_PV_MIN_SIZE_KB);
|
||||
pv_min_kb = DEFAULT_PV_MIN_SIZE_KB;
|
||||
}
|
||||
/* lvm internally works with device size in 512b sectors */
|
||||
init_pv_min_size((uint64_t)pv_min_kb * (1024 >> SECTOR_SHIFT));
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
@ -1113,7 +1123,6 @@ static void _init_globals(struct cmd_context *cmd)
|
||||
{
|
||||
init_full_scan_done(0);
|
||||
init_mirror_in_sync(0);
|
||||
|
||||
}
|
||||
|
||||
/* Entry point */
|
||||
|
@ -158,7 +158,7 @@ static int _passes_lvm_type_device_filter(struct dev_filter *f __attribute__((un
|
||||
goto out;
|
||||
}
|
||||
|
||||
if (size < PV_MIN_SIZE) {
|
||||
if (size < pv_min_size()) {
|
||||
log_debug("%s: Skipping: Too small to hold a PV", name);
|
||||
goto out;
|
||||
}
|
||||
|
@ -33,7 +33,6 @@
|
||||
#define STRIPE_SIZE_MIN ( (unsigned) lvm_getpagesize() >> SECTOR_SHIFT) /* PAGESIZE in sectors */
|
||||
#define STRIPE_SIZE_MAX ( 512L * 1024L >> SECTOR_SHIFT) /* 512 KB in sectors */
|
||||
#define STRIPE_SIZE_LIMIT ((UINT_MAX >> 2) + 1)
|
||||
#define PV_MIN_SIZE ( 512L * 1024L >> SECTOR_SHIFT) /* 512 KB in sectors */
|
||||
#define MAX_RESTRICTED_LVS 255 /* Used by FMT_RESTRICTED_LVIDS */
|
||||
|
||||
/* Layer suffix */
|
||||
|
@ -1626,9 +1626,9 @@ struct physical_volume *pv_create(const struct cmd_context *cmd,
|
||||
pv->size = size;
|
||||
}
|
||||
|
||||
if (pv->size < PV_MIN_SIZE) {
|
||||
log_error("%s: Size must exceed minimum of %ld sectors.",
|
||||
pv_dev_name(pv), PV_MIN_SIZE);
|
||||
if (pv->size < pv_min_size()) {
|
||||
log_error("%s: Size must exceed minimum of %" PRIu64 " sectors.",
|
||||
pv_dev_name(pv), pv_min_size());
|
||||
goto bad;
|
||||
}
|
||||
|
||||
|
@ -32,7 +32,6 @@
|
||||
//#define STRIPE_SIZE_MIN ( (unsigned) lvm_getpagesize() >> SECTOR_SHIFT) /* PAGESIZE in sectors */
|
||||
//#define STRIPE_SIZE_MAX ( 512L * 1024L >> SECTOR_SHIFT) /* 512 KB in sectors */
|
||||
//#define STRIPE_SIZE_LIMIT ((UINT_MAX >> 2) + 1)
|
||||
//#define PV_MIN_SIZE ( 512L * 1024L >> SECTOR_SHIFT) /* 512 KB in sectors */
|
||||
//#define MAX_RESTRICTED_LVS 255 /* Used by FMT_RESTRICTED_LVIDS */
|
||||
#define MIRROR_LOG_OFFSET 2 /* sectors */
|
||||
#define VG_MEMPOOL_CHUNK 10240 /* in bytes, hint only */
|
||||
|
@ -19,6 +19,7 @@
|
||||
#include "lvm-string.h"
|
||||
#include "lvm-file.h"
|
||||
#include "defaults.h"
|
||||
#include "metadata-exported.h"
|
||||
|
||||
#include <stdarg.h>
|
||||
|
||||
@ -42,6 +43,7 @@ static unsigned _is_static = 0;
|
||||
static int _udev_checking = 1;
|
||||
static char _sysfs_dir_path[PATH_MAX] = "";
|
||||
static int _dev_disable_after_error_count = DEFAULT_DISABLE_AFTER_ERROR_COUNT;
|
||||
static uint64_t _pv_min_size = (DEFAULT_PV_MIN_SIZE_KB * 1024L >> SECTOR_SHIFT);
|
||||
|
||||
void init_verbose(int level)
|
||||
{
|
||||
@ -128,6 +130,11 @@ void init_dev_disable_after_error_count(int value)
|
||||
_dev_disable_after_error_count = value;
|
||||
}
|
||||
|
||||
void init_pv_min_size(uint64_t sectors)
|
||||
{
|
||||
_pv_min_size = sectors;
|
||||
}
|
||||
|
||||
void set_cmd_name(const char *cmd)
|
||||
{
|
||||
strncpy(_cmd_name, cmd, sizeof(_cmd_name));
|
||||
@ -247,3 +254,8 @@ int dev_disable_after_error_count(void)
|
||||
{
|
||||
return _dev_disable_after_error_count;
|
||||
}
|
||||
|
||||
uint64_t pv_min_size(void)
|
||||
{
|
||||
return _pv_min_size;
|
||||
}
|
||||
|
@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Copyright (C) 2001-2004 Sistina Software, Inc. All rights reserved.
|
||||
* Copyright (C) 2004-2007 Red Hat, Inc. All rights reserved.
|
||||
* Copyright (C) 2004-2011 Red Hat, Inc. All rights reserved.
|
||||
*
|
||||
* This file is part of LVM2.
|
||||
*
|
||||
@ -18,6 +18,7 @@
|
||||
|
||||
#define VERBOSE_BASE_LEVEL _LOG_WARN
|
||||
#define SECURITY_LEVEL 0
|
||||
#define DEFAULT_PV_MIN_SIZE_KB 512 /* 512 KB */
|
||||
|
||||
void init_verbose(int level);
|
||||
void init_test(int level);
|
||||
@ -38,6 +39,7 @@ void init_error_message_produced(int produced);
|
||||
void init_is_static(unsigned value);
|
||||
void init_udev_checking(int checking);
|
||||
void init_dev_disable_after_error_count(int value);
|
||||
void init_pv_min_size(uint64_t sectors);
|
||||
|
||||
void set_cmd_name(const char *cmd_name);
|
||||
void set_sysfs_dir_path(const char *path);
|
||||
@ -59,6 +61,7 @@ const char *log_command_name(void);
|
||||
unsigned is_static(void);
|
||||
int udev_checking(void);
|
||||
const char *sysfs_dir_path(void);
|
||||
uint64_t pv_min_size(void);
|
||||
|
||||
#define DMEVENTD_MONITOR_IGNORE -1
|
||||
int dmeventd_monitor_mode(void);
|
||||
|
31
test/t-pv-min-size.sh
Normal file
31
test/t-pv-min-size.sh
Normal file
@ -0,0 +1,31 @@
|
||||
#!/bin/sh
|
||||
# Copyright (C) 2011 Red Hat, Inc. All rights reserved.
|
||||
#
|
||||
# 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 General Public License v.2.
|
||||
#
|
||||
# You should have received a copy of the GNU 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
|
||||
|
||||
. lib/test
|
||||
|
||||
# use small default size - 512KB
|
||||
aux lvmconf 'devices/pv_min_size = 512'
|
||||
|
||||
aux prepare_pvs 1 8
|
||||
|
||||
check pv_field $dev1 pv_name $dev1
|
||||
|
||||
# increase min size beyond created PV size 10MB
|
||||
aux lvmconf 'devices/pv_min_size = 10240'
|
||||
|
||||
# and test device is not visible
|
||||
not check pv_field $dev1 pv_name $dev1
|
||||
|
||||
# set too low value errornous value
|
||||
aux lvmconf 'devices/pv_min_size = -100'
|
||||
|
||||
# check the incorrect value is printed
|
||||
pvs $dev1 2>&1 | grep -- -100
|
@ -111,9 +111,9 @@ static int _pv_resize_single(struct cmd_context *cmd,
|
||||
size = new_size;
|
||||
}
|
||||
|
||||
if (size < PV_MIN_SIZE) {
|
||||
log_error("%s: Size must exceed minimum of %ld sectors.",
|
||||
pv_name, PV_MIN_SIZE);
|
||||
if (size < pv_min_size()) {
|
||||
log_error("%s: Size must exceed minimum of %" PRIu64 " sectors.",
|
||||
pv_name, pv_min_size());
|
||||
goto out;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user