#ifndef OPENAFS_WINNT_AFSD_CM_VOLUME_H
#define OPENAFS_WINNT_AFSD_CM_VOLUME_H 1
+#include <opr/jhash.h>
+
#define VL_MAXNAMELEN 65
#define CM_VOLUME_MAGIC ('V' | 'O' <<8 | 'L'<<16 | 'M'<<24)
/* RWVOL, ROVOL, BACKVOL are defined in cm.h */
#define NUM_VOL_TYPES 3
+#define CM_VOL_STATE_FLAG_REPLICATED 1
+
typedef struct cm_volume {
osi_queue_t q; /* LRU queue; cm_volumeLock */
+ afs_uint32 qflags; /* by cm_volumeLock */
afs_uint32 magic;
struct cm_volume *allNextp; /* allVolumes; by cm_volumeLock */
struct cm_volume *nameNextp; /* volumeNameHashTable; by cm_volumeLock */
/* by cm_volumeLock */
struct cm_vol_state vol[NUM_VOL_TYPES]; /* by cm_volumeLock */
osi_rwlock_t rw;
- afs_uint16 flags; /* by rw */
- afs_uint16 qflags; /* by cm_volumeLock */
+ afs_uint32 flags; /* by rw */
afs_int32 refCount; /* by Interlocked operations */
struct cm_server *cbServerpRO; /* server granting RO callback; by cm_scacheLock */
time_t cbExpiresRO; /* latest RO expiration time; by cm_scacheLock */
+ time_t cbIssuedRO; /* latest RO issue time; by cm_scacheLock */
time_t creationDateRO; /* latest volume creation date; 0 if unknown; by cm_scacheLock */
time_t lastUpdateTime; /* most recent volume location update cm_volumeLock */
} cm_volume_t;
#define CM_VOLUMEFLAG_RESET 1 /* reload this info on next use */
+#define CM_VOLUMEFLAG_RO_MIXED 2
#define CM_VOLUMEFLAG_UPDATING_VL 8
#define CM_VOLUMEFLAG_DFS_VOLUME 16
#define CM_VOLUMEFLAG_NOEXIST 32
* doesn't necessarily know the cell in the case of a multihomed server
* contacting us from a mystery address.
*/
-#define CM_VOLUME_ID_HASH(volid) ((unsigned long) volid \
- % cm_data.volumeHashTableSize)
+
+#define CM_VOLUME_ID_HASH(volid) \
+ (opr_jhash_int((volid), 0) & (cm_data.volumeHashTableSize - 1))
#define CM_VOLUME_NAME_HASH(name) (SDBMHash(name) % cm_data.volumeHashTableSize)