} /*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;
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:
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,