bufp->dirty_length = 0;
bufp->flags |= CM_BUF_ERROR;
bufp->error = VNOVNODE;
- bufp->dataVersion = -1; /* bad */
+ bufp->dataVersion = CM_BUF_VERSION_BAD; /* bad */
bufp->dirtyCounter++;
if (bufp->flags & CM_BUF_WAITING) {
osi_Log2(afsd_logp, "CM RecycleSCache Waking [scp 0x%x] bufp 0x%x", scp, bufp);
bufp->dirty_length = 0;
bufp->flags |= CM_BUF_ERROR;
bufp->error = VNOVNODE;
- bufp->dataVersion = -1; /* bad */
+ bufp->dataVersion = CM_BUF_VERSION_BAD; /* bad */
bufp->dirtyCounter++;
if (bufp->flags & CM_BUF_WAITING) {
osi_Log2(afsd_logp, "CM RecycleSCache Waking [scp 0x%x] bufp 0x%x", scp, bufp);
| CM_SCACHEFLAG_OUTOFSPACE
| CM_SCACHEFLAG_EACCESS);
scp->serverModTime = 0;
- scp->dataVersion = 0;
- scp->bufDataVersionLow = 0;
+ scp->dataVersion = CM_SCACHE_VERSION_BAD;
+ scp->bufDataVersionLow = CM_SCACHE_VERSION_BAD;
scp->bulkStatProgress = hzero;
scp->waitCount = 0;
scp->waitQueueT = NULL;
scp->serverLock = (-1);
scp->exclusiveLocks = 0;
scp->sharedLocks = 0;
- scp->lockDataVersion = -1;
+ scp->lockDataVersion = CM_SCACHE_VERSION_BAD;
/* not locked, but there can be no references to this guy
* while we hold the global refcount lock.
if (scp->dirBplus)
freeBtree(scp->dirBplus);
scp->dirBplus = NULL;
- scp->dirDataVersion = -1;
+ scp->dirDataVersion = CM_SCACHE_VERSION_BAD;
lock_FinalizeRWLock(&scp->dirlock);
#endif
lock_FinalizeRWLock(&scp->rw);
scp->waitCount = 0;
#ifdef USE_BPLUS
scp->dirBplus = NULL;
- scp->dirDataVersion = -1;
+ scp->dirDataVersion = CM_SCACHE_VERSION_BAD;
#endif
scp->waitQueueT = NULL;
scp->flags &= ~CM_SCACHEFLAG_WAITING;
scp->group = 0;
scp->unixModeBits = 0;
scp->anyAccess = 0;
- scp->dataVersion = 0;
- scp->bufDataVersionLow = 0;
+ scp->dataVersion = CM_SCACHE_VERSION_BAD;
+ scp->bufDataVersionLow = CM_SCACHE_VERSION_BAD;
if (dscp) {
scp->parentVnode = dscp->fid.vnode;
dataVersion <<= 32;
dataVersion |= statusp->DataVersion;
- if (!(flags & CM_MERGEFLAG_FORCE) && dataVersion < scp->dataVersion) {
+ if (!(flags & CM_MERGEFLAG_FORCE) &&
+ dataVersion < scp->dataVersion &&
+ scp->dataVersion != CM_SCACHE_VERSION_BAD) {
struct cm_cell *cellp;
cellp = cm_FindCellByID(scp->fid.cell, 0);
osi_queue_t * waitQueueT; /* locked by cm_scacheLock */
} cm_scache_t;
+/* dataVersion */
+#define CM_SCACHE_VERSION_BAD 0xFFFFFFFFFFFFFFFF
+
/* mask field - tell what has been modified */
#define CM_SCACHEMASK_CLIENTMODTIME 1 /* client mod time */
#define CM_SCACHEMASK_LENGTH 2 /* length */
#define CM_SCACHEMASK_TRUNCPOS 4 /* truncation position */
/* fileType values */
+#define CM_SCACHETYPE_UNKNOWN 0 /* unknown */
#define CM_SCACHETYPE_FILE 1 /* a file */
#define CM_SCACHETYPE_DIRECTORY 2 /* a dir */
#define CM_SCACHETYPE_SYMLINK 3 /* a symbolic link */
(count >= buf_bufferSize ||
LargeIntegerGreaterThanOrEqualTo(LargeIntegerAdd(offset, ConvertLongToLargeInteger(count)), minLength))) {
if (count < buf_bufferSize
- && bufferp->dataVersion == -1)
+ && bufferp->dataVersion == CM_BUF_VERSION_BAD)
memset(bufferp->datap, 0,
buf_bufferSize);
bufferp->dataVersion = scp->dataVersion;