543         ncg->nfs4_callback_stats.cb_illegal.value.ui64++;
 544         resop->resop = OP_CB_ILLEGAL;
 545         *cs->statusp = resp->status = NFS4ERR_OP_ILLEGAL;
 546 }
 547 
 548 static void
 549 cb_compound(CB_COMPOUND4args *args, CB_COMPOUND4res *resp, struct svc_req *req,
 550     struct nfs4_callback_globals *ncg)
 551 {
 552         uint_t i;
 553         struct compound_state cs;
 554         nfs_cb_argop4 *argop;
 555         nfs_cb_resop4 *resop, *new_res;
 556         uint_t op;
 557 
 558         bzero(&cs, sizeof (cs));
 559         cs.statusp = &resp->status;
 560         cs.cont = TRUE;
 561 
 562         /*
 563          * Form a reply tag by copying over the reqeuest tag.
 564          */
 565         resp->tag.utf8string_len = args->tag.utf8string_len;
 566         resp->tag.utf8string_val = kmem_alloc(resp->tag.utf8string_len,
 567             KM_SLEEP);
 568         bcopy(args->tag.utf8string_val, resp->tag.utf8string_val,
 569             args->tag.utf8string_len);
 570 
 571         /*
 572          * XXX for now, minorversion should be zero
 573          */
 574         if (args->minorversion != CB4_MINORVERSION) {
 575                 resp->array_len = 0;
 576                 resp->array = NULL;
 577                 resp->status = NFS4ERR_MINOR_VERS_MISMATCH;
 578                 return;
 579         }
 580 
 581 #ifdef DEBUG
 582         /*
 583          * Verify callback_ident.  It doesn't really matter if it's wrong
 584          * because we don't really use callback_ident -- we use prog number
 585          * of the RPC request instead.  In this case, just print a DEBUG
 586          * console message to reveal brokenness of cbclient (at bkoff/cthon).
 587          */
 588         if (args->callback_ident != req->rq_prog)
 589                 zcmn_err(getzoneid(), CE_WARN,
 
 | 
 
 
 543         ncg->nfs4_callback_stats.cb_illegal.value.ui64++;
 544         resop->resop = OP_CB_ILLEGAL;
 545         *cs->statusp = resp->status = NFS4ERR_OP_ILLEGAL;
 546 }
 547 
 548 static void
 549 cb_compound(CB_COMPOUND4args *args, CB_COMPOUND4res *resp, struct svc_req *req,
 550     struct nfs4_callback_globals *ncg)
 551 {
 552         uint_t i;
 553         struct compound_state cs;
 554         nfs_cb_argop4 *argop;
 555         nfs_cb_resop4 *resop, *new_res;
 556         uint_t op;
 557 
 558         bzero(&cs, sizeof (cs));
 559         cs.statusp = &resp->status;
 560         cs.cont = TRUE;
 561 
 562         /*
 563          * Form a reply tag by copying over the request tag.
 564          */
 565         resp->tag.utf8string_len = args->tag.utf8string_len;
 566         if (args->tag.utf8string_len != 0) {
 567                 resp->tag.utf8string_val =
 568                     kmem_alloc(resp->tag.utf8string_len, KM_SLEEP);
 569                 bcopy(args->tag.utf8string_val, resp->tag.utf8string_val,
 570                     args->tag.utf8string_len);
 571         } else {
 572                 resp->tag.utf8string_val = NULL;
 573         }
 574 
 575         /*
 576          * XXX for now, minorversion should be zero
 577          */
 578         if (args->minorversion != CB4_MINORVERSION) {
 579                 resp->array_len = 0;
 580                 resp->array = NULL;
 581                 resp->status = NFS4ERR_MINOR_VERS_MISMATCH;
 582                 return;
 583         }
 584 
 585 #ifdef DEBUG
 586         /*
 587          * Verify callback_ident.  It doesn't really matter if it's wrong
 588          * because we don't really use callback_ident -- we use prog number
 589          * of the RPC request instead.  In this case, just print a DEBUG
 590          * console message to reveal brokenness of cbclient (at bkoff/cthon).
 591          */
 592         if (args->callback_ident != req->rq_prog)
 593                 zcmn_err(getzoneid(), CE_WARN,
 
 |