HKEY parmKey;
if (osi_Once(&once)) {
- lock_InitializeRWLock(&cm_connLock, "connection global lock");
+ lock_InitializeRWLock(&cm_connLock, "connection global lock",
+ LOCK_HIERARCHY_CONN_GLOBAL);
/* keisa - read timeout value for lanmanworkstation service.
* jaltman - as per
if (tsrp->server == serverp && tsrp->status == srv_not_busy) {
tsrp->status = srv_busy;
if (fidp) { /* File Server query */
+ lock_ReleaseWrite(&cm_serverLock);
code = cm_FindVolumeByID(cellp, fidp->volume, userp, reqp,
CM_GETVOL_FLAG_NO_LRU_UPDATE,
&volp);
if (code == 0)
statep = cm_VolumeStateByID(volp, fidp->volume);
+ lock_ObtainWrite(&cm_serverLock);
}
break;
}
}
if (fidp) { /* File Server query */
+ lock_ReleaseWrite(&cm_serverLock);
code = cm_FindVolumeByID(cellp, fidp->volume, userp, reqp,
CM_GETVOL_FLAG_NO_LRU_UPDATE,
&volp);
if (code == 0)
cm_VolumeStateByID(volp, fidp->volume);
+ lock_ObtainWrite(&cm_serverLock);
}
}
}
case UAEACCES : s = "UAEACCES"; break;
case ENOENT : s = "ENOENT"; break;
case UAENOENT : s = "UAENOENT"; break;
+ case EEXIST : s = "EEXIST"; break;
+ case UAEEXIST : s = "UAEEXIST"; break;
case VICECONNBAD : s = "VICECONNBAD"; break;
case VICETOKENDEAD : s = "VICETOKENDEAD"; break;
case WSAEWOULDBLOCK : s = "WSAEWOULDBLOCK"; break;
}
if (ucellp->flags & CM_UCELLFLAG_RXKAD) {
secIndex = 2;
- if (cryptall) {
- tcp->cryptlevel = rxkad_crypt;
- } else {
+ switch (cryptall) {
+ case 0:
tcp->cryptlevel = rxkad_clear;
+ break;
+ case 2:
+ tcp->cryptlevel = rxkad_auth;
+ break;
+ default:
+ tcp->cryptlevel = rxkad_crypt;
}
secObjp = rxkad_NewClientSecurityObject(tcp->cryptlevel,
&ucellp->sessionKey, ucellp->kvno,
serverp->connsp = tcp;
cm_HoldUser(userp);
tcp->userp = userp;
- lock_InitializeMutex(&tcp->mx, "cm_conn_t mutex");
+ lock_InitializeMutex(&tcp->mx, "cm_conn_t mutex", LOCK_HIERARCHY_CONN);
lock_ObtainMutex(&tcp->mx);
tcp->serverp = serverp;
tcp->cryptlevel = rxkad_clear;
lock_ObtainMutex(&tcp->mx);
if ((tcp->flags & CM_CONN_FLAG_FORCE_NEW) ||
(tcp->ucgen < ucellp->gen) ||
- (tcp->cryptlevel != (cryptall ? (ucellp->flags & CM_UCELLFLAG_RXKAD ? rxkad_crypt : rxkad_clear) : rxkad_clear)))
+ (tcp->cryptlevel != (ucellp->flags & CM_UCELLFLAG_RXKAD ? (cryptall == 1 ? rxkad_crypt : (cryptall == 2 ? rxkad_auth : rxkad_clear)) : rxkad_clear)))
{
if (tcp->ucgen < ucellp->gen)
osi_Log0(afsd_logp, "cm_ConnByServer replace connection due to token update");