nfs3xdr.c (dae9a6cab8009e526570e7477ce858dcdfeb256e) | nfs3xdr.c (16c663642c7ec03cd4cee5fec520bb69e97babe4) |
---|---|
1// SPDX-License-Identifier: GPL-2.0 2/* 3 * XDR support for nfsd/protocol version 3. 4 * 5 * Copyright (C) 1995, 1996, 1997 Olaf Kirch <okir@monad.swb.de> 6 * 7 * 2003-08-09 Jamie Lokier: Use htonl() for nanoseconds, not htons()! 8 */ --- 543 unchanged lines hidden (view full) --- 552 nfsd4_change_attribute(&fhp->fh_post_attr, inode); 553} 554 555/* 556 * XDR decode functions 557 */ 558 559int | 1// SPDX-License-Identifier: GPL-2.0 2/* 3 * XDR support for nfsd/protocol version 3. 4 * 5 * Copyright (C) 1995, 1996, 1997 Olaf Kirch <okir@monad.swb.de> 6 * 7 * 2003-08-09 Jamie Lokier: Use htonl() for nanoseconds, not htons()! 8 */ --- 543 unchanged lines hidden (view full) --- 552 nfsd4_change_attribute(&fhp->fh_post_attr, inode); 553} 554 555/* 556 * XDR decode functions 557 */ 558 559int |
560nfs3svc_decode_fhandleargs(struct svc_rqst *rqstp, __be32 *p) | 560nfs3svc_decode_fhandleargs(struct svc_rqst *rqstp, struct xdr_stream *xdr) |
561{ | 561{ |
562 struct xdr_stream *xdr = &rqstp->rq_arg_stream; | |
563 struct nfsd_fhandle *args = rqstp->rq_argp; 564 565 return svcxdr_decode_nfs_fh3(xdr, &args->fh); 566} 567 568int | 562 struct nfsd_fhandle *args = rqstp->rq_argp; 563 564 return svcxdr_decode_nfs_fh3(xdr, &args->fh); 565} 566 567int |
569nfs3svc_decode_sattrargs(struct svc_rqst *rqstp, __be32 *p) | 568nfs3svc_decode_sattrargs(struct svc_rqst *rqstp, struct xdr_stream *xdr) |
570{ | 569{ |
571 struct xdr_stream *xdr = &rqstp->rq_arg_stream; | |
572 struct nfsd3_sattrargs *args = rqstp->rq_argp; 573 574 return svcxdr_decode_nfs_fh3(xdr, &args->fh) && 575 svcxdr_decode_sattr3(rqstp, xdr, &args->attrs) && 576 svcxdr_decode_sattrguard3(xdr, args); 577} 578 579int | 570 struct nfsd3_sattrargs *args = rqstp->rq_argp; 571 572 return svcxdr_decode_nfs_fh3(xdr, &args->fh) && 573 svcxdr_decode_sattr3(rqstp, xdr, &args->attrs) && 574 svcxdr_decode_sattrguard3(xdr, args); 575} 576 577int |
580nfs3svc_decode_diropargs(struct svc_rqst *rqstp, __be32 *p) | 578nfs3svc_decode_diropargs(struct svc_rqst *rqstp, struct xdr_stream *xdr) |
581{ | 579{ |
582 struct xdr_stream *xdr = &rqstp->rq_arg_stream; | |
583 struct nfsd3_diropargs *args = rqstp->rq_argp; 584 585 return svcxdr_decode_diropargs3(xdr, &args->fh, &args->name, &args->len); 586} 587 588int | 580 struct nfsd3_diropargs *args = rqstp->rq_argp; 581 582 return svcxdr_decode_diropargs3(xdr, &args->fh, &args->name, &args->len); 583} 584 585int |
589nfs3svc_decode_accessargs(struct svc_rqst *rqstp, __be32 *p) | 586nfs3svc_decode_accessargs(struct svc_rqst *rqstp, struct xdr_stream *xdr) |
590{ | 587{ |
591 struct xdr_stream *xdr = &rqstp->rq_arg_stream; | |
592 struct nfsd3_accessargs *args = rqstp->rq_argp; 593 594 if (!svcxdr_decode_nfs_fh3(xdr, &args->fh)) 595 return 0; 596 if (xdr_stream_decode_u32(xdr, &args->access) < 0) 597 return 0; 598 599 return 1; 600} 601 602int | 588 struct nfsd3_accessargs *args = rqstp->rq_argp; 589 590 if (!svcxdr_decode_nfs_fh3(xdr, &args->fh)) 591 return 0; 592 if (xdr_stream_decode_u32(xdr, &args->access) < 0) 593 return 0; 594 595 return 1; 596} 597 598int |
603nfs3svc_decode_readargs(struct svc_rqst *rqstp, __be32 *p) | 599nfs3svc_decode_readargs(struct svc_rqst *rqstp, struct xdr_stream *xdr) |
604{ | 600{ |
605 struct xdr_stream *xdr = &rqstp->rq_arg_stream; | |
606 struct nfsd3_readargs *args = rqstp->rq_argp; 607 608 if (!svcxdr_decode_nfs_fh3(xdr, &args->fh)) 609 return 0; 610 if (xdr_stream_decode_u64(xdr, &args->offset) < 0) 611 return 0; 612 if (xdr_stream_decode_u32(xdr, &args->count) < 0) 613 return 0; 614 615 return 1; 616} 617 618int | 601 struct nfsd3_readargs *args = rqstp->rq_argp; 602 603 if (!svcxdr_decode_nfs_fh3(xdr, &args->fh)) 604 return 0; 605 if (xdr_stream_decode_u64(xdr, &args->offset) < 0) 606 return 0; 607 if (xdr_stream_decode_u32(xdr, &args->count) < 0) 608 return 0; 609 610 return 1; 611} 612 613int |
619nfs3svc_decode_writeargs(struct svc_rqst *rqstp, __be32 *p) | 614nfs3svc_decode_writeargs(struct svc_rqst *rqstp, struct xdr_stream *xdr) |
620{ | 615{ |
621 struct xdr_stream *xdr = &rqstp->rq_arg_stream; | |
622 struct nfsd3_writeargs *args = rqstp->rq_argp; 623 u32 max_blocksize = svc_max_payload(rqstp); 624 625 if (!svcxdr_decode_nfs_fh3(xdr, &args->fh)) 626 return 0; 627 if (xdr_stream_decode_u64(xdr, &args->offset) < 0) 628 return 0; 629 if (xdr_stream_decode_u32(xdr, &args->count) < 0) --- 14 unchanged lines hidden (view full) --- 644 } 645 if (!xdr_stream_subsegment(xdr, &args->payload, args->count)) 646 return 0; 647 648 return 1; 649} 650 651int | 616 struct nfsd3_writeargs *args = rqstp->rq_argp; 617 u32 max_blocksize = svc_max_payload(rqstp); 618 619 if (!svcxdr_decode_nfs_fh3(xdr, &args->fh)) 620 return 0; 621 if (xdr_stream_decode_u64(xdr, &args->offset) < 0) 622 return 0; 623 if (xdr_stream_decode_u32(xdr, &args->count) < 0) --- 14 unchanged lines hidden (view full) --- 638 } 639 if (!xdr_stream_subsegment(xdr, &args->payload, args->count)) 640 return 0; 641 642 return 1; 643} 644 645int |
652nfs3svc_decode_createargs(struct svc_rqst *rqstp, __be32 *p) | 646nfs3svc_decode_createargs(struct svc_rqst *rqstp, struct xdr_stream *xdr) |
653{ | 647{ |
654 struct xdr_stream *xdr = &rqstp->rq_arg_stream; | |
655 struct nfsd3_createargs *args = rqstp->rq_argp; 656 657 if (!svcxdr_decode_diropargs3(xdr, &args->fh, &args->name, &args->len)) 658 return 0; 659 if (xdr_stream_decode_u32(xdr, &args->createmode) < 0) 660 return 0; 661 switch (args->createmode) { 662 case NFS3_CREATE_UNCHECKED: --- 6 unchanged lines hidden (view full) --- 669 break; 670 default: 671 return 0; 672 } 673 return 1; 674} 675 676int | 648 struct nfsd3_createargs *args = rqstp->rq_argp; 649 650 if (!svcxdr_decode_diropargs3(xdr, &args->fh, &args->name, &args->len)) 651 return 0; 652 if (xdr_stream_decode_u32(xdr, &args->createmode) < 0) 653 return 0; 654 switch (args->createmode) { 655 case NFS3_CREATE_UNCHECKED: --- 6 unchanged lines hidden (view full) --- 662 break; 663 default: 664 return 0; 665 } 666 return 1; 667} 668 669int |
677nfs3svc_decode_mkdirargs(struct svc_rqst *rqstp, __be32 *p) | 670nfs3svc_decode_mkdirargs(struct svc_rqst *rqstp, struct xdr_stream *xdr) |
678{ | 671{ |
679 struct xdr_stream *xdr = &rqstp->rq_arg_stream; | |
680 struct nfsd3_createargs *args = rqstp->rq_argp; 681 682 return svcxdr_decode_diropargs3(xdr, &args->fh, 683 &args->name, &args->len) && 684 svcxdr_decode_sattr3(rqstp, xdr, &args->attrs); 685} 686 687int | 672 struct nfsd3_createargs *args = rqstp->rq_argp; 673 674 return svcxdr_decode_diropargs3(xdr, &args->fh, 675 &args->name, &args->len) && 676 svcxdr_decode_sattr3(rqstp, xdr, &args->attrs); 677} 678 679int |
688nfs3svc_decode_symlinkargs(struct svc_rqst *rqstp, __be32 *p) | 680nfs3svc_decode_symlinkargs(struct svc_rqst *rqstp, struct xdr_stream *xdr) |
689{ | 681{ |
690 struct xdr_stream *xdr = &rqstp->rq_arg_stream; | |
691 struct nfsd3_symlinkargs *args = rqstp->rq_argp; 692 struct kvec *head = rqstp->rq_arg.head; 693 struct kvec *tail = rqstp->rq_arg.tail; 694 size_t remaining; 695 696 if (!svcxdr_decode_diropargs3(xdr, &args->ffh, &args->fname, &args->flen)) 697 return 0; 698 if (!svcxdr_decode_sattr3(rqstp, xdr, &args->attrs)) --- 9 unchanged lines hidden (view full) --- 708 709 args->first.iov_base = xdr->p; 710 args->first.iov_len = head->iov_len - xdr_stream_pos(xdr); 711 712 return 1; 713} 714 715int | 682 struct nfsd3_symlinkargs *args = rqstp->rq_argp; 683 struct kvec *head = rqstp->rq_arg.head; 684 struct kvec *tail = rqstp->rq_arg.tail; 685 size_t remaining; 686 687 if (!svcxdr_decode_diropargs3(xdr, &args->ffh, &args->fname, &args->flen)) 688 return 0; 689 if (!svcxdr_decode_sattr3(rqstp, xdr, &args->attrs)) --- 9 unchanged lines hidden (view full) --- 699 700 args->first.iov_base = xdr->p; 701 args->first.iov_len = head->iov_len - xdr_stream_pos(xdr); 702 703 return 1; 704} 705 706int |
716nfs3svc_decode_mknodargs(struct svc_rqst *rqstp, __be32 *p) | 707nfs3svc_decode_mknodargs(struct svc_rqst *rqstp, struct xdr_stream *xdr) |
717{ | 708{ |
718 struct xdr_stream *xdr = &rqstp->rq_arg_stream; | |
719 struct nfsd3_mknodargs *args = rqstp->rq_argp; 720 721 if (!svcxdr_decode_diropargs3(xdr, &args->fh, &args->name, &args->len)) 722 return 0; 723 if (xdr_stream_decode_u32(xdr, &args->ftype) < 0) 724 return 0; 725 switch (args->ftype) { 726 case NF3CHR: --- 10 unchanged lines hidden (view full) --- 737 default: 738 return 0; 739 } 740 741 return 1; 742} 743 744int | 709 struct nfsd3_mknodargs *args = rqstp->rq_argp; 710 711 if (!svcxdr_decode_diropargs3(xdr, &args->fh, &args->name, &args->len)) 712 return 0; 713 if (xdr_stream_decode_u32(xdr, &args->ftype) < 0) 714 return 0; 715 switch (args->ftype) { 716 case NF3CHR: --- 10 unchanged lines hidden (view full) --- 727 default: 728 return 0; 729 } 730 731 return 1; 732} 733 734int |
745nfs3svc_decode_renameargs(struct svc_rqst *rqstp, __be32 *p) | 735nfs3svc_decode_renameargs(struct svc_rqst *rqstp, struct xdr_stream *xdr) |
746{ | 736{ |
747 struct xdr_stream *xdr = &rqstp->rq_arg_stream; | |
748 struct nfsd3_renameargs *args = rqstp->rq_argp; 749 750 return svcxdr_decode_diropargs3(xdr, &args->ffh, 751 &args->fname, &args->flen) && 752 svcxdr_decode_diropargs3(xdr, &args->tfh, 753 &args->tname, &args->tlen); 754} 755 756int | 737 struct nfsd3_renameargs *args = rqstp->rq_argp; 738 739 return svcxdr_decode_diropargs3(xdr, &args->ffh, 740 &args->fname, &args->flen) && 741 svcxdr_decode_diropargs3(xdr, &args->tfh, 742 &args->tname, &args->tlen); 743} 744 745int |
757nfs3svc_decode_linkargs(struct svc_rqst *rqstp, __be32 *p) | 746nfs3svc_decode_linkargs(struct svc_rqst *rqstp, struct xdr_stream *xdr) |
758{ | 747{ |
759 struct xdr_stream *xdr = &rqstp->rq_arg_stream; | |
760 struct nfsd3_linkargs *args = rqstp->rq_argp; 761 762 return svcxdr_decode_nfs_fh3(xdr, &args->ffh) && 763 svcxdr_decode_diropargs3(xdr, &args->tfh, 764 &args->tname, &args->tlen); 765} 766 767int | 748 struct nfsd3_linkargs *args = rqstp->rq_argp; 749 750 return svcxdr_decode_nfs_fh3(xdr, &args->ffh) && 751 svcxdr_decode_diropargs3(xdr, &args->tfh, 752 &args->tname, &args->tlen); 753} 754 755int |
768nfs3svc_decode_readdirargs(struct svc_rqst *rqstp, __be32 *p) | 756nfs3svc_decode_readdirargs(struct svc_rqst *rqstp, struct xdr_stream *xdr) |
769{ | 757{ |
770 struct xdr_stream *xdr = &rqstp->rq_arg_stream; | |
771 struct nfsd3_readdirargs *args = rqstp->rq_argp; 772 773 if (!svcxdr_decode_nfs_fh3(xdr, &args->fh)) 774 return 0; 775 if (xdr_stream_decode_u64(xdr, &args->cookie) < 0) 776 return 0; 777 args->verf = xdr_inline_decode(xdr, NFS3_COOKIEVERFSIZE); 778 if (!args->verf) 779 return 0; 780 if (xdr_stream_decode_u32(xdr, &args->count) < 0) 781 return 0; 782 783 return 1; 784} 785 786int | 758 struct nfsd3_readdirargs *args = rqstp->rq_argp; 759 760 if (!svcxdr_decode_nfs_fh3(xdr, &args->fh)) 761 return 0; 762 if (xdr_stream_decode_u64(xdr, &args->cookie) < 0) 763 return 0; 764 args->verf = xdr_inline_decode(xdr, NFS3_COOKIEVERFSIZE); 765 if (!args->verf) 766 return 0; 767 if (xdr_stream_decode_u32(xdr, &args->count) < 0) 768 return 0; 769 770 return 1; 771} 772 773int |
787nfs3svc_decode_readdirplusargs(struct svc_rqst *rqstp, __be32 *p) | 774nfs3svc_decode_readdirplusargs(struct svc_rqst *rqstp, struct xdr_stream *xdr) |
788{ | 775{ |
789 struct xdr_stream *xdr = &rqstp->rq_arg_stream; | |
790 struct nfsd3_readdirargs *args = rqstp->rq_argp; 791 u32 dircount; 792 793 if (!svcxdr_decode_nfs_fh3(xdr, &args->fh)) 794 return 0; 795 if (xdr_stream_decode_u64(xdr, &args->cookie) < 0) 796 return 0; 797 args->verf = xdr_inline_decode(xdr, NFS3_COOKIEVERFSIZE); --- 4 unchanged lines hidden (view full) --- 802 return 0; 803 if (xdr_stream_decode_u32(xdr, &args->count) < 0) 804 return 0; 805 806 return 1; 807} 808 809int | 776 struct nfsd3_readdirargs *args = rqstp->rq_argp; 777 u32 dircount; 778 779 if (!svcxdr_decode_nfs_fh3(xdr, &args->fh)) 780 return 0; 781 if (xdr_stream_decode_u64(xdr, &args->cookie) < 0) 782 return 0; 783 args->verf = xdr_inline_decode(xdr, NFS3_COOKIEVERFSIZE); --- 4 unchanged lines hidden (view full) --- 788 return 0; 789 if (xdr_stream_decode_u32(xdr, &args->count) < 0) 790 return 0; 791 792 return 1; 793} 794 795int |
810nfs3svc_decode_commitargs(struct svc_rqst *rqstp, __be32 *p) | 796nfs3svc_decode_commitargs(struct svc_rqst *rqstp, struct xdr_stream *xdr) |
811{ | 797{ |
812 struct xdr_stream *xdr = &rqstp->rq_arg_stream; | |
813 struct nfsd3_commitargs *args = rqstp->rq_argp; 814 815 if (!svcxdr_decode_nfs_fh3(xdr, &args->fh)) 816 return 0; 817 if (xdr_stream_decode_u64(xdr, &args->offset) < 0) 818 return 0; 819 if (xdr_stream_decode_u32(xdr, &args->count) < 0) 820 return 0; --- 638 unchanged lines hidden --- | 798 struct nfsd3_commitargs *args = rqstp->rq_argp; 799 800 if (!svcxdr_decode_nfs_fh3(xdr, &args->fh)) 801 return 0; 802 if (xdr_stream_decode_u64(xdr, &args->offset) < 0) 803 return 0; 804 if (xdr_stream_decode_u32(xdr, &args->count) < 0) 805 return 0; --- 638 unchanged lines hidden --- |