diff options
Diffstat (limited to 'include/linux/sunrpc/svc.h')
| -rw-r--r-- | include/linux/sunrpc/svc.h | 7 | 
1 files changed, 4 insertions, 3 deletions
diff --git a/include/linux/sunrpc/svc.h b/include/linux/sunrpc/svc.h index d83db800fe0..1f0216b9a6c 100644 --- a/include/linux/sunrpc/svc.h +++ b/include/linux/sunrpc/svc.h @@ -50,6 +50,7 @@ struct svc_pool {  	unsigned int		sp_nrthreads;	/* # of threads in pool */  	struct list_head	sp_all_threads;	/* all server threads */  	struct svc_pool_stats	sp_stats;	/* statistics on pool operation */ +	int			sp_task_pending;/* has pending task */  } ____cacheline_aligned_in_smp;  /* @@ -243,6 +244,7 @@ struct svc_rqst {  	struct page *		rq_pages[RPCSVC_MAXPAGES];  	struct page *		*rq_respages;	/* points into rq_pages */  	int			rq_resused;	/* number of pages used for result */ +	struct page *		*rq_next_page; /* next reply page to use */  	struct kvec		rq_vec[RPCSVC_MAXPAGES]; /* generally useful.. */ @@ -338,9 +340,8 @@ xdr_ressize_check(struct svc_rqst *rqstp, __be32 *p)  static inline void svc_free_res_pages(struct svc_rqst *rqstp)  { -	while (rqstp->rq_resused) { -		struct page **pp = (rqstp->rq_respages + -				    --rqstp->rq_resused); +	while (rqstp->rq_next_page != rqstp->rq_respages) { +		struct page **pp = --rqstp->rq_next_page;  		if (*pp) {  			put_page(*pp);  			*pp = NULL;  |