aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--fs/nfsd/vfs.c2
-rw-r--r--include/linux/sunrpc/svc.h4
-rw-r--r--net/sunrpc/svc.c2
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);