From b2a849142be974899f20bcdbd780c0bc33889b64 Mon Sep 17 00:00:00 2001 From: Alasdair Kergon Date: Tue, 16 Sep 2003 16:08:05 +0000 Subject: [PATCH] Fix read-only snapshot creation. --- lib/activate/dev_manager.c | 1 + tools/lvcreate.c | 5 +++++ 2 files changed, 6 insertions(+) diff --git a/lib/activate/dev_manager.c b/lib/activate/dev_manager.c index a7c9ba9c3..416c40ce5 100644 --- a/lib/activate/dev_manager.c +++ b/lib/activate/dev_manager.c @@ -1409,6 +1409,7 @@ static int _expand_snapshot(struct dev_manager *dm, struct logical_volume *lv, dl->populate = _populate_vanilla; _clear_flag(dl, VISIBLE); _clear_flag(dl, TOPLEVEL); + _set_flag(dl, READWRITE); cow_dlid = dl->dlid; diff --git a/tools/lvcreate.c b/tools/lvcreate.c index 6c2b40b8c..abce41143 100644 --- a/tools/lvcreate.c +++ b/tools/lvcreate.c @@ -453,6 +453,8 @@ static int _lvcreate(struct cmd_context *cmd, struct lvcreate_params *lp) "supported yet"); return 0; } + /* Must zero cow */ + status |= LVM_WRITE; } if (!(lv = lv_create(vg->fid, lp->lv_name, status, alloc, @@ -512,6 +514,9 @@ static int _lvcreate(struct cmd_context *cmd, struct lvcreate_params *lp) } if (lp->snapshot) { + /* Reset permission after zeroing */ + if (!(lp->permission & LVM_WRITE)) + lv->status &= ~LVM_WRITE; if (!lock_vol(cmd, lv->lvid.s, LCK_LV_DEACTIVATE)) { log_err("Couldn't unlock snapshot."); return 0;