diff options
-rw-r--r-- | fs/nfsd/vfs.c | 2 | ||||
-rw-r--r-- | include/linux/sunrpc/svc.h | 4 | ||||
-rw-r--r-- | net/sunrpc/svc.c | 2 |
3 files changed, 6 insertions, 2 deletions
diff --git a/fs/nfsd/vfs.c b/fs/nfsd/vfs.c index 423e1ba07044..e170030d45da 100644 --- a/fs/nfsd/vfs.c +++ b/fs/nfsd/vfs.c | |||
@@ -837,7 +837,7 @@ nfsd_vfs_read(struct svc_rqst *rqstp, struct svc_fh *fhp, struct file *file, | |||
837 | if (ra && ra->p_set) | 837 | if (ra && ra->p_set) |
838 | file->f_ra = ra->p_ra; | 838 | file->f_ra = ra->p_ra; |
839 | 839 | ||
840 | if (file->f_op->sendfile) { | 840 | if (file->f_op->sendfile && rqstp->rq_sendfile_ok) { |
841 | svc_pushback_unused_pages(rqstp); | 841 | svc_pushback_unused_pages(rqstp); |
842 | err = file->f_op->sendfile(file, &offset, *count, | 842 | err = file->f_op->sendfile(file, &offset, *count, |
843 | nfsd_read_actor, rqstp); | 843 | nfsd_read_actor, rqstp); |
diff --git a/include/linux/sunrpc/svc.h b/include/linux/sunrpc/svc.h index 503564384545..7b27c09b5604 100644 --- a/include/linux/sunrpc/svc.h +++ b/include/linux/sunrpc/svc.h | |||
@@ -159,7 +159,9 @@ struct svc_rqst { | |||
159 | * determine what device number | 159 | * determine what device number |
160 | * to report (real or virtual) | 160 | * to report (real or virtual) |
161 | */ | 161 | */ |
162 | 162 | int rq_sendfile_ok; /* turned off in gss privacy | |
163 | * to prevent encrypting page | ||
164 | * cache pages */ | ||
163 | wait_queue_head_t rq_wait; /* synchronization */ | 165 | wait_queue_head_t rq_wait; /* synchronization */ |
164 | }; | 166 | }; |
165 | 167 | ||
diff --git a/net/sunrpc/svc.c b/net/sunrpc/svc.c index b08419e1fc68..fb168a30fd3f 100644 --- a/net/sunrpc/svc.c +++ b/net/sunrpc/svc.c | |||
@@ -281,6 +281,8 @@ svc_process(struct svc_serv *serv, struct svc_rqst *rqstp) | |||
281 | rqstp->rq_res.page_len = 0; | 281 | rqstp->rq_res.page_len = 0; |
282 | rqstp->rq_res.buflen = PAGE_SIZE; | 282 | rqstp->rq_res.buflen = PAGE_SIZE; |
283 | rqstp->rq_res.tail[0].iov_len = 0; | 283 | rqstp->rq_res.tail[0].iov_len = 0; |
284 | /* Will be turned off only in gss privacy case: */ | ||
285 | rqstp->rq_sendfile_ok = 1; | ||
284 | /* tcp needs a space for the record length... */ | 286 | /* tcp needs a space for the record length... */ |
285 | if (rqstp->rq_prot == IPPROTO_TCP) | 287 | if (rqstp->rq_prot == IPPROTO_TCP) |
286 | svc_putu32(resv, 0); | 288 | svc_putu32(resv, 0); |