From 138d8bda1f456915167b8d703f285a30f6de71d1 Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Wed, 13 Feb 2008 03:14:53 -0800 Subject: [PATCH] mds: add wrlock bits to FileLock --- src/mds/FileLock.h | 27 ++++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/src/mds/FileLock.h b/src/mds/FileLock.h index 9fd86ae9be20c..cb0151cdf450b 100644 --- a/src/mds/FileLock.h +++ b/src/mds/FileLock.h @@ -95,8 +95,12 @@ any + statlite(mtime) class MDRequest; class FileLock : public SimpleLock { + int num_wrlock; + public: - FileLock(MDSCacheObject *o, int t, int wo) : SimpleLock(o, t, wo) { } + FileLock(MDSCacheObject *o, int t, int wo) : + SimpleLock(o, t, wo), + num_wrlock(0) { } int get_replica_state() { switch (state) { @@ -155,6 +159,27 @@ class FileLock : public SimpleLock { return false; } + // wrlock + bool can_wrlock() { + return + state == LOCK_LOCK || state == LOCK_GLOCKM || state == LOCK_GLOCKL || + state == LOCK_MIXED || state == LOCK_GMIXEDL || + state == LOCK_LONER || state == LOCK_GLONERM || + state == LOCK_GSYNCM || state == LOCK_GSYNCL; + } + void get_wrlock() { + assert(can_wrlock()); + if (num_wrlock == 0) parent->get(MDSCacheObject::PIN_LOCK); + ++num_wrlock; + } + void put_wrlock() { + --num_wrlock; + if (num_wrlock == 0) parent->put(MDSCacheObject::PIN_LOCK); + } + bool is_wrlocked() { return num_wrlock > 0; } + int get_num_wrlocks() { return num_wrlock; } + + // client caps allowed int caps_allowed_ever() { if (parent->is_auth()) -- 2.39.5