From 30f3ae458cb8ad84ceb1a8e2c6acc45af535d08e Mon Sep 17 00:00:00 2001 From: Derrick Brashear Date: Tue, 4 Mar 2003 11:14:13 +0000 Subject: [PATCH] new-giveup-all-callbacks-rpc-20030303 untested. will try it shortly. allow a client to give back all of its callbacks without enumerating them --- src/fsint/afsint.xg | 2 ++ src/viced/afsfileprocs.c | 51 +++++++++++++++++++++++++++++++++--------------- 2 files changed, 37 insertions(+), 16 deletions(-) diff --git a/src/fsint/afsint.xg b/src/fsint/afsint.xg index bc95cac..a225783 100644 --- a/src/fsint/afsint.xg +++ b/src/fsint/afsint.xg @@ -692,3 +692,5 @@ StoreData64( AFSVolSync *Sync ) split = 65538; +GiveUpAllCallBacks( +) = 65539; diff --git a/src/viced/afsfileprocs.c b/src/viced/afsfileprocs.c index 31e423f..2aa0e35 100644 --- a/src/viced/afsfileprocs.c +++ b/src/viced/afsfileprocs.c @@ -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, -- 1.9.4