Windows: CM_ERROR_INEXACT_MATCH is not a fatal error
[openafs.git] / src / WINNT / afsd / cm_ioctl.c
index 87ce2b1..c6230a4 100644 (file)
@@ -781,13 +781,6 @@ cm_IoctlGetVolumeStatus(struct cm_ioctl *ioctlp, struct cm_user *userp, cm_scach
         if (code)
             return code;
 
-        lock_ObtainWrite(&vscp->rw);
-        code = cm_SyncOp(vscp, NULL, userp, reqp, PRSFS_READ,
-                          CM_SCACHESYNC_NEEDCALLBACK | CM_SCACHESYNC_GETSTATUS);
-        lock_ReleaseWrite(&vscp->rw);
-        if (code)
-            return code;
-
         Name = volName;
         OfflineMsg = offLineMsg;
         MOTD = motd;
@@ -803,9 +796,6 @@ cm_IoctlGetVolumeStatus(struct cm_ioctl *ioctlp, struct cm_user *userp, cm_scach
         } while (cm_Analyze(connp, userp, reqp, &vfid, NULL, 0, NULL, NULL, NULL, NULL, code));
         code = cm_MapRPCError(code, reqp);
 
-        lock_ObtainWrite(&vscp->rw);
-        cm_SyncOpDone(vscp, NULL, CM_SCACHESYNC_NEEDCALLBACK | CM_SCACHESYNC_GETSTATUS);
-        lock_ReleaseWrite(&vscp->rw);
         cm_ReleaseSCache(vscp);
     }
 
@@ -1099,7 +1089,7 @@ cm_IoctlStatMountPoint(struct cm_ioctl *ioctlp, struct cm_user *userp, cm_scache
     cp = cm_ParseIoctlStringAlloc(ioctlp, NULL);
 
     code = cm_Lookup(dscp, cp[0] ? cp : L".", CM_FLAG_NOMOUNTCHASE, userp, reqp, &scp);
-    if (code)
+    if (code && code != CM_ERROR_INEXACT_MATCH)
         goto done_2;
 
     lock_ObtainWrite(&scp->rw);
@@ -1156,7 +1146,7 @@ cm_IoctlDeleteMountPoint(struct cm_ioctl *ioctlp, struct cm_user *userp, cm_scac
     code = cm_Lookup(dscp, cp[0] ? cp : L".", CM_FLAG_NOMOUNTCHASE, userp, reqp, &scp);
 
     /* if something went wrong, bail out now */
-    if (code)
+    if (code && code != CM_ERROR_INEXACT_MATCH)
         goto done3;
 
     lock_ObtainWrite(&scp->rw);
@@ -1307,7 +1297,9 @@ cm_IoctlCheckServers(struct cm_ioctl *ioctlp, struct cm_user *userp)
     /* now return the current down server list */
     cp = ioctlp->outDatap;
     lock_ObtainRead(&cm_serverLock);
-    for (tsp = cm_allServersp; tsp; tsp=tsp->allNextp) {
+    for (tsp = cm_serversAllFirstp;
+        tsp;
+        tsp = (cm_server_t *)osi_QNext(&tsp->allq)) {
         if (cellp && tsp->cellp != cellp)
             continue;  /* cell spec'd and wrong */
         if (tsp->flags & CM_SERVERFLAG_DOWN) {
@@ -1316,7 +1308,9 @@ cm_IoctlCheckServers(struct cm_ioctl *ioctlp, struct cm_user *userp)
              * is up, do not report the server as down.
              */
             if (tsp->type == CM_SERVER_FILE) {
-                for (csp = cm_allServersp; csp; csp=csp->allNextp) {
+                for (csp = cm_serversAllFirstp;
+                    csp;
+                    csp = (cm_server_t *)osi_QNext(&csp->allq)) {
                     if (csp->type == CM_SERVER_FILE &&
                         !(csp->flags & CM_SERVERFLAG_DOWN) &&
                         afs_uuid_equal(&tsp->uuid, &csp->uuid)) {
@@ -2003,7 +1997,9 @@ cm_IoctlGetSPrefs(struct cm_ioctl *ioctlp, struct cm_user *userp)
 
     lock_ObtainRead(&cm_serverLock); /* get server lock */
 
-    for (tsp=cm_allServersp, i=0; tsp && noServers; tsp=tsp->allNextp,i++){
+    for (tsp = cm_serversAllFirstp, i=0;
+        tsp && noServers;
+        tsp = (cm_server_t *)osi_QNext(&tsp->allq),i++){
         if (spin->offset > i) {
             continue;    /* catch up to where we left off */
         }
@@ -2249,7 +2245,7 @@ cm_IoctlListlink(struct cm_ioctl *ioctlp, struct cm_user *userp, cm_scache_t *ds
     clientp = cm_Utf8ToClientStringAlloc(cp, -1, NULL);
     code = cm_Lookup(dscp, clientp[0] ? clientp : L".", CM_FLAG_NOMOUNTCHASE, userp, reqp, &scp);
     free(clientp);
-    if (code)
+    if (code && code != CM_ERROR_INEXACT_MATCH)
         return code;
 
     /* Check that it's a real symlink */
@@ -2318,7 +2314,7 @@ cm_IoctlIslink(struct cm_ioctl *ioctlp, struct cm_user *userp, cm_scache_t *dscp
     clientp = cm_Utf8ToClientStringAlloc(cp, -1, NULL);
     code = cm_Lookup(dscp, clientp[0] ? clientp : L".", CM_FLAG_NOMOUNTCHASE, userp, reqp, &scp);
     free(clientp);
-    if (code)
+    if (code && code != CM_ERROR_INEXACT_MATCH)
         return code;
 
     /* Check that it's a real symlink */
@@ -2356,7 +2352,7 @@ cm_IoctlDeletelink(struct cm_ioctl *ioctlp, struct cm_user *userp, cm_scache_t *
     code = cm_Lookup(dscp, clientp[0] ? clientp : L".", CM_FLAG_NOMOUNTCHASE, userp, reqp, &scp);
 
     /* if something went wrong, bail out now */
-    if (code)
+    if (code && code != CM_ERROR_INEXACT_MATCH)
         goto done3;
 
     lock_ObtainWrite(&scp->rw);