]> git.michaelhowe.org Git - packages/o/openafs.git/commitdiff
windows-cm-makedir-20080724
authorJeffrey Altman <jaltman@secure-endpoints.com>
Thu, 24 Jul 2008 18:54:53 +0000 (18:54 +0000)
committerJeffrey Altman <jaltman@secure-endpoints.com>
Thu, 24 Jul 2008 18:54:53 +0000 (18:54 +0000)
LICENSE MIT

Extend the cm_MakeDir() function signature to permit the (optional)
return of the cm_scache_t object that was created by the operation
in the same way that cm_Create() does.

Make the return of the cm_scache_t by cm_Create() optional although
it is never used that way.

In both cm_Create() and cm_MakeDir() avoid releasing the cm_scache_t
object until we are actually finished with it.

src/WINNT/afsd/cm_vnodeops.c
src/WINNT/afsd/cm_vnodeops.h
src/WINNT/afsd/smb.c
src/WINNT/afsd/smb3.c

index 189c1af76cfbce0fc21bbe1e3f80fa111f3ec4a5..0ba90caf321433a21be85c5bb04167cc0886e9fd 100644 (file)
@@ -2701,7 +2701,6 @@ long cm_Create(cm_scache_t *dscp, clientchar_t *cnamep, long flags, cm_attr_t *a
                 didEnd = 1;     
             }       
             lock_ReleaseWrite(&scp->rw);
-            *scpp = scp;
         }
     }
 
@@ -2720,6 +2719,12 @@ long cm_Create(cm_scache_t *dscp, clientchar_t *cnamep, long flags, cm_attr_t *a
     if (fnamep)
         free(fnamep);
 
+    if (scp) {
+        if (scpp)
+            *scpp = scp;
+        else
+            cm_ReleaseSCache(scp);
+    }
     return code;
 }       
 
@@ -2747,7 +2752,7 @@ long cm_FSync(cm_scache_t *scp, cm_user_t *userp, cm_req_t *reqp)
 }
 
 long cm_MakeDir(cm_scache_t *dscp, clientchar_t *cnamep, long flags, cm_attr_t *attrp,
-                 cm_user_t *userp, cm_req_t *reqp)
+                cm_user_t *userp, cm_req_t *reqp, cm_scache_t **scpp)
 {
     cm_conn_t *connp;
     long code;
@@ -2860,7 +2865,6 @@ long cm_MakeDir(cm_scache_t *dscp, clientchar_t *cnamep, long flags, cm_attr_t *
                 didEnd = 1;             
             }
             lock_ReleaseWrite(&scp->rw);
-            cm_ReleaseSCache(scp);
         }
     }
 
@@ -2878,6 +2882,13 @@ long cm_MakeDir(cm_scache_t *dscp, clientchar_t *cnamep, long flags, cm_attr_t *
 
     free(fnamep);
 
+    if (scp) {
+        if (scpp)
+            *scpp = scp;
+        else
+            cm_ReleaseSCache(scp);
+    }
+
     /* and return error code */
     return code;
 }       
index 8fcd51f55e61bcc1f13b14d9cf60ca3844861de4..1b780c6e2303a7b69b43bd5acf70609fabac3545 100644 (file)
@@ -124,7 +124,8 @@ extern long cm_ApplyDir(cm_scache_t *scp, cm_DirFuncp_t funcp, void *parmp,
                         cm_scache_t **retscp);
 
 extern long cm_MakeDir(cm_scache_t *dscp, clientchar_t *lastNamep, long flags,
-                       cm_attr_t *attrp, cm_user_t *userp, cm_req_t *reqp);
+                       cm_attr_t *attrp, cm_user_t *userp, cm_req_t *reqp, 
+                       cm_scache_t **scpp);
 
 extern long cm_RemoveDir(cm_scache_t *dscp, fschar_t *lastNamep, clientchar_t *originalNamep,
                          cm_user_t *userp, cm_req_t *reqp);
index 4b270a7e773f9b2fcaf019288ff87bd4c2565693..6005d9f37f8e96aaa3c295363b082f4161bbe2dd 100644 (file)
@@ -7417,7 +7417,7 @@ long smb_ReceiveCoreMakeDir(smb_vc_t *vcp, smb_packet_t *inp, smb_packet_t *outp
         
     setAttr.mask = CM_ATTRMASK_CLIENTMODTIME;
     setAttr.clientModTime = time(NULL);
-    code = cm_MakeDir(dscp, lastNamep, 0, &setAttr, userp, &req);
+    code = cm_MakeDir(dscp, lastNamep, 0, &setAttr, userp, &req, NULL);
     if (code == 0 && (dscp->flags & CM_SCACHEFLAG_ANYWATCH))
         smb_NotifyChange(FILE_ACTION_ADDED,
                          FILE_NOTIFY_CHANGE_DIR_NAME,
index 3744bce5dabfc705a522e225ffbd097950a2619c..5974819a7060e1f00cd2cc604d055c4779f66ecf 100644 (file)
@@ -7201,7 +7201,7 @@ long smb_ReceiveNTCreateX(smb_vc_t *vcp, smb_packet_t *inp, smb_packet_t *outp)
                 continue; /* the supplied path can't have consecutive slashes either , but */
 
             /* cp is the next component to be created. */
-            code = cm_MakeDir(tscp1, cp, 0, &setAttr, userp, &req);
+            code = cm_MakeDir(tscp1, cp, 0, &setAttr, userp, &req, NULL);
             if (code == 0 && (tscp1->flags & CM_SCACHEFLAG_ANYWATCH))
                 smb_NotifyChange(FILE_ACTION_ADDED,
                                  FILE_NOTIFY_CHANGE_DIR_NAME,
@@ -7897,7 +7897,7 @@ long smb_ReceiveNTTranCreate(smb_vc_t *vcp, smb_packet_t *inp, smb_packet_t *out
         openAction = 2;                /* created directory */
         setAttr.mask = CM_ATTRMASK_CLIENTMODTIME;
         setAttr.clientModTime = time(NULL);
-        code = cm_MakeDir(dscp, lastNamep, 0, &setAttr, userp, &req);
+        code = cm_MakeDir(dscp, lastNamep, 0, &setAttr, userp, &req, NULL);
         if (code == 0 && (dscp->flags & CM_SCACHEFLAG_ANYWATCH))
             smb_NotifyChange(FILE_ACTION_ADDED,
                               FILE_NOTIFY_CHANGE_DIR_NAME,