diff options
Diffstat (limited to 'fs/nfs/nfs4state.c')
-rw-r--r-- | fs/nfs/nfs4state.c | 10 |
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 | |||
2609 | out_error: | 2610 | out_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); |
2617 | out_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 | } |