SUNRPC: Avoid RPC delays when exiting suspend
diff mbox series

Message ID 20191105142133.28741-1-trond.myklebust@hammerspace.com
State New
Headers show
Series
  • SUNRPC: Avoid RPC delays when exiting suspend
Related show

Commit Message

Trond Myklebust Nov. 5, 2019, 2:21 p.m. UTC
Jon Hunter: "I have been tracking down another suspend/NFS related
issue where again I am seeing random delays exiting suspend. The delays
can be up to a couple minutes in the worst case and this is causing a
suspend test we have to fail."

Change the use of a deferrable work to a standard delayed one.

Reported-by: Jon Hunter <jonathanh@nvidia.com>
Fixes: 7e0a0e38fcfea ("SUNRPC: Replace the queue timer with a delayed work function")
Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
---
 net/sunrpc/sched.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

Comments

Jon Hunter Nov. 6, 2019, 11:15 a.m. UTC | #1
On 05/11/2019 14:21, Trond Myklebust wrote:
> Jon Hunter: "I have been tracking down another suspend/NFS related
> issue where again I am seeing random delays exiting suspend. The delays
> can be up to a couple minutes in the worst case and this is causing a
> suspend test we have to fail."
> 
> Change the use of a deferrable work to a standard delayed one.
> 
> Reported-by: Jon Hunter <jonathanh@nvidia.com>
> Fixes: 7e0a0e38fcfea ("SUNRPC: Replace the queue timer with a delayed work function")
> Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
> ---
>  net/sunrpc/sched.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/net/sunrpc/sched.c b/net/sunrpc/sched.c
> index 360afe153193..987c4b1f0b17 100644
> --- a/net/sunrpc/sched.c
> +++ b/net/sunrpc/sched.c
> @@ -260,7 +260,7 @@ static void __rpc_init_priority_wait_queue(struct rpc_wait_queue *queue, const c
>  	rpc_reset_waitqueue_priority(queue);
>  	queue->qlen = 0;
>  	queue->timer_list.expires = 0;
> -	INIT_DEFERRABLE_WORK(&queue->timer_list.dwork, __rpc_queue_timer_fn);
> +	INIT_DELAYED_WORK(&queue->timer_list.dwork, __rpc_queue_timer_fn);
>  	INIT_LIST_HEAD(&queue->timer_list.list);
>  	rpc_assign_waitqueue_name(queue, qname);
>  }

Thanks!

Tested-by: Jon Hunter <jonathanh@nvidia.com>

Cheers
Jon
Jon Hunter Nov. 18, 2019, 10:21 a.m. UTC | #2
Hi Trond,

On 06/11/2019 11:15, Jon Hunter wrote:
> 
> On 05/11/2019 14:21, Trond Myklebust wrote:
>> Jon Hunter: "I have been tracking down another suspend/NFS related
>> issue where again I am seeing random delays exiting suspend. The delays
>> can be up to a couple minutes in the worst case and this is causing a
>> suspend test we have to fail."
>>
>> Change the use of a deferrable work to a standard delayed one.
>>
>> Reported-by: Jon Hunter <jonathanh@nvidia.com>
>> Fixes: 7e0a0e38fcfea ("SUNRPC: Replace the queue timer with a delayed work function")
>> Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
>> ---
>>  net/sunrpc/sched.c | 2 +-
>>  1 file changed, 1 insertion(+), 1 deletion(-)
>>
>> diff --git a/net/sunrpc/sched.c b/net/sunrpc/sched.c
>> index 360afe153193..987c4b1f0b17 100644
>> --- a/net/sunrpc/sched.c
>> +++ b/net/sunrpc/sched.c
>> @@ -260,7 +260,7 @@ static void __rpc_init_priority_wait_queue(struct rpc_wait_queue *queue, const c
>>  	rpc_reset_waitqueue_priority(queue);
>>  	queue->qlen = 0;
>>  	queue->timer_list.expires = 0;
>> -	INIT_DEFERRABLE_WORK(&queue->timer_list.dwork, __rpc_queue_timer_fn);
>> +	INIT_DELAYED_WORK(&queue->timer_list.dwork, __rpc_queue_timer_fn);
>>  	INIT_LIST_HEAD(&queue->timer_list.list);
>>  	rpc_assign_waitqueue_name(queue, qname);
>>  }
> 
> Thanks!
> 
> Tested-by: Jon Hunter <jonathanh@nvidia.com>

I see this is now applied in -next, but I am seeing the failures on
mainline. Any chance we could still get this into v5.4?

Cheers
Jon

Patch
diff mbox series

diff --git a/net/sunrpc/sched.c b/net/sunrpc/sched.c
index 360afe153193..987c4b1f0b17 100644
--- a/net/sunrpc/sched.c
+++ b/net/sunrpc/sched.c
@@ -260,7 +260,7 @@  static void __rpc_init_priority_wait_queue(struct rpc_wait_queue *queue, const c
 	rpc_reset_waitqueue_priority(queue);
 	queue->qlen = 0;
 	queue->timer_list.expires = 0;
-	INIT_DEFERRABLE_WORK(&queue->timer_list.dwork, __rpc_queue_timer_fn);
+	INIT_DELAYED_WORK(&queue->timer_list.dwork, __rpc_queue_timer_fn);
 	INIT_LIST_HEAD(&queue->timer_list.list);
 	rpc_assign_waitqueue_name(queue, qname);
 }