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,
|