+ fsdb->fsdb_notify_start = cfs_time_current();
+ mgs_revoke_lock(fsdb->fsdb_mgs, fsdb, CONFIG_T_RECOVER);
+ }
+
+ complete(&fsdb->fsdb_notify_comp);
+ return 0;
+}
+
+int mgs_ir_init_fs(const struct lu_env *env, struct mgs_device *mgs,
+ struct fs_db *fsdb)
+{
+ struct task_struct *task;
+
+ if (!ir_timeout)
+ ir_timeout = OBD_IR_MGS_TIMEOUT;
+
+ fsdb->fsdb_ir_state = IR_FULL;
+ if (cfs_time_before(cfs_time_current_sec(),
+ mgs->mgs_start_time + ir_timeout))
+ fsdb->fsdb_ir_state = IR_STARTUP;
+ fsdb->fsdb_nonir_clients = 0;
+ INIT_LIST_HEAD(&fsdb->fsdb_clients);
+
+ /* start notify thread */
+ fsdb->fsdb_mgs = mgs;
+ atomic_set(&fsdb->fsdb_notify_phase, 0);
+ init_waitqueue_head(&fsdb->fsdb_notify_waitq);
+ init_completion(&fsdb->fsdb_notify_comp);
+
+ task = kthread_run(mgs_ir_notify, fsdb,
+ "mgs_%s_notify", fsdb->fsdb_name);
+ if (!IS_ERR(task))
+ wait_for_completion(&fsdb->fsdb_notify_comp);
+ else
+ CERROR("Start notify thread error %ld\n", PTR_ERR(task));
+
+ mgs_nidtbl_init_fs(env, fsdb);
+ return 0;