@@ -174,7 +174,7 @@ int ocfs2_recovery_init(struct ocfs2_super *osb)
174
174
struct ocfs2_recovery_map * rm ;
175
175
176
176
mutex_init (& osb -> recovery_lock );
177
- osb -> disable_recovery = 0 ;
177
+ osb -> recovery_state = OCFS2_REC_ENABLED ;
178
178
osb -> recovery_thread_task = NULL ;
179
179
init_waitqueue_head (& osb -> recovery_event );
180
180
@@ -206,7 +206,7 @@ void ocfs2_recovery_exit(struct ocfs2_super *osb)
206
206
/* disable any new recovery threads and wait for any currently
207
207
* running ones to exit. Do this before setting the vol_state. */
208
208
mutex_lock (& osb -> recovery_lock );
209
- osb -> disable_recovery = 1 ;
209
+ osb -> recovery_state = OCFS2_REC_DISABLED ;
210
210
mutex_unlock (& osb -> recovery_lock );
211
211
wait_event (osb -> recovery_event , !ocfs2_recovery_thread_running (osb ));
212
212
@@ -1582,14 +1582,16 @@ static int __ocfs2_recovery_thread(void *arg)
1582
1582
1583
1583
void ocfs2_recovery_thread (struct ocfs2_super * osb , int node_num )
1584
1584
{
1585
+ int was_set = -1 ;
1586
+
1585
1587
mutex_lock (& osb -> recovery_lock );
1588
+ if (osb -> recovery_state < OCFS2_REC_DISABLED )
1589
+ was_set = ocfs2_recovery_map_set (osb , node_num );
1586
1590
1587
1591
trace_ocfs2_recovery_thread (node_num , osb -> node_num ,
1588
- osb -> disable_recovery , osb -> recovery_thread_task ,
1589
- osb -> disable_recovery ?
1590
- -1 : ocfs2_recovery_map_set (osb , node_num ));
1592
+ osb -> recovery_state , osb -> recovery_thread_task , was_set );
1591
1593
1592
- if (osb -> disable_recovery )
1594
+ if (osb -> recovery_state == OCFS2_REC_DISABLED )
1593
1595
goto out ;
1594
1596
1595
1597
if (osb -> recovery_thread_task )
0 commit comments