diff options
author | Andy Adamson <andros@netapp.com> | 2009-04-03 01:27:55 -0400 |
---|---|---|
committer | J. Bruce Fields <bfields@citi.umich.edu> | 2009-04-03 20:41:14 -0400 |
commit | 2db134eb3b39faefc7fbfb200156d175edba2f68 (patch) | |
tree | dd07afee13667410cb64dba1de3a80c54d1bd989 /fs/nfsd | |
parent | 5282fd724b667b7d65f2e41e405a825e58a78813 (diff) |
nfsd41: xdr infrastructure
Define nfsd41_dec_ops vector and add it to nfsd4_minorversion for
minorversion 1.
Note: nfsd4_enc_ops vector is shared for v4.0 and v4.1
since we don't need to filter out obsolete ops as this is
done in the decoding phase.
exchange_id, create_session, destroy_session, and sequence ops are
implemented as stubs returning nfserr_opnotsupp at this stage.
[was nfsd41: xdr stubs]
[get rid of CONFIG_NFSD_V4_1]
Signed-off-by: Benny Halevy <bhalevy@panasas.com>
Signed-off-by: J. Bruce Fields <bfields@citi.umich.edu>
Diffstat (limited to 'fs/nfsd')
-rw-r--r-- | fs/nfsd/nfs4xdr.c | 148 |
1 files changed, 148 insertions, 0 deletions
diff --git a/fs/nfsd/nfs4xdr.c b/fs/nfsd/nfs4xdr.c index 76a0b2a8d69b..6973d61bedea 100644 --- a/fs/nfsd/nfs4xdr.c +++ b/fs/nfsd/nfs4xdr.c | |||
@@ -997,6 +997,34 @@ nfsd4_decode_release_lockowner(struct nfsd4_compoundargs *argp, struct nfsd4_rel | |||
997 | } | 997 | } |
998 | 998 | ||
999 | static __be32 | 999 | static __be32 |
1000 | nfsd4_decode_exchange_id(struct nfsd4_compoundargs *argp, | ||
1001 | struct nfsd4_exchange_id *clid) | ||
1002 | { | ||
1003 | return nfserr_opnotsupp; /* stub */ | ||
1004 | } | ||
1005 | |||
1006 | static __be32 | ||
1007 | nfsd4_decode_create_session(struct nfsd4_compoundargs *argp, | ||
1008 | struct nfsd4_create_session *sess) | ||
1009 | { | ||
1010 | return nfserr_opnotsupp; /* stub */ | ||
1011 | } | ||
1012 | |||
1013 | static __be32 | ||
1014 | nfsd4_decode_destroy_session(struct nfsd4_compoundargs *argp, | ||
1015 | struct nfsd4_destroy_session *destroy_session) | ||
1016 | { | ||
1017 | return nfserr_opnotsupp; /* stub */ | ||
1018 | } | ||
1019 | |||
1020 | static __be32 | ||
1021 | nfsd4_decode_sequence(struct nfsd4_compoundargs *argp, | ||
1022 | struct nfsd4_sequence *seq) | ||
1023 | { | ||
1024 | return nfserr_opnotsupp; /* stub */ | ||
1025 | } | ||
1026 | |||
1027 | static __be32 | ||
1000 | nfsd4_decode_noop(struct nfsd4_compoundargs *argp, void *p) | 1028 | nfsd4_decode_noop(struct nfsd4_compoundargs *argp, void *p) |
1001 | { | 1029 | { |
1002 | return nfs_ok; | 1030 | return nfs_ok; |
@@ -1050,6 +1078,67 @@ static nfsd4_dec nfsd4_dec_ops[] = { | |||
1050 | [OP_RELEASE_LOCKOWNER] = (nfsd4_dec)nfsd4_decode_release_lockowner, | 1078 | [OP_RELEASE_LOCKOWNER] = (nfsd4_dec)nfsd4_decode_release_lockowner, |
1051 | }; | 1079 | }; |
1052 | 1080 | ||
1081 | static nfsd4_dec nfsd41_dec_ops[] = { | ||
1082 | [OP_ACCESS] (nfsd4_dec)nfsd4_decode_access, | ||
1083 | [OP_CLOSE] (nfsd4_dec)nfsd4_decode_close, | ||
1084 | [OP_COMMIT] (nfsd4_dec)nfsd4_decode_commit, | ||
1085 | [OP_CREATE] (nfsd4_dec)nfsd4_decode_create, | ||
1086 | [OP_DELEGPURGE] (nfsd4_dec)nfsd4_decode_notsupp, | ||
1087 | [OP_DELEGRETURN] (nfsd4_dec)nfsd4_decode_delegreturn, | ||
1088 | [OP_GETATTR] (nfsd4_dec)nfsd4_decode_getattr, | ||
1089 | [OP_GETFH] (nfsd4_dec)nfsd4_decode_noop, | ||
1090 | [OP_LINK] (nfsd4_dec)nfsd4_decode_link, | ||
1091 | [OP_LOCK] (nfsd4_dec)nfsd4_decode_lock, | ||
1092 | [OP_LOCKT] (nfsd4_dec)nfsd4_decode_lockt, | ||
1093 | [OP_LOCKU] (nfsd4_dec)nfsd4_decode_locku, | ||
1094 | [OP_LOOKUP] (nfsd4_dec)nfsd4_decode_lookup, | ||
1095 | [OP_LOOKUPP] (nfsd4_dec)nfsd4_decode_noop, | ||
1096 | [OP_NVERIFY] (nfsd4_dec)nfsd4_decode_verify, | ||
1097 | [OP_OPEN] (nfsd4_dec)nfsd4_decode_open, | ||
1098 | [OP_OPENATTR] (nfsd4_dec)nfsd4_decode_notsupp, | ||
1099 | [OP_OPEN_CONFIRM] (nfsd4_dec)nfsd4_decode_notsupp, | ||
1100 | [OP_OPEN_DOWNGRADE] (nfsd4_dec)nfsd4_decode_open_downgrade, | ||
1101 | [OP_PUTFH] (nfsd4_dec)nfsd4_decode_putfh, | ||
1102 | [OP_PUTPUBFH] (nfsd4_dec)nfsd4_decode_notsupp, | ||
1103 | [OP_PUTROOTFH] (nfsd4_dec)nfsd4_decode_noop, | ||
1104 | [OP_READ] (nfsd4_dec)nfsd4_decode_read, | ||
1105 | [OP_READDIR] (nfsd4_dec)nfsd4_decode_readdir, | ||
1106 | [OP_READLINK] (nfsd4_dec)nfsd4_decode_noop, | ||
1107 | [OP_REMOVE] (nfsd4_dec)nfsd4_decode_remove, | ||
1108 | [OP_RENAME] (nfsd4_dec)nfsd4_decode_rename, | ||
1109 | [OP_RENEW] (nfsd4_dec)nfsd4_decode_notsupp, | ||
1110 | [OP_RESTOREFH] (nfsd4_dec)nfsd4_decode_noop, | ||
1111 | [OP_SAVEFH] (nfsd4_dec)nfsd4_decode_noop, | ||
1112 | [OP_SECINFO] (nfsd4_dec)nfsd4_decode_secinfo, | ||
1113 | [OP_SETATTR] (nfsd4_dec)nfsd4_decode_setattr, | ||
1114 | [OP_SETCLIENTID] (nfsd4_dec)nfsd4_decode_notsupp, | ||
1115 | [OP_SETCLIENTID_CONFIRM](nfsd4_dec)nfsd4_decode_notsupp, | ||
1116 | [OP_VERIFY] (nfsd4_dec)nfsd4_decode_verify, | ||
1117 | [OP_WRITE] (nfsd4_dec)nfsd4_decode_write, | ||
1118 | [OP_RELEASE_LOCKOWNER] (nfsd4_dec)nfsd4_decode_notsupp, | ||
1119 | |||
1120 | /* new operations for NFSv4.1 */ | ||
1121 | [OP_BACKCHANNEL_CTL] (nfsd4_dec)nfsd4_decode_notsupp, | ||
1122 | [OP_BIND_CONN_TO_SESSION](nfsd4_dec)nfsd4_decode_notsupp, | ||
1123 | [OP_EXCHANGE_ID] (nfsd4_dec)nfsd4_decode_exchange_id, | ||
1124 | [OP_CREATE_SESSION] (nfsd4_dec)nfsd4_decode_create_session, | ||
1125 | [OP_DESTROY_SESSION] (nfsd4_dec)nfsd4_decode_destroy_session, | ||
1126 | [OP_FREE_STATEID] (nfsd4_dec)nfsd4_decode_notsupp, | ||
1127 | [OP_GET_DIR_DELEGATION] (nfsd4_dec)nfsd4_decode_notsupp, | ||
1128 | [OP_GETDEVICEINFO] (nfsd4_dec)nfsd4_decode_notsupp, | ||
1129 | [OP_GETDEVICELIST] (nfsd4_dec)nfsd4_decode_notsupp, | ||
1130 | [OP_LAYOUTCOMMIT] (nfsd4_dec)nfsd4_decode_notsupp, | ||
1131 | [OP_LAYOUTGET] (nfsd4_dec)nfsd4_decode_notsupp, | ||
1132 | [OP_LAYOUTRETURN] (nfsd4_dec)nfsd4_decode_notsupp, | ||
1133 | [OP_SECINFO_NO_NAME] (nfsd4_dec)nfsd4_decode_notsupp, | ||
1134 | [OP_SEQUENCE] (nfsd4_dec)nfsd4_decode_sequence, | ||
1135 | [OP_SET_SSV] (nfsd4_dec)nfsd4_decode_notsupp, | ||
1136 | [OP_TEST_STATEID] (nfsd4_dec)nfsd4_decode_notsupp, | ||
1137 | [OP_WANT_DELEGATION] (nfsd4_dec)nfsd4_decode_notsupp, | ||
1138 | [OP_DESTROY_CLIENTID] (nfsd4_dec)nfsd4_decode_notsupp, | ||
1139 | [OP_RECLAIM_COMPLETE] (nfsd4_dec)nfsd4_decode_notsupp, | ||
1140 | }; | ||
1141 | |||
1053 | struct nfsd4_minorversion_ops { | 1142 | struct nfsd4_minorversion_ops { |
1054 | nfsd4_dec *decoders; | 1143 | nfsd4_dec *decoders; |
1055 | int nops; | 1144 | int nops; |
@@ -1057,6 +1146,7 @@ struct nfsd4_minorversion_ops { | |||
1057 | 1146 | ||
1058 | static struct nfsd4_minorversion_ops nfsd4_minorversion[] = { | 1147 | static struct nfsd4_minorversion_ops nfsd4_minorversion[] = { |
1059 | [0] = { nfsd4_dec_ops, ARRAY_SIZE(nfsd4_dec_ops) }, | 1148 | [0] = { nfsd4_dec_ops, ARRAY_SIZE(nfsd4_dec_ops) }, |
1149 | [1] = { nfsd41_dec_ops, ARRAY_SIZE(nfsd41_dec_ops) }, | ||
1060 | }; | 1150 | }; |
1061 | 1151 | ||
1062 | static __be32 | 1152 | static __be32 |
@@ -2572,6 +2662,38 @@ nfsd4_encode_write(struct nfsd4_compoundres *resp, __be32 nfserr, struct nfsd4_w | |||
2572 | } | 2662 | } |
2573 | 2663 | ||
2574 | static __be32 | 2664 | static __be32 |
2665 | nfsd4_encode_exchange_id(struct nfsd4_compoundres *resp, int nfserr, | ||
2666 | struct nfsd4_exchange_id *exid) | ||
2667 | { | ||
2668 | /* stub */ | ||
2669 | return nfserr; | ||
2670 | } | ||
2671 | |||
2672 | static __be32 | ||
2673 | nfsd4_encode_create_session(struct nfsd4_compoundres *resp, int nfserr, | ||
2674 | struct nfsd4_create_session *sess) | ||
2675 | { | ||
2676 | /* stub */ | ||
2677 | return nfserr; | ||
2678 | } | ||
2679 | |||
2680 | static __be32 | ||
2681 | nfsd4_encode_destroy_session(struct nfsd4_compoundres *resp, int nfserr, | ||
2682 | struct nfsd4_destroy_session *destroy_session) | ||
2683 | { | ||
2684 | /* stub */ | ||
2685 | return nfserr; | ||
2686 | } | ||
2687 | |||
2688 | static __be32 | ||
2689 | nfsd4_encode_sequence(struct nfsd4_compoundres *resp, int nfserr, | ||
2690 | struct nfsd4_sequence *seq) | ||
2691 | { | ||
2692 | /* stub */ | ||
2693 | return nfserr; | ||
2694 | } | ||
2695 | |||
2696 | static __be32 | ||
2575 | nfsd4_encode_noop(struct nfsd4_compoundres *resp, __be32 nfserr, void *p) | 2697 | nfsd4_encode_noop(struct nfsd4_compoundres *resp, __be32 nfserr, void *p) |
2576 | { | 2698 | { |
2577 | return nfserr; | 2699 | return nfserr; |
@@ -2579,6 +2701,11 @@ nfsd4_encode_noop(struct nfsd4_compoundres *resp, __be32 nfserr, void *p) | |||
2579 | 2701 | ||
2580 | typedef __be32(* nfsd4_enc)(struct nfsd4_compoundres *, __be32, void *); | 2702 | typedef __be32(* nfsd4_enc)(struct nfsd4_compoundres *, __be32, void *); |
2581 | 2703 | ||
2704 | /* | ||
2705 | * Note: nfsd4_enc_ops vector is shared for v4.0 and v4.1 | ||
2706 | * since we don't need to filter out obsolete ops as this is | ||
2707 | * done in the decoding phase. | ||
2708 | */ | ||
2582 | static nfsd4_enc nfsd4_enc_ops[] = { | 2709 | static nfsd4_enc nfsd4_enc_ops[] = { |
2583 | [OP_ACCESS] = (nfsd4_enc)nfsd4_encode_access, | 2710 | [OP_ACCESS] = (nfsd4_enc)nfsd4_encode_access, |
2584 | [OP_CLOSE] = (nfsd4_enc)nfsd4_encode_close, | 2711 | [OP_CLOSE] = (nfsd4_enc)nfsd4_encode_close, |
@@ -2617,6 +2744,27 @@ static nfsd4_enc nfsd4_enc_ops[] = { | |||
2617 | [OP_VERIFY] = (nfsd4_enc)nfsd4_encode_noop, | 2744 | [OP_VERIFY] = (nfsd4_enc)nfsd4_encode_noop, |
2618 | [OP_WRITE] = (nfsd4_enc)nfsd4_encode_write, | 2745 | [OP_WRITE] = (nfsd4_enc)nfsd4_encode_write, |
2619 | [OP_RELEASE_LOCKOWNER] = (nfsd4_enc)nfsd4_encode_noop, | 2746 | [OP_RELEASE_LOCKOWNER] = (nfsd4_enc)nfsd4_encode_noop, |
2747 | |||
2748 | /* NFSv4.1 operations */ | ||
2749 | [OP_BACKCHANNEL_CTL] = (nfsd4_enc)nfsd4_encode_noop, | ||
2750 | [OP_BIND_CONN_TO_SESSION] = (nfsd4_enc)nfsd4_encode_noop, | ||
2751 | [OP_EXCHANGE_ID] = (nfsd4_enc)nfsd4_encode_exchange_id, | ||
2752 | [OP_CREATE_SESSION] = (nfsd4_enc)nfsd4_encode_create_session, | ||
2753 | [OP_DESTROY_SESSION] = (nfsd4_enc)nfsd4_encode_destroy_session, | ||
2754 | [OP_FREE_STATEID] = (nfsd4_enc)nfsd4_encode_noop, | ||
2755 | [OP_GET_DIR_DELEGATION] = (nfsd4_enc)nfsd4_encode_noop, | ||
2756 | [OP_GETDEVICEINFO] = (nfsd4_enc)nfsd4_encode_noop, | ||
2757 | [OP_GETDEVICELIST] = (nfsd4_enc)nfsd4_encode_noop, | ||
2758 | [OP_LAYOUTCOMMIT] = (nfsd4_enc)nfsd4_encode_noop, | ||
2759 | [OP_LAYOUTGET] = (nfsd4_enc)nfsd4_encode_noop, | ||
2760 | [OP_LAYOUTRETURN] = (nfsd4_enc)nfsd4_encode_noop, | ||
2761 | [OP_SECINFO_NO_NAME] = (nfsd4_enc)nfsd4_encode_noop, | ||
2762 | [OP_SEQUENCE] = (nfsd4_enc)nfsd4_encode_sequence, | ||
2763 | [OP_SET_SSV] = (nfsd4_enc)nfsd4_encode_noop, | ||
2764 | [OP_TEST_STATEID] = (nfsd4_enc)nfsd4_encode_noop, | ||
2765 | [OP_WANT_DELEGATION] = (nfsd4_enc)nfsd4_encode_noop, | ||
2766 | [OP_DESTROY_CLIENTID] = (nfsd4_enc)nfsd4_encode_noop, | ||
2767 | [OP_RECLAIM_COMPLETE] = (nfsd4_enc)nfsd4_encode_noop, | ||
2620 | }; | 2768 | }; |
2621 | 2769 | ||
2622 | void | 2770 | void |