"failout",
"dryrun",
"all_targets",
+ "broadcast",
+ "orphan",
NULL
};
GOTO(stop, rc);
/* 5a. update bookmark */
- rc = dt_declare_record_write(env, bk_obj, len, 0, th);
+ rc = dt_declare_record_write(env, bk_obj,
+ lfsck_buf_get(env, bk, len), 0, th);
if (rc != 0)
GOTO(stop, rc);
GOTO(stop, rc);
/* 8a. update bookmark locally. */
- rc = dt_declare_record_write(env, bk_obj, len, 0, th);
+ rc = dt_declare_record_write(env, bk_obj,
+ lfsck_buf_get(env, bk, len), 0, th);
if (rc != 0)
GOTO(stop, rc);
ltd = lfsck_tgt_get(&lfsck->li_mdt_descs, 0);
if (unlikely(ltd == NULL))
- RETURN(-ENODEV);
+ RETURN(-ENXIO);
parent = lfsck_object_find_by_dev(env, ltd->ltd_tgt,
&LU_LPF_FID);
ss = lu_site2seq(lfsck->li_bottom->dd_lu_dev.ld_site);
if (unlikely(ss == NULL))
- RETURN(-ENODEV);
+ RETURN(-ENXIO);
OBD_ALLOC_PTR(lfsck->li_seq);
if (lfsck->li_seq == NULL)
int flag;
int rc;
int i;
+ bool newline = (bits != 0 ? false : true);
- rc = snprintf(*buf, *len, "%s:%c", prefix, bits != 0 ? ' ' : '\n');
+ rc = snprintf(*buf, *len, "%s:%c", prefix, newline ? '\n' : ' ');
if (rc <= 0)
return -ENOSPC;
if (flag & bits) {
bits &= ~flag;
if (names[i] != NULL) {
+ if (bits == 0)
+ newline = true;
+
rc = snprintf(*buf, *len, "%s%c", names[i],
- bits != 0 ? ',' : '\n');
+ newline ? '\n' : ',');
if (rc <= 0)
return -ENOSPC;
}
}
}
+
+ if (!newline) {
+ rc = snprintf(*buf, *len, "\n");
+ if (rc <= 0)
+ return -ENOSPC;
+
+ *buf += rc;
+ *len -= rc;
+ }
+
return save - *len;
}
struct lfsck_async_interpret_args *laia = args;
struct lfsck_component *com;
+ LASSERT(laia->laia_com == NULL);
LASSERT(laia->laia_shared);
spin_lock(&lfsck->li_lock);
int rc = 0;
int rc1 = 0;
- cfs_list_for_each_entry_safe(com, next, &lfsck->li_list_double_scan,
- lc_link) {
+ list_for_each_entry(com, &lfsck->li_list_double_scan, lc_link) {
if (lfsck->li_bookmark_ram.lb_param & LPF_DRYRUN)
com->lc_journal = 0;
atomic_read(&lfsck->li_double_scan_count) == 0,
&lwi);
+ if (lfsck->li_status != LS_PAUSED &&
+ lfsck->li_status != LS_CO_PAUSED) {
+ list_for_each_entry_safe(com, next, &lfsck->li_list_double_scan,
+ lc_link) {
+ spin_lock(&lfsck->li_lock);
+ list_del_init(&com->lc_link);
+ list_add_tail(&com->lc_link, &lfsck->li_list_idle);
+ spin_unlock(&lfsck->li_lock);
+ }
+ }
+
return rc1 != 0 ? rc1 : rc;
}
lc_link) {
if (com->lc_ops->lfsck_quit != NULL)
com->lc_ops->lfsck_quit(env, com);
+
+ spin_lock(&lfsck->li_lock);
+ list_del_init(&com->lc_link);
+ list_del_init(&com->lc_link_dir);
+ list_add_tail(&com->lc_link, &lfsck->li_list_idle);
+ spin_unlock(&lfsck->li_lock);
}
list_for_each_entry_safe(com, next, &lfsck->li_list_double_scan,
lc_link) {
if (com->lc_ops->lfsck_quit != NULL)
com->lc_ops->lfsck_quit(env, com);
+
+ spin_lock(&lfsck->li_lock);
+ list_del_init(&com->lc_link);
+ list_add_tail(&com->lc_link, &lfsck->li_list_idle);
+ spin_unlock(&lfsck->li_lock);
}
}
lfsck->li_bookmark_ram.lb_speed_limit);
lfsck_instance_put(&env, lfsck);
} else {
- rc = -ENODEV;
+ rc = -ENXIO;
}
lu_env_fini(&env);
mutex_unlock(&lfsck->li_mutex);
lfsck_instance_put(&env, lfsck);
} else {
- rc = -ENODEV;
+ rc = -ENXIO;
}
lu_env_fini(&env);
lfsck->li_bookmark_ram.lb_async_windows);
lfsck_instance_put(&env, lfsck);
} else {
- rc = -ENODEV;
+ rc = -ENXIO;
}
lu_env_fini(&env);
}
lfsck_instance_put(&env, lfsck);
} else {
- rc = -ENODEV;
+ rc = -ENXIO;
}
lu_env_fini(&env);
lfsck_instance_put(&env, lfsck);
} else {
- rc = -ENODEV;
+ rc = -ENXIO;
}
lu_env_fini(&env);
lfsck = lfsck_instance_find(key, true, false);
if (unlikely(lfsck == NULL))
- RETURN(-ENODEV);
+ RETURN(-ENXIO);
/* System is not ready, try again later. */
if (unlikely(lfsck->li_namespace == NULL))
lfsck = lfsck_instance_find(key, true, false);
if (unlikely(lfsck == NULL))
- RETURN(-ENODEV);
+ RETURN(-ENXIO);
thread = &lfsck->li_thread;
/* release lfsck::li_mutex to avoid deadlock. */
case LE_PHASE2_DONE:
case LE_FID_ACCESSED:
case LE_PEER_EXIT:
- case LE_CONDITIONAL_DESTROY: {
+ case LE_CONDITIONAL_DESTROY:
+ case LE_PAIRS_VERIFY: {
struct lfsck_instance *lfsck;
struct lfsck_component *com;
lfsck = lfsck_instance_find(key, true, false);
if (unlikely(lfsck == NULL))
- RETURN(-ENODEV);
+ RETURN(-ENXIO);
com = lfsck_component_find(lfsck, lr->lr_active);
if (likely(com != NULL)) {
lfsck = lfsck_instance_find(key, true, false);
if (unlikely(lfsck == NULL))
- RETURN(-ENODEV);
+ RETURN(-ENXIO);
com = lfsck_component_find(lfsck, lr->lr_active);
if (likely(com != NULL)) {
struct ldlm_namespace *ns)
{
struct lfsck_instance *lfsck;
- int rc = -ENODEV;
+ int rc = -ENXIO;
lfsck = lfsck_instance_find(key, true, false);
if (likely(lfsck != NULL)) {