xref: /haiku/src/add-ons/kernel/file_systems/nfs4/OpenState.h (revision 220d04022750f40f8bac8f01fa551211e28d04f2)
1 /*
2  * Copyright 2012 Haiku, Inc. All rights reserved.
3  * Distributed under the terms of the MIT License.
4  *
5  * Authors:
6  *		Paweł Dziepak, pdziepak@quarnos.org
7  */
8 #ifndef OPENSTATE_H
9 #define OPENSTATE_H
10 
11 
12 #include <lock.h>
13 #include <SupportDefs.h>
14 #include <util/KernelReferenceable.h>
15 
16 #include "Cookie.h"
17 #include "NFS4Object.h"
18 
19 
20 struct OpenState : public NFS4Object, public KernelReferenceable,
21 	public DoublyLinkedListLinkImpl<OpenState> {
22 							OpenState();
23 							~OpenState();
24 
25 			uint64			fClientID;
26 
27 			int				fMode;
28 			mutex			fLock;
29 
30 			uint32			fStateID[3];
31 			uint32			fStateSeq;
32 
33 			bool			fOpened;
34 			Delegation*		fDelegation;
35 
36 			LockInfo*		fLocks;
37 			mutex			fLocksLock;
38 
39 			LockOwner*		fLockOwners;
40 			mutex			fOwnerLock;
41 
42 			LockOwner*		GetLockOwner(uint32 owner);
43 
44 			void			AddLock(LockInfo* lock);
45 			void			RemoveLock(LockInfo* lock, LockInfo* prev);
46 			void			DeleteLock(LockInfo* lock);
47 
48 			status_t		Reclaim(uint64 newClientID);
49 
50 			status_t		Close();
51 
52 private:
53 			status_t		_ReclaimOpen(uint64 newClientID);
54 			status_t		_ReclaimLocks(uint64 newClientID);
55 			status_t		_ReleaseLockOwner(LockOwner* owner);
56 };
57 
58 
59 #endif	// OPENSTATE_H
60 
61