aboutsummaryrefslogtreecommitdiff
path: root/liblvm/lvm_pv.c
diff options
context:
space:
mode:
Diffstat (limited to 'liblvm/lvm_pv.c')
-rw-r--r--liblvm/lvm_pv.c20
1 files changed, 17 insertions, 3 deletions
diff --git a/liblvm/lvm_pv.c b/liblvm/lvm_pv.c
index 3924af4b0..18b1069fe 100644
--- a/liblvm/lvm_pv.c
+++ b/liblvm/lvm_pv.c
@@ -123,7 +123,21 @@ pv_t lvm_pv_from_uuid(vg_t vg, const char *uuid)
int lvm_pv_resize(const pv_t pv, uint64_t new_size)
{
- /* FIXME: add pv resize code here */
- log_error("NOT IMPLEMENTED YET");
- return -1;
+ uint64_t size = new_size >> SECTOR_SHIFT;
+
+ if (new_size % SECTOR_SIZE) {
+ log_errno(EINVAL, "Size not a multiple of 512");
+ return -1;
+ }
+
+ if (!vg_check_write_mode(pv->vg)) {
+ return -1;
+ }
+
+ if (!pv_resize(pv, pv->vg, size)) {
+ log_error("PV re-size failed!");
+ return -1;
+ } else {
+ return 0;
+ }
}