diff options
Diffstat (limited to 'fs/nfsd/nfs4state.c')
-rw-r--r-- | fs/nfsd/nfs4state.c | 29 |
1 files changed, 17 insertions, 12 deletions
diff --git a/fs/nfsd/nfs4state.c b/fs/nfsd/nfs4state.c index c484a2b6cd10..0462eeddfff9 100644 --- a/fs/nfsd/nfs4state.c +++ b/fs/nfsd/nfs4state.c | |||
@@ -2408,7 +2408,8 @@ nfsd4_exchange_id(struct svc_rqst *rqstp, | |||
2408 | default: /* checked by xdr code */ | 2408 | default: /* checked by xdr code */ |
2409 | WARN_ON_ONCE(1); | 2409 | WARN_ON_ONCE(1); |
2410 | case SP4_SSV: | 2410 | case SP4_SSV: |
2411 | return nfserr_encr_alg_unsupp; | 2411 | status = nfserr_encr_alg_unsupp; |
2412 | goto out_nolock; | ||
2412 | } | 2413 | } |
2413 | 2414 | ||
2414 | /* Cases below refer to rfc 5661 section 18.35.4: */ | 2415 | /* Cases below refer to rfc 5661 section 18.35.4: */ |
@@ -2586,21 +2587,26 @@ static __be32 check_forechannel_attrs(struct nfsd4_channel_attrs *ca, struct nfs | |||
2586 | return nfs_ok; | 2587 | return nfs_ok; |
2587 | } | 2588 | } |
2588 | 2589 | ||
2590 | /* | ||
2591 | * Server's NFSv4.1 backchannel support is AUTH_SYS-only for now. | ||
2592 | * These are based on similar macros in linux/sunrpc/msg_prot.h . | ||
2593 | */ | ||
2594 | #define RPC_MAX_HEADER_WITH_AUTH_SYS \ | ||
2595 | (RPC_CALLHDRSIZE + 2 * (2 + UNX_CALLSLACK)) | ||
2596 | |||
2597 | #define RPC_MAX_REPHEADER_WITH_AUTH_SYS \ | ||
2598 | (RPC_REPHDRSIZE + (2 + NUL_REPLYSLACK)) | ||
2599 | |||
2589 | #define NFSD_CB_MAX_REQ_SZ ((NFS4_enc_cb_recall_sz + \ | 2600 | #define NFSD_CB_MAX_REQ_SZ ((NFS4_enc_cb_recall_sz + \ |
2590 | RPC_MAX_HEADER_WITH_AUTH) * sizeof(__be32)) | 2601 | RPC_MAX_HEADER_WITH_AUTH_SYS) * sizeof(__be32)) |
2591 | #define NFSD_CB_MAX_RESP_SZ ((NFS4_dec_cb_recall_sz + \ | 2602 | #define NFSD_CB_MAX_RESP_SZ ((NFS4_dec_cb_recall_sz + \ |
2592 | RPC_MAX_REPHEADER_WITH_AUTH) * sizeof(__be32)) | 2603 | RPC_MAX_REPHEADER_WITH_AUTH_SYS) * \ |
2604 | sizeof(__be32)) | ||
2593 | 2605 | ||
2594 | static __be32 check_backchannel_attrs(struct nfsd4_channel_attrs *ca) | 2606 | static __be32 check_backchannel_attrs(struct nfsd4_channel_attrs *ca) |
2595 | { | 2607 | { |
2596 | ca->headerpadsz = 0; | 2608 | ca->headerpadsz = 0; |
2597 | 2609 | ||
2598 | /* | ||
2599 | * These RPC_MAX_HEADER macros are overkill, especially since we | ||
2600 | * don't even do gss on the backchannel yet. But this is still | ||
2601 | * less than 1k. Tighten up this estimate in the unlikely event | ||
2602 | * it turns out to be a problem for some client: | ||
2603 | */ | ||
2604 | if (ca->maxreq_sz < NFSD_CB_MAX_REQ_SZ) | 2610 | if (ca->maxreq_sz < NFSD_CB_MAX_REQ_SZ) |
2605 | return nfserr_toosmall; | 2611 | return nfserr_toosmall; |
2606 | if (ca->maxresp_sz < NFSD_CB_MAX_RESP_SZ) | 2612 | if (ca->maxresp_sz < NFSD_CB_MAX_RESP_SZ) |
@@ -2710,10 +2716,9 @@ nfsd4_create_session(struct svc_rqst *rqstp, | |||
2710 | goto out_free_conn; | 2716 | goto out_free_conn; |
2711 | } | 2717 | } |
2712 | status = nfs_ok; | 2718 | status = nfs_ok; |
2713 | /* | 2719 | /* Persistent sessions are not supported */ |
2714 | * We do not support RDMA or persistent sessions | ||
2715 | */ | ||
2716 | cr_ses->flags &= ~SESSION4_PERSIST; | 2720 | cr_ses->flags &= ~SESSION4_PERSIST; |
2721 | /* Upshifting from TCP to RDMA is not supported */ | ||
2717 | cr_ses->flags &= ~SESSION4_RDMA; | 2722 | cr_ses->flags &= ~SESSION4_RDMA; |
2718 | 2723 | ||
2719 | init_session(rqstp, new, conf, cr_ses); | 2724 | init_session(rqstp, new, conf, cr_ses); |