lo->ll_time_last_complete = lo->ll_time_last_checkpoint;
lo->ll_success_count++;
} else if (rc == 0) {
- if (lfsck->li_paused)
- lo->ll_status = LS_PAUSED;
- else
+ lo->ll_status = lfsck->li_status;
+ if (lo->ll_status == 0)
lo->ll_status = LS_STOPPED;
} else {
lo->ll_status = LS_FAILED;
lr->lr_status = rc;
} else if (rc == 0) {
lr->lr_event = LE_STOP;
- if (lfsck->li_paused)
+ if (lfsck->li_status == LS_PAUSED ||
+ lfsck->li_status == LS_CO_PAUSED)
lr->lr_status = LS_CO_PAUSED;
- else
+ else if (lfsck->li_status == LS_STOPPED ||
+ lfsck->li_status == LS_CO_STOPPED)
lr->lr_status = LS_CO_STOPPED;
+ else
+ LBUG();
} else {
lr->lr_event = LE_STOP;
lr->lr_status = LS_CO_FAILED;
list_del_init(&com->lc_link);
list_add_tail(&com->lc_link, &lfsck->li_list_double_scan);
} else if (result == 0) {
- if (lfsck->li_paused) {
- lo->ll_status = LS_PAUSED;
- } else {
+ lo->ll_status = lfsck->li_status;
+ if (lo->ll_status == 0)
lo->ll_status = LS_STOPPED;
+ if (lo->ll_status != LS_PAUSED) {
list_del_init(&com->lc_link);
list_add_tail(&com->lc_link, &lfsck->li_list_idle);
}
list_del_init(&com->lc_link);
list_add_tail(&com->lc_link, &lfsck->li_list_double_scan);
} else if (result == 0) {
- if (lfsck->li_paused) {
- lo->ll_status = LS_PAUSED;
- } else {
+ lo->ll_status = lfsck->li_status;
+ if (lo->ll_status == 0)
lo->ll_status = LS_STOPPED;
+ if (lo->ll_status != LS_PAUSED) {
list_del_init(&com->lc_link);
list_add_tail(&com->lc_link, &lfsck->li_list_idle);
}
&lwi);
}
+static int lfsck_layout_master_in_notify(const struct lu_env *env,
+ struct lfsck_component *com,
+ struct lfsck_request *lr)
+{
+ /* XXX: to record the event from layout slave on the OST. */
+ return 0;
+}
+
+static int lfsck_layout_slave_in_notify(const struct lu_env *env,
+ struct lfsck_component *com,
+ struct lfsck_request *lr)
+{
+ /* XXX: to record the event from layout master on the MDT. */
+ return 0;
+}
+
+static int lfsck_layout_query(const struct lu_env *env,
+ struct lfsck_component *com)
+{
+ struct lfsck_layout *lo = com->lc_file_ram;
+
+ return lo->ll_status;
+}
+
static struct lfsck_operations lfsck_layout_master_ops = {
.lfsck_reset = lfsck_layout_reset,
.lfsck_fail = lfsck_layout_fail,
.lfsck_double_scan = lfsck_layout_master_double_scan,
.lfsck_data_release = lfsck_layout_master_data_release,
.lfsck_quit = lfsck_layout_master_quit,
+ .lfsck_in_notify = lfsck_layout_master_in_notify,
+ .lfsck_query = lfsck_layout_query,
};
static struct lfsck_operations lfsck_layout_slave_ops = {
.lfsck_dump = lfsck_layout_dump,
.lfsck_double_scan = lfsck_layout_slave_double_scan,
.lfsck_data_release = lfsck_layout_slave_data_release,
+ .lfsck_in_notify = lfsck_layout_slave_in_notify,
+ .lfsck_query = lfsck_layout_query,
};
int lfsck_layout_setup(const struct lu_env *env, struct lfsck_instance *lfsck)