From 0357f18ef020e7da0e36362cdfdb5bd54c50d468 Mon Sep 17 00:00:00 2001 From: Alasdair Kergon Date: Fri, 1 Dec 2006 22:48:47 +0000 Subject: [PATCH] Fix VG clustered read locks to use PR not CR. VG metadata reads were not being locked out during metadata updates. --- WHATS_NEW | 1 + daemons/clvmd/clvmd-command.c | 6 +++++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/WHATS_NEW b/WHATS_NEW index 1be432862..09ec929cf 100644 --- a/WHATS_NEW +++ b/WHATS_NEW @@ -1,5 +1,6 @@ Version 2.02.16 - ==================================== + Fix VG clustered read locks to use PR not CR. Adjust some alignments for ia64/sparc. Fix mirror segment removal to use temporary error segment. Always compile debug logging into clvmd. diff --git a/daemons/clvmd/clvmd-command.c b/daemons/clvmd/clvmd-command.c index 936ca7e0a..ccb164c37 100644 --- a/daemons/clvmd/clvmd-command.c +++ b/daemons/clvmd/clvmd-command.c @@ -191,7 +191,11 @@ static int lock_vg(struct local_client *client) dm_hash_remove(lock_hash, lockname); } else { - + /* Read locks need to be PR; other modes get passed through */ + if ((lock_cmd & LCK_TYPE_MASK) == LCK_READ) { + lock_cmd &= ~LCK_TYPE_MASK; + lock_cmd |= LKM_PRMODE; + } status = sync_lock(lockname, (int)lock_cmd, (lock_flags & LCK_NONBLOCK) ? LKF_NOQUEUE : 0, &lkid); if (status) status = errno;