new-giveup-all-callbacks-rpc-20030303
authorDerrick Brashear <shadow@dementia.org>
Tue, 4 Mar 2003 11:14:13 +0000 (11:14 +0000)
committerDerrick Brashear <shadow@dementia.org>
Tue, 4 Mar 2003 11:14:13 +0000 (11:14 +0000)
untested. will try it shortly. allow a client to give back all of its callbacks
without enumerating them

src/fsint/afsint.xg
src/viced/afsfileprocs.c

index bc95cac..a225783 100644 (file)
@@ -692,3 +692,5 @@ StoreData64(
   AFSVolSync *Sync
 ) split = 65538;
 
+GiveUpAllCallBacks(
+) = 65539;
index 31e423f..2aa0e35 100644 (file)
@@ -5860,9 +5860,9 @@ afs_int32 SRXAFS_GetXStats(struct rx_call *a_call,
 } /*SRXAFS_GetXStats*/
 
 
-afs_int32 SRXAFS_GiveUpCallBacks (struct rx_call *acall,
-                                 struct AFSCBFids *FidArray,
-                                 struct AFSCBs *CallBackArray)
+static afs_int32 common_GiveUpCallBacks (struct rx_call *acall,
+                                        struct AFSCBFids *FidArray,
+                                        struct AFSCBs *CallBackArray)
 {
     afs_int32 errorCode;
     register int i;
@@ -5892,20 +5892,26 @@ afs_int32 SRXAFS_GiveUpCallBacks (struct rx_call *acall,
     if ((errorCode = CallPreamble(acall, ACTIVECALL, &tcon)))
        goto Bad_GiveUpCallBacks;
 
-    if (FidArray->AFSCBFids_len < CallBackArray->AFSCBs_len) {
-       ViceLog(0, ("GiveUpCallBacks: #Fids %d < #CallBacks %d, host=%x\n", 
-                  FidArray->AFSCBFids_len, CallBackArray->AFSCBs_len, 
-                  (tcon->peer ? tcon->peer->host : 0)));
-       errorCode = EINVAL;
-       goto Bad_GiveUpCallBacks;
-    }
+    if (!FidArray && !CallBackArray) {
+       errorCode = GetClient(tcon, &client);
+        if (!errorCode) 
+           DeleteAllCallBacks_r(client->host, 1);
+    } else {
+       if (FidArray->AFSCBFids_len < CallBackArray->AFSCBs_len) {
+           ViceLog(0, ("GiveUpCallBacks: #Fids %d < #CallBacks %d, host=%x\n", 
+                       FidArray->AFSCBFids_len, CallBackArray->AFSCBs_len, 
+                       (tcon->peer ? tcon->peer->host : 0)));
+           errorCode = EINVAL;
+           goto Bad_GiveUpCallBacks;
+       }
 
-    errorCode = GetClient(tcon, &client);
-    if (!errorCode) {
-       for (i=0; i < FidArray->AFSCBFids_len; i++) {
-         register struct AFSFid *fid = &(FidArray->AFSCBFids_val[i]);
-         DeleteCallBack(client->host, fid);
-       }
+       errorCode = GetClient(tcon, &client);
+       if (!errorCode) {
+           for (i=0; i < FidArray->AFSCBFids_len; i++) {
+               register struct AFSFid *fid = &(FidArray->AFSCBFids_val[i]);
+               DeleteCallBack(client->host, fid);
+           }
+       }
     }
 
 Bad_GiveUpCallBacks:
@@ -5931,8 +5937,21 @@ Bad_GiveUpCallBacks:
 out:
     return errorCode;
 
+} /*common_GiveUpCallBacks*/
+
+
+afs_int32 SRXAFS_GiveUpCallBacks (struct rx_call *acall,
+                                 struct AFSCBFids *FidArray,
+                                 struct AFSCBs *CallBackArray)
+{
+    return common_GiveUpCallBacks(acall, FidArray, CallBackArray);
 } /*SRXAFS_GiveUpCallBacks*/
 
+afs_int32 SRXAFS_GiveUpAllCallBacks (struct rx_call *acall)
+{
+    return common_GiveUpCallBacks(acall, 0, 0);
+} /*SRXAFS_GiveUpAllCallBacks*/
+
 
 afs_int32 SRXAFS_NGetVolumeInfo (struct rx_call *acall,
                                 char *avolid,