From 9c4bf5db4a1b2e226406358bdbda6d13755785f9 Mon Sep 17 00:00:00 2001 From: Alasdair Kergon Date: Fri, 3 Oct 2008 14:22:18 +0000 Subject: [PATCH] Fix conversion of md chunk size into sectors. --- WHATS_NEW | 3 ++- lib/device/dev-md.c | 10 +++++----- lib/metadata/metadata.c | 9 +++++++-- 3 files changed, 14 insertions(+), 8 deletions(-) diff --git a/WHATS_NEW b/WHATS_NEW index 8f81afe37..0871346ac 100644 --- a/WHATS_NEW +++ b/WHATS_NEW @@ -1,7 +1,8 @@ Version 2.02.41 - ===================================== + Fix conversion of md chunk size into sectors. Free text metadata buffer after a failure writing it. - Fix misleading error message when there is no allocatable extents in VG. + Fix misleading error message when there are no allocatable extents in VG. Fix handling of PVs which reappeared with old metadata version. Fix mirror DSO to call vgreduce with proper parameters. Fix validation of --minor and --major in lvcreate to require -My always. diff --git a/lib/device/dev-md.c b/lib/device/dev-md.c index 48dda2705..190bc887a 100644 --- a/lib/device/dev-md.c +++ b/lib/device/dev-md.c @@ -133,7 +133,7 @@ unsigned long dev_md_chunk_size(const char *sysfs_dir, struct device *dev) char path[PATH_MAX+1], buffer[64]; FILE *fp; struct stat info; - unsigned long chunk_size = 0UL; + unsigned long chunk_size_bytes = 0UL; if (MAJOR(dev->dev) != md_major()) return 0; @@ -165,20 +165,20 @@ unsigned long dev_md_chunk_size(const char *sysfs_dir, struct device *dev) goto out; } - if (sscanf(buffer, "%lu", &chunk_size) != 1) { + if (sscanf(buffer, "%lu", &chunk_size_bytes) != 1) { log_error("sysfs file %s not in expected format: %s", path, buffer); goto out; } - log_very_verbose("Found chunksize %lu for md device %s.", chunk_size, - dev_name(dev)); + log_very_verbose("Device %s md chunk size is %lu bytes.", + dev_name(dev), chunk_size_bytes); out: if (fclose(fp)) log_sys_error("fclose", path); - return chunk_size; + return chunk_size_bytes >> SECTOR_SHIFT; } #else diff --git a/lib/metadata/metadata.c b/lib/metadata/metadata.c index c0db49414..ea860f3d6 100644 --- a/lib/metadata/metadata.c +++ b/lib/metadata/metadata.c @@ -75,13 +75,18 @@ unsigned long pe_align(struct physical_volume *pv) /* * Align to chunk size of underlying md device if present */ - if (pv->dev && - find_config_tree_bool(pv->fmt->cmd, "devices/md_chunk_alignment", + if (!pv->dev) + goto out; + + if (find_config_tree_bool(pv->fmt->cmd, "devices/md_chunk_alignment", DEFAULT_MD_CHUNK_ALIGNMENT)) pv->pe_align = MAX(pv->pe_align, dev_md_chunk_size(pv->fmt->cmd->sysfs_dir, pv->dev)); + log_very_verbose("%s: Setting PE alignment to %lu sectors.", + dev_name(pv->dev), pv->pe_align); + out: return pv->pe_align; } -- 2.43.5