+++ /dev/null
-
-#ifndef CEPH_MDS_LOCKS_H
-#define CEPH_MDS_LOCKS_H
-
-struct sm_state_t {
- int next; // 0 if stable
- char loner;
- int replica_state;
- char can_read;
- char can_read_projected;
- char can_rdlock;
- char can_wrlock;
- char can_force_wrlock;
- char can_lease;
- char can_xlock;
- int caps;
- int loner_caps;
- int xlocker_caps;
- int replica_caps;
-};
-
-struct sm_t {
- const struct sm_state_t *states;
- int allowed_ever_auth;
- int allowed_ever_replica;
- int careful;
- int can_remote_xlock;
-};
-
-#define ANY 1 // auth or replica
-#define AUTH 2 // auth only
-#define XCL 3 // auth or exclusive client
-//#define FW 4 // fw to auth, if replica
-#define REQ 5 // req state change from auth, if replica
-
-extern const struct sm_t sm_simplelock;
-extern const struct sm_t sm_filelock;
-extern const struct sm_t sm_scatterlock;
-extern const struct sm_t sm_locallock;
-
-
-
-// -- lock states --
-// sync <-> lock
-enum {
- LOCK_UNDEF = 0,
-
- // auth rep
- LOCK_SYNC, // AR R . RD L . / C . R RD L . / C .
- LOCK_LOCK, // AR R . .. . X / . . . .. . . / . .
-
- LOCK_PREXLOCK, // A . . .. . . / . . (lock)
- LOCK_XLOCK, // A . . .. . . / . . (lock)
- LOCK_XLOCKDONE, // A r p rd l x / . . (lock) <-- by same client only!!
- LOCK_XLOCKSNAP, // also revoke Fb
- LOCK_LOCK_XLOCK,
-
- LOCK_SYNC_LOCK, // AR R . .. . . / . . R .. . . / . .
- LOCK_LOCK_SYNC, // A R p rd l . / . . (lock) <-- lc by same client only
-
- LOCK_EXCL, // A . . .. . . / c x * (lock)
- LOCK_EXCL_SYNC, // A . . .. . . / c . * (lock)
- LOCK_EXCL_LOCK, // A . . .. . . / . . (lock)
- LOCK_SYNC_EXCL, // Ar R . .. . . / c . * (sync->lock)
- LOCK_LOCK_EXCL, // A R . .. . . / . . (lock)
-
- LOCK_REMOTEXLOCK, // on NON-auth
-
- // * = loner mode
-
- LOCK_MIX,
- LOCK_SYNC_MIX,
- LOCK_SYNC_MIX2,
- LOCK_LOCK_MIX,
- LOCK_EXCL_MIX,
- LOCK_MIX_SYNC,
- LOCK_MIX_SYNC2,
- LOCK_MIX_LOCK,
- LOCK_MIX_LOCK2,
- LOCK_MIX_EXCL,
-
- LOCK_TSYN,
- LOCK_TSYN_LOCK,
- LOCK_TSYN_MIX,
- LOCK_LOCK_TSYN,
- LOCK_MIX_TSYN,
-
- LOCK_PRE_SCAN,
- LOCK_SCAN,
-
- LOCK_SNAP_SYNC,
-
- LOCK_XSYN,
- LOCK_XSYN_EXCL,
- LOCK_EXCL_XSYN,
- LOCK_XSYN_SYNC,
-
- LOCK_MAX,
-};
-
-// -------------------------
-// lock actions
-
-// for replicas
-#define LOCK_AC_SYNC -1
-#define LOCK_AC_MIX -2
-#define LOCK_AC_LOCK -3
-#define LOCK_AC_LOCKFLUSHED -4
-
-// for auth
-#define LOCK_AC_SYNCACK 1
-#define LOCK_AC_MIXACK 2
-#define LOCK_AC_LOCKACK 3
-
-#define LOCK_AC_REQSCATTER 7
-#define LOCK_AC_REQUNSCATTER 8
-#define LOCK_AC_NUDGE 9
-#define LOCK_AC_REQRDLOCK 10
-
-#define LOCK_AC_FOR_REPLICA(a) ((a) < 0)
-#define LOCK_AC_FOR_AUTH(a) ((a) > 0)
-
-
-static inline const char *get_lock_action_name(int a) {
- switch (a) {
- case LOCK_AC_SYNC: return "sync";
- case LOCK_AC_MIX: return "mix";
- case LOCK_AC_LOCK: return "lock";
- case LOCK_AC_LOCKFLUSHED: return "lockflushed";
-
- case LOCK_AC_SYNCACK: return "syncack";
- case LOCK_AC_MIXACK: return "mixack";
- case LOCK_AC_LOCKACK: return "lockack";
-
- case LOCK_AC_REQSCATTER: return "reqscatter";
- case LOCK_AC_REQUNSCATTER: return "requnscatter";
- case LOCK_AC_NUDGE: return "nudge";
- case LOCK_AC_REQRDLOCK: return "reqrdlock";
- default: return "???";
- }
-}
-
-
-
-#endif