Gitweb: https://sourceware.org/git/?p=lvm2.git;a=commitdiff;h=a0ddfad94b92da4c5d2145... Commit: a0ddfad94b92da4c5d21459f17c5f1fb9fe003b3 Parent: c70c9f65659df846dbc590053569a80935e09d2f Author: Alasdair G Kergon agk@redhat.com AuthorDate: Fri Jan 5 02:31:28 2018 +0000 Committer: Alasdair G Kergon agk@redhat.com CommitterDate: Fri Jan 5 03:12:22 2018 +0000
metadata: Change the new data processing fns to void.
Move the existing fn return codes into the new structs. --- lib/config/config.c | 22 ++++++++-------- lib/format_text/format-text.c | 55 ++++++++++++++++++++++++++--------------- lib/format_text/import.c | 26 +++++++++++-------- lib/format_text/text_label.c | 25 +++++++++--------- lib/label/label.c | 20 +++++++++------ 5 files changed, 85 insertions(+), 63 deletions(-)
diff --git a/lib/config/config.c b/lib/config/config.c index bb1d80e..5dc2356 100644 --- a/lib/config/config.c +++ b/lib/config/config.c @@ -1,6 +1,6 @@ /* * Copyright (C) 2001-2004 Sistina Software, Inc. All rights reserved. - * Copyright (C) 2004-2011 Red Hat, Inc. All rights reserved. + * Copyright (C) 2004-2018 Red Hat, Inc. All rights reserved. * * This file is part of LVM2. * @@ -500,12 +500,12 @@ struct process_config_file_params { uint32_t checksum; int checksum_only; int no_dup_node_check; + int ret; };
-static int _process_config_file_buffer(struct process_config_file_params *pcfp, char *buffer) +static void _process_config_file_buffer(struct process_config_file_params *pcfp, char *buffer) { char *fb, *fe; - int r = 0;
fb = buffer;
@@ -513,6 +513,7 @@ static int _process_config_file_buffer(struct process_config_file_params *pcfp, (pcfp->checksum_fn(pcfp->checksum_fn(INITIAL_CRC, (const uint8_t *)fb, pcfp->size), (const uint8_t *)(fb + pcfp->size), pcfp->size2))) { log_error("%s: Checksum error at offset %" PRIu64, dev_name(pcfp->dev), (uint64_t) pcfp->offset); + pcfp->ret = 0; goto out; }
@@ -520,16 +521,13 @@ static int _process_config_file_buffer(struct process_config_file_params *pcfp, fe = fb + pcfp->size + pcfp->size2; if (pcfp->no_dup_node_check) { if (!dm_config_parse_without_dup_node_check(pcfp->cft, fb, fe)) - goto_out; - } else { - if (!dm_config_parse(pcfp->cft, fb, fe)) - goto_out; - } + pcfp->ret = 0; + } else if (!dm_config_parse(pcfp->cft, fb, fe)) + pcfp->ret = 0; }
- r = 1; out: - return r; + ; }
/* @@ -573,6 +571,7 @@ int config_file_read_fd(struct dm_pool *mem, struct dm_config_tree *cft, struct pcfp->checksum = checksum; pcfp->checksum_only = checksum_only; pcfp->no_dup_node_check = no_dup_node_check; + pcfp->ret = 1;
/* Only use mmap with regular files */ if (!(dev->flags & DEV_REGULAR) || circular) @@ -599,7 +598,8 @@ int config_file_read_fd(struct dm_pool *mem, struct dm_config_tree *cft, struct fb = buf; }
- r = _process_config_file_buffer(pcfp, fb); + _process_config_file_buffer(pcfp, fb); + r = pcfp->ret;
out: if (!use_mmap) diff --git a/lib/format_text/format-text.c b/lib/format_text/format-text.c index 798fd66..fb87ae2 100644 --- a/lib/format_text/format-text.c +++ b/lib/format_text/format-text.c @@ -1,6 +1,6 @@ /* * Copyright (C) 2001-2004 Sistina Software, Inc. All rights reserved. - * Copyright (C) 2004-2012 Red Hat, Inc. All rights reserved. + * Copyright (C) 2004-2018 Red Hat, Inc. All rights reserved. * * This file is part of LVM2. * @@ -329,16 +329,18 @@ static void _xlate_mdah(struct mda_header *mdah) struct process_raw_mda_header_params { struct mda_header *mdah; struct device_area dev_area; + int ret; };
-static int _process_raw_mda_header(struct process_raw_mda_header_params *prmp) +static void _process_raw_mda_header(struct process_raw_mda_header_params *prmp) { struct mda_header *mdah = prmp->mdah; struct device_area *dev_area = &prmp->dev_area; - int r = 0;
- if (!dev_close(dev_area->dev)) + if (!dev_close(dev_area->dev)) { + prmp->ret = 0; goto_out; + }
if (mdah->checksum_xl != xlate32(calc_crc(INITIAL_CRC, (uint8_t *)mdah->magic, MDA_HEADER_SIZE - @@ -346,6 +348,7 @@ static int _process_raw_mda_header(struct process_raw_mda_header_params *prmp) log_error("Incorrect metadata area header checksum on %s" " at offset " FMTu64, dev_name(dev_area->dev), dev_area->start); + prmp->ret = 0; goto out; }
@@ -355,6 +358,7 @@ static int _process_raw_mda_header(struct process_raw_mda_header_params *prmp) log_error("Wrong magic number in metadata area header on %s" " at offset " FMTu64, dev_name(dev_area->dev), dev_area->start); + prmp->ret = 0; goto out; }
@@ -362,6 +366,7 @@ static int _process_raw_mda_header(struct process_raw_mda_header_params *prmp) log_error("Incompatible metadata area header version: %d on %s" " at offset " FMTu64, mdah->version, dev_name(dev_area->dev), dev_area->start); + prmp->ret = 0; goto out; }
@@ -369,13 +374,12 @@ static int _process_raw_mda_header(struct process_raw_mda_header_params *prmp) log_error("Incorrect start sector in metadata area header: " FMTu64 " on %s at offset " FMTu64, mdah->start, dev_name(dev_area->dev), dev_area->start); + prmp->ret = 0; goto out; }
- r = 1; - out: - return r; + ; }
static struct mda_header *_raw_read_mda_header(struct dm_pool *mem, struct device_area *dev_area, int primary_mda) @@ -401,6 +405,7 @@ static struct mda_header *_raw_read_mda_header(struct dm_pool *mem, struct devic
prmp->mdah = mdah; prmp->dev_area = *dev_area; + prmp->ret = 1;
if (!dev_read_buf(dev_area->dev, dev_area->start, MDA_HEADER_SIZE, MDA_HEADER_REASON(primary_mda), mdah)) { if (!dev_close(dev_area->dev)) @@ -408,7 +413,9 @@ static struct mda_header *_raw_read_mda_header(struct dm_pool *mem, struct devic return_NULL; }
- if (!_process_raw_mda_header(prmp)) + _process_raw_mda_header(prmp); + + if (!prmp->ret) return_NULL;
return mdah; @@ -1337,9 +1344,10 @@ struct vgname_from_mda_params{ uint64_t *mda_free_sectors; uint32_t wrap; unsigned used_cached_metadata; + int ret; };
-static int _vgname_from_mda_process(struct vgname_from_mda_params *vfmp) +static void _vgname_from_mda_process(struct vgname_from_mda_params *vfmp) { struct mda_header *mdah = vfmp->mdah; struct device_area *dev_area = vfmp->dev_area; @@ -1347,11 +1355,12 @@ static int _vgname_from_mda_process(struct vgname_from_mda_params *vfmp) uint64_t *mda_free_sectors = vfmp->mda_free_sectors; struct raw_locn *rlocn = mdah->raw_locns; uint64_t buffer_size, current_usage; - int r = 0;
/* Ignore this entry if the characters aren't permissible */ - if (!validate_name(vgsummary->vgname)) + if (!validate_name(vgsummary->vgname)) { + vfmp->ret = 0; goto_out; + }
log_debug_metadata("%s: %s metadata at " FMTu64 " size " FMTu64 " with wrap " FMTu32 " (in area at " FMTu64 " size " FMTu64 @@ -1373,13 +1382,11 @@ static int _vgname_from_mda_process(struct vgname_from_mda_params *vfmp) *mda_free_sectors = ((buffer_size - 2 * current_usage) / 2) >> SECTOR_SHIFT; }
- r = 1; - out: - return r; + ; }
-static int _vgname_from_mda_validate(struct vgname_from_mda_params *vfmp, char *buffer) +static void _vgname_from_mda_validate(struct vgname_from_mda_params *vfmp, char *buffer) { const struct format_type *fmt = vfmp->fmt; struct mda_header *mdah = vfmp->mdah; @@ -1398,8 +1405,10 @@ static int _vgname_from_mda_validate(struct vgname_from_mda_params *vfmp, char * buf[len] = '\0';
/* Ignore this entry if the characters aren't permissible */ - if (!validate_name(buf)) + if (!validate_name(buf)) { + vfmp->ret = 0; goto_out; + }
/* We found a VG - now check the metadata */ if (rlocn->offset + rlocn->size > mdah->size) @@ -1408,6 +1417,7 @@ static int _vgname_from_mda_validate(struct vgname_from_mda_params *vfmp, char * if (vfmp->wrap > rlocn->offset) { log_error("%s: metadata (" FMTu64 " bytes) too large for circular buffer (" FMTu64 " bytes)", dev_name(dev_area->dev), rlocn->size, mdah->size - MDA_HEADER_SIZE); + vfmp->ret = 0; goto out; }
@@ -1424,13 +1434,15 @@ static int _vgname_from_mda_validate(struct vgname_from_mda_params *vfmp, char * (uint32_t) (rlocn->size - vfmp->wrap), (off_t) (dev_area->start + MDA_HEADER_SIZE), vfmp->wrap, calc_crc, vgsummary->vgname ? 1 : 0, - vgsummary)) + vgsummary)) { + vfmp->ret = 0; goto_out; + }
- return _vgname_from_mda_process(vfmp); + _vgname_from_mda_process(vfmp);
out: - return 0; + ; }
int vgname_from_mda(const struct format_type *fmt, @@ -1472,6 +1484,7 @@ int vgname_from_mda(const struct format_type *fmt, vfmp->vgsummary = vgsummary; vfmp->primary_mda = primary_mda; vfmp->mda_free_sectors = mda_free_sectors; + vfmp->ret = 1;
/* Do quick check for a vgname */ /* We cannot read the full metadata here because the name has to be validated before we use the size field */ @@ -1479,7 +1492,9 @@ int vgname_from_mda(const struct format_type *fmt, NAME_LEN, MDA_CONTENT_REASON(primary_mda), buf)) return_0;
- return _vgname_from_mda_validate(vfmp, buf); + _vgname_from_mda_validate(vfmp, buf); + + return vfmp->ret; }
static int _scan_raw(const struct format_type *fmt, const char *vgname __attribute__((unused))) diff --git a/lib/format_text/import.c b/lib/format_text/import.c index d729659..580c1f3 100644 --- a/lib/format_text/import.c +++ b/lib/format_text/import.c @@ -1,6 +1,6 @@ /* * Copyright (C) 2001-2004 Sistina Software, Inc. All rights reserved. - * Copyright (C) 2004-2008 Red Hat, Inc. All rights reserved. + * Copyright (C) 2004-2018 Red Hat, Inc. All rights reserved. * * This file is part of LVM2. * @@ -38,18 +38,16 @@ struct import_vgsummary_params { struct dm_config_tree *cft; int checksum_only; struct lvmcache_vgsummary *vgsummary; + int ret; };
-static int _import_vgsummary(struct import_vgsummary_params *ivsp) +static void _import_vgsummary(struct import_vgsummary_params *ivsp) { struct text_vg_version_ops **vsn; - int r = 0;
- if (ivsp->checksum_only) { + if (ivsp->checksum_only) /* Checksum matches already-cached content - no need to reparse. */ - r = 1; goto out; - }
/* * Find a set of version functions that can read this file @@ -58,16 +56,19 @@ static int _import_vgsummary(struct import_vgsummary_params *ivsp) if (!(*vsn)->check_version(ivsp->cft)) continue;
- if (!(*vsn)->read_vgsummary(ivsp->fmt, ivsp->cft, ivsp->vgsummary)) + if (!(*vsn)->read_vgsummary(ivsp->fmt, ivsp->cft, ivsp->vgsummary)) { + ivsp->ret = 0; goto_out; + }
- r = 1; - break; + goto out; }
+ /* Nothing found */ + ivsp->ret = 0; + out: config_destroy(ivsp->cft); - return r; }
/* @@ -96,6 +97,7 @@ int text_vgsummary_import(const struct format_type *fmt, ivsp->fmt = fmt; ivsp->checksum_only = checksum_only; ivsp->vgsummary = vgsummary; + ivsp->ret = 1;
if (!dev && !config_file_read(fmt->cmd->mem, ivsp->cft)) { log_error("Couldn't read volume group metadata."); @@ -112,7 +114,9 @@ int text_vgsummary_import(const struct format_type *fmt, return 0; }
- return _import_vgsummary(ivsp); + _import_vgsummary(ivsp); + + return ivsp->ret; }
struct cached_vg_fmtdata { diff --git a/lib/format_text/text_label.c b/lib/format_text/text_label.c index 5e370d4..c4ea166 100644 --- a/lib/format_text/text_label.c +++ b/lib/format_text/text_label.c @@ -1,6 +1,6 @@ /* * Copyright (C) 2002-2004 Sistina Software, Inc. All rights reserved. - * Copyright (C) 2004-2006 Red Hat, Inc. All rights reserved. + * Copyright (C) 2004-2018 Red Hat, Inc. All rights reserved. * * This file is part of LVM2. * @@ -330,27 +330,23 @@ struct process_mda_header_params { struct metadata_area *mda; struct device *dev; struct lvmcache_vgsummary vgsummary; + int ret; };
-static int _process_vgsummary(struct process_mda_header_params *pmp, struct lvmcache_vgsummary *vgsummary) +static void _process_vgsummary(struct process_mda_header_params *pmp, struct lvmcache_vgsummary *vgsummary) { - int r = 0; - if (!lvmcache_update_vgname_and_id(pmp->umb->info, vgsummary)) { pmp->umb->ret = 0; + pmp->ret = 0; goto_out; }
- r = 1; - out: if (!dev_close(pmp->dev)) stack; - - return r; }
-static int _process_mda_header(struct process_mda_header_params *pmp, struct mda_header *mdah) +static void _process_mda_header(struct process_mda_header_params *pmp, struct mda_header *mdah) { struct update_mda_baton *umb = pmp->umb; const struct format_type *fmt = umb->label->labeller->fmt; @@ -365,7 +361,7 @@ static int _process_mda_header(struct process_mda_header_params *pmp, struct mda mdac->area.start); if (!dev_close(pmp->dev)) stack; - return 1; + return; }
if (!vgname_from_mda(fmt, mdah, mda_is_primary(mda), &mdac->area, &pmp->vgsummary, @@ -374,10 +370,10 @@ static int _process_mda_header(struct process_mda_header_params *pmp, struct mda stack; if (!dev_close(pmp->dev)) stack; - return 1; + return; }
- return _process_vgsummary(pmp, &pmp->vgsummary); + _process_vgsummary(pmp, &pmp->vgsummary); }
static int _update_mda(struct metadata_area *mda, void *baton) @@ -411,6 +407,7 @@ static int _update_mda(struct metadata_area *mda, void *baton)
pmp->umb = umb; pmp->mda = mda; + pmp->ret = 1;
if (!(mdah = raw_read_mda_header(fmt->cmd->mem, &mdac->area, mda_is_primary(mda)))) { stack; @@ -419,7 +416,9 @@ static int _update_mda(struct metadata_area *mda, void *baton) return 1; }
- return _process_mda_header(pmp, mdah); + _process_mda_header(pmp, mdah); + + return pmp->ret; }
static int _text_read(struct labeller *l, struct device *dev, void *buf, struct label **label) diff --git a/lib/label/label.c b/lib/label/label.c index 26d94cf..5d5bcc5 100644 --- a/lib/label/label.c +++ b/lib/label/label.c @@ -1,6 +1,6 @@ /* * Copyright (C) 2002-2004 Sistina Software, Inc. All rights reserved. - * Copyright (C) 2004-2007 Red Hat, Inc. All rights reserved. + * Copyright (C) 2004-2018 Red Hat, Inc. All rights reserved. * * This file is part of LVM2. * @@ -125,6 +125,8 @@ struct find_labeller_params {
uint64_t label_sector; /* Sector where label found */ struct label **result; + + int ret; };
static void _set_label_read_result(int failed, struct find_labeller_params *flp) @@ -144,7 +146,7 @@ out: stack; }
-static int _find_labeller(struct find_labeller_params *flp, char *readbuf) +static void _find_labeller(struct find_labeller_params *flp, char *readbuf) { struct device *dev = flp->dev; uint64_t scan_sector = flp->scan_sector; @@ -155,7 +157,8 @@ static int _find_labeller(struct find_labeller_params *flp, char *readbuf) struct label_header *lh; struct lvmcache_info *info; uint64_t sector; - int r = 0; + +int r = 0;
/* Scan a few sectors for a valid label */ for (sector = 0; sector < LABEL_SCAN_SECTORS; @@ -215,12 +218,11 @@ static int _find_labeller(struct find_labeller_params *flp, char *readbuf) if ((info = lvmcache_info_from_pvid(dev->pvid, dev, 0))) _update_lvmcache_orphan(info); log_very_verbose("%s: No label detected", dev_name(dev)); + flp->ret = 0; } else - r = (l->ops->read)(l, dev, labelbuf, result); + flp->ret = (l->ops->read)(l, dev, labelbuf, result);
- _set_label_read_result(!r, flp); - - return r; + _set_label_read_result(!flp->ret, flp); }
/* FIXME Also wipe associated metadata area headers? */ @@ -318,6 +320,7 @@ static int _label_read(struct device *dev, uint64_t scan_sector, struct label ** flp->dev = dev; flp->scan_sector = scan_sector; flp->result = result; + flp->ret = 1;
/* Ensure result is always wiped as a precaution */ if (result) @@ -340,7 +343,8 @@ static int _label_read(struct device *dev, uint64_t scan_sector, struct label ** return 0; }
- return _find_labeller(flp, readbuf); + _find_labeller(flp, readbuf); + return flp->ret; }
int label_read(struct device *dev, struct label **result, uint64_t scan_sector)
lvm2-commits@lists.fedorahosted.org