1
0
mirror of git://sourceware.org/git/lvm2.git synced 2024-12-22 17:35:59 +03:00

_vg_posn -> _find_vg_rlocn

This commit is contained in:
Alasdair Kergon 2005-04-06 16:35:33 +00:00
parent 06cc0dade2
commit 9d1db8278a

View File

@ -213,32 +213,41 @@ static struct raw_locn *_find_vg_rlocn(struct device_area *dev_area,
return NULL; return NULL;
} }
static struct raw_locn *_vg_posn(struct format_instance *fid, /*
struct device_area *dev_area, * Determine offset for uncommitted metadata
const char *vgname) */
static uint64_t _next_rlocn_offset(struct raw_locn *rlocn,
struct mda_header *mdah)
{ {
if (!rlocn)
/* Find an empty slot */
/* FIXME Assume only one VG per mdah for now */
return MDA_HEADER_SIZE;
struct mda_header *mdah; /* Start of free space - round up to next sector; circular */
return ((rlocn->offset + rlocn->size +
if (!(mdah = _raw_read_mda_header(fid->fmt, dev_area))) { (SECTOR_SIZE - rlocn->size % SECTOR_SIZE) -
stack; MDA_HEADER_SIZE) % (mdah->size - MDA_HEADER_SIZE))
return NULL; + MDA_HEADER_SIZE;
}
return _find_vg_rlocn(dev_area, mdah, vgname);
} }
static int _raw_holds_vgname(struct format_instance *fid, static int _raw_holds_vgname(struct format_instance *fid,
struct device_area *dev_area, const char *vgname) struct device_area *dev_area, const char *vgname)
{ {
int r = 0; int r = 0;
struct mda_header *mdah;
if (!dev_open(dev_area->dev)) { if (!dev_open(dev_area->dev)) {
stack; stack;
return 0; return 0;
} }
if (_vg_posn(fid, dev_area, vgname)) if (!(mdah = _raw_read_mda_header(fid->fmt, dev_area))) {
stack;
return 0;
}
if (_find_vg_rlocn(dev_area, mdah, vgname))
r = 1; r = 1;
if (!dev_close(dev_area->dev)) if (!dev_close(dev_area->dev))
@ -268,7 +277,7 @@ static struct volume_group *_vg_read_raw_area(struct format_instance *fid,
goto out; goto out;
} }
if (!(rlocn = _vg_posn(fid, area, vgname))) { if (!(rlocn = _find_vg_rlocn(area, mdah, vgname))) {
log_debug("VG %s not found on %s", vgname, dev_name(area->dev)); log_debug("VG %s not found on %s", vgname, dev_name(area->dev));
goto out; goto out;
} }
@ -349,18 +358,8 @@ static int _vg_write_raw(struct format_instance *fid, struct volume_group *vg,
goto out; goto out;
} }
if ((rlocn = _find_vg_rlocn(&mdac->area, mdah, vg->name))) { rlocn = _find_vg_rlocn(&mdac->area, mdah, vg->name);
/* Start of free space - round up to next sector; circular */ mdac->rlocn.offset = _next_rlocn_offset(rlocn, mdah);
mdac->rlocn.offset =
((rlocn->offset + rlocn->size +
(SECTOR_SIZE - rlocn->size % SECTOR_SIZE) -
MDA_HEADER_SIZE) % (mdah->size - MDA_HEADER_SIZE))
+ MDA_HEADER_SIZE;
} else {
/* Find an empty slot */
/* FIXME Assume only one VG per mdah for now */
mdac->rlocn.offset = MDA_HEADER_SIZE;
}
if (!(mdac->rlocn.size = text_vg_export_raw(vg, "", buf, sizeof(buf)))) { if (!(mdac->rlocn.size = text_vg_export_raw(vg, "", buf, sizeof(buf)))) {
log_error("VG %s metadata writing failed", vg->name); log_error("VG %s metadata writing failed", vg->name);