From cbcf82aa58058fe05dbd9a8d8879ca0364e5df95 Mon Sep 17 00:00:00 2001 From: Rajesh Amaravathi Date: Thu, 12 Apr 2012 14:49:44 +0530 Subject: nfs/nlm: procedures for PC clients * This change introduces four NLMv4 procedures: NM_LOCK, SHARE, UNSHARE and FREE_ALL. These are used by PC clients (windows/dos) to control access to files. 1. NM_LOCK: this lock is not monitored by statd. 2. SHARE: A share reservation is a lock on the whole file that is taken whenever a file is opened on windows clients. This has ACCESS (N, R, W, RW) and DENY MODE (N, R, W, RW). ACCESS: mode of access requested by the client; DENY MODE: what the requesting client wants to deny other clients. 3. UNSHARE: remove a share reservation obtained by SHARE. Called while closing a file. 4. FREE_ALL: remove all share reservations and locks, both monitored and unmonitored, of the calling client. * lock and nm_lock use a common function with only a flag conveying whether or not to monitor a lock. * NOTES: 1. SHARE reservations are not STACK_WIND'd to subsequent xlators. These are maintained in-memory in the nfs xlator. 2. Consequently, for SHARE reservations to work effectively, all PC clients *must* mount from the same gNfs server. Not doing so will result in different servers maintaining separate SHARE reservations which will not be enforced for obvious reasons. Change-Id: Id4f22670a94ed58691a6a7f4c80aa8c11421a277 BUG: 800287 Signed-off-by: Rajesh Amaravathi Reviewed-on: http://review.gluster.com/3212 Tested-by: Gluster Build System Reviewed-by: Krishna Srinivas --- xlators/nfs/server/src/nfs3.h | 2 ++ 1 file changed, 2 insertions(+) (limited to 'xlators/nfs/server/src/nfs3.h') diff --git a/xlators/nfs/server/src/nfs3.h b/xlators/nfs/server/src/nfs3.h index e6b9edee5ca..78eb01b60b9 100644 --- a/xlators/nfs/server/src/nfs3.h +++ b/xlators/nfs/server/src/nfs3.h @@ -154,6 +154,7 @@ typedef union args_ { nlm4_unlockargs nlm4_unlockargs; nlm4_shareargs nlm4_shareargs; nlm4_shareres nlm4_shareres; + nlm4_freeallargs nlm4_freeallargs; } args; @@ -230,6 +231,7 @@ struct nfs3_local { nlm4_lkowner_t lkowner; char cookiebytes[1024]; struct nfs3_fh lockfh; + int monitor; rpc_transport_t *trans; call_frame_t *frame; }; -- cgit