windows-byte-range-locks-20050816
[openafs.git] / src / WINNT / afsd / cm_vnodeops.h
index c2de84d..569f698 100644 (file)
@@ -1,11 +1,12 @@
-/* 
- * Copyright (C) 1998, 1989 Transarc Corporation - All rights reserved
- *
- * (C) COPYRIGHT IBM CORPORATION 1987, 1988
- * LICENSED MATERIALS - PROPERTY OF IBM
- *
- *
+/*
+ * Copyright 2000, International Business Machines Corporation and others.
+ * All Rights Reserved.
+ * 
+ * This software has been released under the terms of the IBM Public
+ * License.  For details, see the LICENSE file in the top-level source
+ * directory or online at http://www.openafs.org/dl/license10.html
  */
+
 #ifndef __CM_VNODEOPS_H_ENV__
 #define __CM_VNODEOPS_H_ENV__ 1
 
@@ -14,7 +15,7 @@ extern unsigned int cm_mountRootGen;
 /* parms for attribute setting call */
 typedef struct cm_attr {
        int mask;
-       unsigned long clientModTime;
+       time_t clientModTime;
         osi_hyper_t length;
        int unixModeBits;
         long owner;
@@ -32,11 +33,13 @@ typedef struct cm_lookupSearch {
         cm_fid_t fid;
         char *searchNamep;
         int found;
-        int LCfound, UCfound, NCfound;
+        int LCfound, UCfound, NCfound, ExactFound;
         int caseFold;
         int hasTilde;
 } cm_lookupSearch_t;
 
+#include "cm_dir.h"
+
 typedef int (*cm_DirFuncp_t)(struct cm_scache *, struct cm_dirEntry *, void *,
        osi_hyper_t *entryOffsetp);
 
@@ -67,6 +70,10 @@ extern long cm_NameI(cm_scache_t *rootSCachep, char *pathp, long flags,
 extern long cm_Lookup(cm_scache_t *dscp, char *namep, long flags,
        cm_user_t *userp, cm_req_t *reqp, cm_scache_t **outpScpp);
 
+extern long cm_LookupInternal(cm_scache_t *dscp, char *namep, long flags,
+                              cm_user_t *userp, cm_req_t *reqp, 
+                              cm_scache_t **outpScpp);
+
 extern void cm_TryBulkStat(cm_scache_t *dscp, osi_hyper_t *offsetp,
        cm_user_t *userp, cm_req_t *reqp);
 
@@ -101,12 +108,18 @@ extern long cm_Rename(cm_scache_t *oldDscp, char *oldLastNamep,
 extern long cm_HandleLink(cm_scache_t *linkScp, struct cm_user *userp,
        cm_req_t *reqp);
 
+extern long cm_Link(cm_scache_t *dscp, char *namep, cm_scache_t *sscp,
+    long flags, cm_user_t *userp, cm_req_t *reqp);
+
 extern long cm_SymLink(cm_scache_t *dscp, char *namep, char *contentsp,
        long flags, cm_attr_t *attrp, cm_user_t *userp, cm_req_t *reqp);
 
-extern char cm_sysName[100];
+extern long cm_AssembleLink(cm_scache_t *linkScp, char *pathSuffixp,
+                            cm_scache_t **newRootScpp, cm_space_t **newSpaceBufferp,
+                            cm_user_t *userp, cm_req_t *reqp);
 
-extern int cm_ExpandSysName(char *inp, char *outp, long outSize);
+extern int cm_ExpandSysName(char *inp, char *outp, long outSize,
+                            unsigned int sysNameIndex);
 
 extern long cm_Open(cm_scache_t *scp, int type, cm_user_t *userp);
 
@@ -132,17 +145,43 @@ extern long cm_CheckNTDelete(cm_scache_t *dscp, cm_scache_t *scp,
 extern long cm_EvaluateSymLink(cm_scache_t *dscp, cm_scache_t *linkScp,
        cm_scache_t **outScpp, cm_user_t *userp, cm_req_t *reqp);
 
-extern long cm_Lock(cm_scache_t *scp, unsigned char LockType,
-       LARGE_INTEGER LOffset, LARGE_INTEGER LLength,
-       u_long Timeout, cm_user_t *userp, cm_req_t *reqp,
-       void **lockpp);
+extern long cm_Lock(cm_scache_t *scp, unsigned char sLockType,
+        LARGE_INTEGER LOffset, LARGE_INTEGER LLength, cm_key_t key,
+       int allowWait, cm_user_t *userp, cm_req_t *reqp,
+       cm_file_lock_t **lockpp);
+
+#define CM_UNLOCK_BY_FID 1
 
-extern long cm_Unlock(cm_scache_t *scp, unsigned char LockType,
-       LARGE_INTEGER LOffset, LARGE_INTEGER LLength,
+extern long cm_UnlockByKey(cm_scache_t * scp,
+        cm_key_t key,
+        int flags,
+        cm_user_t * userp,
+        cm_req_t * reqp);
+
+extern long cm_Unlock(cm_scache_t *scp, unsigned char sLockType,
+        LARGE_INTEGER LOffset, LARGE_INTEGER LLength, cm_key_t key,
        cm_user_t *userp, cm_req_t *reqp);
 
+extern long cm_LockCheckRead(cm_scache_t *scp, 
+        LARGE_INTEGER LOffset, 
+        LARGE_INTEGER LLength, 
+        cm_key_t key);
+
+extern long cm_LockCheckWrite(cm_scache_t *scp,
+        LARGE_INTEGER LOffset,
+        LARGE_INTEGER LLength,
+        cm_key_t key);
+
 extern void cm_CheckLocks();
 
-extern long cm_RetryLock(cm_file_lock_t *oldFileLock, int vcp_is_dead);
+extern long cm_RetryLock(cm_file_lock_t *oldFileLock, int client_is_dead);
+
+#define CM_SESSION_SMB      0xffff
+#define CM_SESSION_IFS      0xfffe
+#define CM_SESSION_CMINT    0xfffd
+#define CM_SESSION_RESERVED 0xfff0
+
+extern cm_key_t cm_GenerateKey(unsigned int session, unsigned long process_id, unsigned int file_id);
 
+#define MAX_SYMLINK_COUNT 16
 #endif /*  __CM_VNODEOPS_H_ENV__ */