aboutsummaryrefslogtreecommitdiffstats
path: root/fs/nfs/nfs4state.c
diff options
context:
space:
mode:
Diffstat (limited to 'fs/nfs/nfs4state.c')
-rw-r--r--fs/nfs/nfs4state.c10
1 files changed, 6 insertions, 4 deletions
diff --git a/fs/nfs/nfs4state.c b/fs/nfs/nfs4state.c
index 62ae0fd345ad..ffea57885394 100644
--- a/fs/nfs/nfs4state.c
+++ b/fs/nfs/nfs4state.c
@@ -2601,11 +2601,12 @@ static void nfs4_state_manager(struct nfs_client *clp)
2601 nfs4_clear_state_manager_bit(clp); 2601 nfs4_clear_state_manager_bit(clp);
2602 /* Did we race with an attempt to give us more work? */ 2602 /* Did we race with an attempt to give us more work? */
2603 if (clp->cl_state == 0) 2603 if (clp->cl_state == 0)
2604 break; 2604 return;
2605 if (test_and_set_bit(NFS4CLNT_MANAGER_RUNNING, &clp->cl_state) != 0) 2605 if (test_and_set_bit(NFS4CLNT_MANAGER_RUNNING, &clp->cl_state) != 0)
2606 break; 2606 return;
2607 } while (refcount_read(&clp->cl_count) > 1); 2607 } while (refcount_read(&clp->cl_count) > 1 && !signalled());
2608 return; 2608 goto out_drain;
2609
2609out_error: 2610out_error:
2610 if (strlen(section)) 2611 if (strlen(section))
2611 section_sep = ": "; 2612 section_sep = ": ";
@@ -2613,6 +2614,7 @@ out_error:
2613 " with error %d\n", section_sep, section, 2614 " with error %d\n", section_sep, section,
2614 clp->cl_hostname, -status); 2615 clp->cl_hostname, -status);
2615 ssleep(1); 2616 ssleep(1);
2617out_drain:
2616 nfs4_end_drain_session(clp); 2618 nfs4_end_drain_session(clp);
2617 nfs4_clear_state_manager_bit(clp); 2619 nfs4_clear_state_manager_bit(clp);
2618} 2620}