Typical sheepdog clients issues two or more locking request (SD_OP_LOCK_VDI, typically issued in the function find_vdi_name() of clients) during their lifetime because it is required when snapshots of their VDIs are taken. In such a case, an existing lock becomes needless because the lock points snapshot. This patch add a release procedure for the case.
Signed-off-by: Hitoshi Mitake <mitake.hito...@lab.ntt.co.jp> --- sheep/ops.c | 8 ++++++++ 1 files changed, 8 insertions(+), 0 deletions(-) diff --git a/sheep/ops.c b/sheep/ops.c index 519e708..3469c61 100644 --- a/sheep/ops.c +++ b/sheep/ops.c @@ -239,6 +239,14 @@ static int cluster_lock_vdi_work(struct request *req) { int ret; + if (req->ci->locking_interest_vid) { + /* 1 fd cannot lock more than 2 VIDs */ + sd_debug("unlocking VID: %"PRIx32, req->ci->interest_vid); + notify_release_vdi(req->ci->interest_vid); + req->ci->locking_interest_vid = false; + req->ci->interest_vid = 0; + } + ret = cluster_get_vdi_info(req); if (ret != SD_RES_SUCCESS) return ret; -- 1.7.1 -- sheepdog mailing list sheepdog@lists.wpkg.org http://lists.wpkg.org/mailman/listinfo/sheepdog