Print this page
NEX-5669 xdr_READDIR4res() bypass the XDR mblk API
Reviewed by: Rick McNeal <rick.mcneal@nexenta.com>
Reviewed by: Yuri Pankov <yuri.pankov@nexenta.com>
NEX-3097 IOPS, bandwidth, and latency kstats for NFS server
Reviewed by: Josef 'Jeff' Sipek <josef.sipek@nexenta.com>


4284                     (uint_t *)&objp->nfs_argop4_u.oprelease_lockowner.
4285                     lock_owner.owner_len, NFS4_OPAQUE_LIMIT));
4286         case OP_ILLEGAL:
4287                 return (TRUE);
4288         }
4289         return (FALSE);
4290 }
4291 
4292 static bool_t
4293 xdr_cnfs_argop4_wrap(XDR *xdrs, nfs_argop4 *objp)
4294 {
4295         if (!xdr_int(xdrs, (int *)&objp->argop))
4296                 return (FALSE);
4297 
4298         return (xdr_nfs_argop4(xdrs, objp));
4299 }
4300 
4301 static bool_t
4302 xdr_snfs_argop4(XDR *xdrs, nfs_argop4 *objp)
4303 {






4304         if (!xdr_int(xdrs, (int *)&objp->argop))
4305                 return (FALSE);
4306 
4307         switch (objp->argop) {
4308         case OP_PUTFH:
4309                 return (xdr_decode_nfs_fh4(xdrs,
4310                     &objp->nfs_argop4_u.opputfh.object));

4311         default:
4312                 return (xdr_nfs_argop4(xdrs, objp));

4313         }





4314 }
4315 
4316 /*
4317  * Client side encode only arg op processing
4318  */
4319 static bool_t
4320 xdr_cnfs_argop4(XDR *xdrs, nfs_argop4 *objp)
4321 {
4322         int len;
4323         int op;
4324         nfs4_sharedfh_t *sfh;
4325         mntinfo4_t *mi;
4326         rpc_inline_t *ptr;
4327 
4328         ASSERT(xdrs->x_op == XDR_ENCODE);
4329 
4330         /*
4331          * Special case the private pseudo ops
4332          */
4333         if (!(objp->argop & SUNW_PRIVATE_OP))


4745         case OP_SETCLIENTID_CONFIRM:
4746                 return (xdr_int(xdrs,
4747                     (int32_t *)&objp->nfs_resop4_u.opsetclientid_confirm.
4748                     status));
4749         case OP_VERIFY:
4750                 return (xdr_int(xdrs,
4751                     (int32_t *)&objp->nfs_resop4_u.opverify.status));
4752         case OP_RELEASE_LOCKOWNER:
4753                 return (xdr_int(xdrs,
4754                     (int32_t *)&objp->nfs_resop4_u.oprelease_lockowner.status));
4755         case OP_ILLEGAL:
4756                 return (xdr_int(xdrs,
4757                     (int32_t *)&objp->nfs_resop4_u.opillegal.status));
4758         }
4759         return (FALSE);
4760 }
4761 
4762 static bool_t
4763 xdr_snfs_resop4(XDR *xdrs, nfs_resop4 *objp)
4764 {






4765         if (!xdr_int(xdrs, (int *)&objp->resop))
4766                 return (FALSE);
4767 
4768         switch (objp->resop) {
4769         case OP_GETFH:
4770                 if (!XDR_PUTINT32(xdrs,
4771                     (int32_t *)&objp->nfs_resop4_u.opgetfh.status))
4772                         return (FALSE);
4773                 if (objp->nfs_resop4_u.opgetfh.status != NFS4_OK)
4774                         return (TRUE);
4775                 return (xdr_encode_nfs_fh4(xdrs,
4776                     &objp->nfs_resop4_u.opgetfh.object));


4777         default:
4778                 return (xdr_nfs_resop4(xdrs, objp));

4779         }





4780 }
4781 
4782 static bool_t
4783 xdr_nfs_resop4_clnt(XDR *xdrs, nfs_resop4 *objp, nfs_argop4 *aobjp)
4784 {
4785         if (!xdr_int(xdrs, (int *)&objp->resop))
4786                 return (FALSE);
4787         /*
4788          * These should be ordered by frequency of use
4789          */
4790         switch (objp->resop) {
4791         case OP_PUTFH:
4792                 return (xdr_int(xdrs,
4793                     (int32_t *)&objp->nfs_resop4_u.opputfh.status));
4794         case OP_GETATTR:
4795                 if (!xdr_int(xdrs,
4796                     (int32_t *)&objp->nfs_resop4_u.opgetattr.status))
4797                         return (FALSE);
4798                 if (objp->nfs_resop4_u.opgetattr.status != NFS4_OK)
4799                         return (TRUE);




4284                     (uint_t *)&objp->nfs_argop4_u.oprelease_lockowner.
4285                     lock_owner.owner_len, NFS4_OPAQUE_LIMIT));
4286         case OP_ILLEGAL:
4287                 return (TRUE);
4288         }
4289         return (FALSE);
4290 }
4291 
4292 static bool_t
4293 xdr_cnfs_argop4_wrap(XDR *xdrs, nfs_argop4 *objp)
4294 {
4295         if (!xdr_int(xdrs, (int *)&objp->argop))
4296                 return (FALSE);
4297 
4298         return (xdr_nfs_argop4(xdrs, objp));
4299 }
4300 
4301 static bool_t
4302 xdr_snfs_argop4(XDR *xdrs, nfs_argop4 *objp)
4303 {
4304         uint_t pos;
4305         bool_t ret;
4306 
4307         if (xdrs->x_op == XDR_DECODE)
4308                 pos = XDR_GETPOS(xdrs);
4309 
4310         if (!xdr_int(xdrs, (int *)&objp->argop))
4311                 return (FALSE);
4312 
4313         switch (objp->argop) {
4314         case OP_PUTFH:
4315                 ret = xdr_decode_nfs_fh4(xdrs,
4316                     &objp->nfs_argop4_u.opputfh.object);
4317                 break;
4318         default:
4319                 ret = xdr_nfs_argop4(xdrs, objp);
4320                 break;
4321         }
4322 
4323         if (ret && xdrs->x_op == XDR_DECODE)
4324                 objp->opsize = XDR_GETPOS(xdrs) - pos;
4325 
4326         return (ret);
4327 }
4328 
4329 /*
4330  * Client side encode only arg op processing
4331  */
4332 static bool_t
4333 xdr_cnfs_argop4(XDR *xdrs, nfs_argop4 *objp)
4334 {
4335         int len;
4336         int op;
4337         nfs4_sharedfh_t *sfh;
4338         mntinfo4_t *mi;
4339         rpc_inline_t *ptr;
4340 
4341         ASSERT(xdrs->x_op == XDR_ENCODE);
4342 
4343         /*
4344          * Special case the private pseudo ops
4345          */
4346         if (!(objp->argop & SUNW_PRIVATE_OP))


4758         case OP_SETCLIENTID_CONFIRM:
4759                 return (xdr_int(xdrs,
4760                     (int32_t *)&objp->nfs_resop4_u.opsetclientid_confirm.
4761                     status));
4762         case OP_VERIFY:
4763                 return (xdr_int(xdrs,
4764                     (int32_t *)&objp->nfs_resop4_u.opverify.status));
4765         case OP_RELEASE_LOCKOWNER:
4766                 return (xdr_int(xdrs,
4767                     (int32_t *)&objp->nfs_resop4_u.oprelease_lockowner.status));
4768         case OP_ILLEGAL:
4769                 return (xdr_int(xdrs,
4770                     (int32_t *)&objp->nfs_resop4_u.opillegal.status));
4771         }
4772         return (FALSE);
4773 }
4774 
4775 static bool_t
4776 xdr_snfs_resop4(XDR *xdrs, nfs_resop4 *objp)
4777 {
4778         uint_t pos;
4779         bool_t ret;
4780 
4781         if (xdrs->x_op == XDR_ENCODE)
4782                 pos = XDR_GETPOS(xdrs);
4783 
4784         if (!xdr_int(xdrs, (int *)&objp->resop))
4785                 return (FALSE);
4786 
4787         switch (objp->resop) {
4788         case OP_GETFH:
4789                 if (!XDR_PUTINT32(xdrs,
4790                     (int32_t *)&objp->nfs_resop4_u.opgetfh.status))
4791                         return (FALSE);
4792                 if (objp->nfs_resop4_u.opgetfh.status != NFS4_OK)
4793                         ret = TRUE;
4794                 else
4795                         ret = xdr_encode_nfs_fh4(xdrs,
4796                             &objp->nfs_resop4_u.opgetfh.object);
4797                 break;
4798         default:
4799                 ret = xdr_nfs_resop4(xdrs, objp);
4800                 break;
4801         }
4802 
4803         if (ret && xdrs->x_op == XDR_ENCODE)
4804                 objp->opsize = XDR_GETPOS(xdrs) - pos;
4805 
4806         return (ret);
4807 }
4808 
4809 static bool_t
4810 xdr_nfs_resop4_clnt(XDR *xdrs, nfs_resop4 *objp, nfs_argop4 *aobjp)
4811 {
4812         if (!xdr_int(xdrs, (int *)&objp->resop))
4813                 return (FALSE);
4814         /*
4815          * These should be ordered by frequency of use
4816          */
4817         switch (objp->resop) {
4818         case OP_PUTFH:
4819                 return (xdr_int(xdrs,
4820                     (int32_t *)&objp->nfs_resop4_u.opputfh.status));
4821         case OP_GETATTR:
4822                 if (!xdr_int(xdrs,
4823                     (int32_t *)&objp->nfs_resop4_u.opgetattr.status))
4824                         return (FALSE);
4825                 if (objp->nfs_resop4_u.opgetattr.status != NFS4_OK)
4826                         return (TRUE);