EXPORT_SYMBOL(libcfs_subsystem_debug);
unsigned int libcfs_debug = (D_CANTMASK |
- D_NETERROR | D_HA | D_CONFIG | D_IOCTL);
+ D_NETERROR | D_HA | D_CONFIG | D_IOCTL | D_LFSCK);
CFS_MODULE_PARM(libcfs_debug, "i", int, 0644,
"Lustre kernel debug mask");
EXPORT_SYMBOL(libcfs_debug);
lfsck_bookmark_le_to_cpu(bm, &lfsck->li_bookmark_disk);
if (bm->lb_magic != LFSCK_BOOKMARK_MAGIC) {
- CWARN("%s: invalid lfsck_bookmark magic %#x != %#x\n",
- lfsck_lfsck2name(lfsck), bm->lb_magic,
- LFSCK_BOOKMARK_MAGIC);
+ CDEBUG(D_LFSCK, "%s: invalid lfsck_bookmark magic "
+ "%#x != %#x\n", lfsck_lfsck2name(lfsck),
+ bm->lb_magic, LFSCK_BOOKMARK_MAGIC);
/* Process it as new lfsck_bookmark. */
rc = -ENODATA;
}
/* return -ENODATA for empty lfsck_bookmark. */
rc = -ENODATA;
else
- CERROR("%s: fail to load lfsck_bookmark: "
- "expected = %d, rc = %d\n",
+ CDEBUG(D_LFSCK, "%s: fail to load lfsck_bookmark, "
+ "expected = %d: rc = %d\n",
lfsck_lfsck2name(lfsck), len, rc);
}
return rc;
lfsck_bookmark_cpu_to_le(&lfsck->li_bookmark_disk,
&lfsck->li_bookmark_ram);
handle = dt_trans_create(env, lfsck->li_bottom);
- if (IS_ERR(handle)) {
- rc = PTR_ERR(handle);
- CERROR("%s: fail to create trans for storing lfsck_bookmark: "
- "rc = %d\n", lfsck_lfsck2name(lfsck), rc);
- RETURN(rc);
- }
+ if (IS_ERR(handle))
+ GOTO(log, rc = PTR_ERR(handle));
rc = dt_declare_record_write(env, obj,
lfsck_buf_get(env,
&lfsck->li_bookmark_disk, len),
0, handle);
- if (rc != 0) {
- CERROR("%s: fail to declare trans for storing lfsck_bookmark: "
- "rc = %d\n", lfsck_lfsck2name(lfsck), rc);
+ if (rc != 0)
GOTO(out, rc);
- }
rc = dt_trans_start_local(env, lfsck->li_bottom, handle);
- if (rc != 0) {
- CERROR("%s: fail to start trans for storing lfsck_bookmark: "
- "rc = %d\n", lfsck_lfsck2name(lfsck), rc);
+ if (rc != 0)
GOTO(out, rc);
- }
rc = dt_record_write(env, obj,
lfsck_buf_get(env, &lfsck->li_bookmark_disk, len),
&pos, handle);
- if (rc != 0)
- CERROR("%s: fail to store lfsck_bookmark: expected = %d, "
- "rc = %d\n", lfsck_lfsck2name(lfsck), len, rc);
GOTO(out, rc);
out:
dt_trans_stop(env, lfsck->li_bottom, handle);
+
+log:
+ if (rc != 0)
+ CDEBUG(D_LFSCK, "%s: fail to store lfsck_bookmark: rc = %d\n",
+ lfsck_lfsck2name(lfsck), rc);
return rc;
}
return rc;
}
-
struct lfsck_instance *lfsck)
{
struct lfsck_thread_info *info = lfsck_env_info(env);
- const struct dt_it_ops *iops =
- &lfsck->li_obj_dir->do_index_ops->dio_it;
+ struct dt_object *dir = lfsck->li_obj_dir;
+ const struct dt_it_ops *iops = &dir->do_index_ops->dio_it;
struct dt_it *di = lfsck->li_di_dir;
struct lu_dirent *ent = &info->lti_ent;
struct lu_fid *fid = &info->lti_fid;
lfsck->li_args_dir);
lfsck_unpack_ent(ent, &lfsck->li_cookie_dir);
if (rc != 0) {
+ CDEBUG(D_LFSCK, "%s: scan dir failed at rec(), "
+ "parent "DFID", cookie "LPX64": rc = %d\n",
+ lfsck_lfsck2name(lfsck),
+ PFID(lfsck_dto2fid(dir)),
+ lfsck->li_cookie_dir, rc);
lfsck_fail(env, lfsck, true);
if (bk->lb_param & LPF_FAILOUT)
RETURN(rc);
if (child == NULL) {
goto checkpoint;
} else if (IS_ERR(child)) {
+ CDEBUG(D_LFSCK, "%s: scan dir failed at find target, "
+ "parent "DFID", child %.*s "DFID": rc = %d\n",
+ lfsck_lfsck2name(lfsck),
+ PFID(lfsck_dto2fid(dir)),
+ ent->lde_namelen, ent->lde_name,
+ PFID(&ent->lde_fid), rc);
lfsck_fail(env, lfsck, true);
if (bk->lb_param & LPF_FAILOUT)
RETURN(PTR_ERR(child));
/* Rate control. */
lfsck_control_speed(lfsck);
- if (unlikely(!thread_is_running(thread)))
+ if (unlikely(!thread_is_running(thread))) {
+ CDEBUG(D_LFSCK, "%s: scan dir exit for engine stop, "
+ "parent "DFID", cookie "LPX64"\n",
+ lfsck_lfsck2name(lfsck),
+ PFID(lfsck_dto2fid(dir)),
+ lfsck->li_cookie_dir);
RETURN(0);
+ }
if (OBD_FAIL_CHECK(OBD_FAIL_LFSCK_FATAL2)) {
spin_lock(&lfsck->li_lock);
lfsck->li_new_scanned++;
rc = iops->rec(env, di, (struct dt_rec *)fid, 0);
if (rc != 0) {
+ CDEBUG(D_LFSCK, "%s: OIT scan failed at rec(): "
+ "rc = %d\n", lfsck_lfsck2name(lfsck), rc);
lfsck_fail(env, lfsck, true);
if (rc < 0 && bk->lb_param & LPF_FAILOUT)
RETURN(rc);
if (target == NULL) {
goto checkpoint;
} else if (IS_ERR(target)) {
+ CDEBUG(D_LFSCK, "%s: OIT scan failed at find target "
+ DFID", cookie "LPU64": rc = %d\n",
+ lfsck_lfsck2name(lfsck), PFID(fid),
+ iops->store(env, di), rc);
lfsck_fail(env, lfsck, true);
if (bk->lb_param & LPF_FAILOUT)
RETURN(PTR_ERR(target));
/* XXX: Currently, skip remote object, the consistency for
* remote object will be processed in LFSCK phase III. */
if (dt_object_exists(target) && !dt_object_remote(target)) {
- if (update_lma)
+ if (update_lma) {
rc = lfsck_update_lma(env, lfsck, target);
+ if (rc != 0)
+ CDEBUG(D_LFSCK, "%s: fail to update "
+ "LMA for "DFID": rc = %d\n",
+ lfsck_lfsck2name(lfsck),
+ PFID(lfsck_dto2fid(target)), rc);
+ }
if (rc == 0)
rc = lfsck_exec_oit(env, lfsck, target);
}
else if (likely(rc == 0))
lfsck->li_current_oit_processed = 0;
- if (unlikely(!thread_is_running(thread)))
+ if (unlikely(!thread_is_running(thread))) {
+ CDEBUG(D_LFSCK, "%s: OIT scan exit for engine stop, "
+ "cookie "LPU64"\n", lfsck_lfsck2name(lfsck),
+ iops->store(env, di));
RETURN(0);
+ }
} while (rc == 0 || lfsck->li_di_dir != NULL);
RETURN(rc);
oit_di = oit_iops->init(env, oit_obj, lfsck->li_args_oit, BYPASS_CAPA);
if (IS_ERR(oit_di)) {
rc = PTR_ERR(oit_di);
- CERROR("%s: LFSCK, fail to init iteration: rc = %d\n",
- lfsck_lfsck2name(lfsck), rc);
+ CDEBUG(D_LFSCK, "%s: master engine fail to init iteration: "
+ "rc = %d\n", lfsck_lfsck2name(lfsck), rc);
GOTO(fini_args, rc);
}
GOTO(fini_oit, rc);
CDEBUG(D_LFSCK, "LFSCK entry: oit_flags = %#x, dir_flags = %#x, "
- "oit_cookie = "LPU64", dir_cookie = "LPU64", parent = "DFID
+ "oit_cookie = "LPU64", dir_cookie = "LPX64", parent = "DFID
", pid = %d\n", lfsck->li_args_oit, lfsck->li_args_dir,
lfsck->li_pos_current.lp_oit_cookie,
lfsck->li_pos_current.lp_dir_cookie,
rc = 1;
CDEBUG(D_LFSCK, "LFSCK exit: oit_flags = %#x, dir_flags = %#x, "
- "oit_cookie = "LPU64", dir_cookie = "LPU64", parent = "DFID
+ "oit_cookie = "LPU64", dir_cookie = "LPX64", parent = "DFID
", pid = %d, rc = %d\n", lfsck->li_args_oit, lfsck->li_args_dir,
lfsck->li_pos_current.lp_oit_cookie,
lfsck->li_pos_current.lp_dir_cookie,
llsd->llsd_rbtree_valid = 1;
dev->dd_record_fid_accessed = 1;
+ CDEBUG(D_LFSCK, "%s: layout LFSCK init OST-objects accessing bitmap\n",
+ lfsck_lfsck2name(lfsck));
+
return 0;
}
lu_object_put(env, &llsd->llsd_rb_obj->do_lu);
llsd->llsd_rb_obj = NULL;
}
+
+ CDEBUG(D_LFSCK, "%s: layout LFSCK fini OST-objects accessing bitmap\n",
+ lfsck_lfsck2name(lfsck));
}
static void lfsck_rbtree_update_bitmap(const struct lu_env *env,
int rc = 0;
ENTRY;
- CDEBUG(D_LFSCK, "%s: update bitmap for "DFID"\n",
- lfsck_lfsck2name(com->lc_lfsck), PFID(fid));
-
if (unlikely(!fid_is_sane(fid) || fid_is_last_id(fid)))
RETURN_EXIT;
if (rc != 0 && accessed) {
struct lfsck_layout *lo = com->lc_file_ram;
- CERROR("%s: Fail to update object accessed bitmap, will cause "
- "incorrect LFSCK OST-object handling, so disable it to "
- "cancel orphan handling for related device. rc = %d.\n",
+ CDEBUG(D_LFSCK, "%s: fail to update OST-objects accessing "
+ "bitmap, and will cause incorrect LFSCK OST-object "
+ "handling, so disable it to cancel orphan handling "
+ "for related device. rc = %d\n",
lfsck_lfsck2name(com->lc_lfsck), rc);
+
lo->ll_flags |= LF_INCOMPLETE;
lfsck_rbtree_cleanup(env, com);
}
if (rc == 0) {
return -ENOENT;
} else if (rc < 0) {
- CWARN("%s: failed to load lfsck_layout: rc = %d\n",
- lfsck_lfsck2name(com->lc_lfsck), rc);
+ CDEBUG(D_LFSCK, "%s: failed to load lfsck_layout: rc = %d\n",
+ lfsck_lfsck2name(com->lc_lfsck), rc);
return rc;
} else if (rc != size) {
- CWARN("%s: crashed lfsck_layout, to be reset: rc = %d\n",
- lfsck_lfsck2name(com->lc_lfsck), rc);
+ CDEBUG(D_LFSCK, "%s: lfsck_layout size %u != %u; reset it\n",
+ lfsck_lfsck2name(com->lc_lfsck), rc, (unsigned int)size);
return 1;
}
lfsck_layout_le_to_cpu(lo, com->lc_file_disk);
if (lo->ll_magic != LFSCK_LAYOUT_MAGIC) {
- CWARN("%s: invalid lfsck_layout magic %#x != %#x, "
- "to be reset\n", lfsck_lfsck2name(com->lc_lfsck),
- lo->ll_magic, LFSCK_LAYOUT_MAGIC);
+ CDEBUG(D_LFSCK, "%s: invalid lfsck_layout magic %#x != %#x, "
+ "to be reset\n", lfsck_lfsck2name(com->lc_lfsck),
+ lo->ll_magic, LFSCK_LAYOUT_MAGIC);
return 1;
}
lfsck_layout_cpu_to_le(lo, com->lc_file_ram);
handle = dt_trans_create(env, lfsck->li_bottom);
- if (IS_ERR(handle)) {
- rc = PTR_ERR(handle);
- CERROR("%s: fail to create trans for storing lfsck_layout: "
- "rc = %d\n", lfsck_lfsck2name(lfsck), rc);
- RETURN(rc);
- }
+ if (IS_ERR(handle))
+ GOTO(log, rc = PTR_ERR(handle));
rc = dt_declare_record_write(env, obj, lfsck_buf_get(env, lo, size),
pos, handle);
- if (rc != 0) {
- CERROR("%s: fail to declare trans for storing lfsck_layout(1): "
- "rc = %d\n", lfsck_lfsck2name(lfsck), rc);
+ if (rc != 0)
GOTO(out, rc);
- }
rc = dt_trans_start_local(env, lfsck->li_bottom, handle);
- if (rc != 0) {
- CERROR("%s: fail to start trans for storing lfsck_layout: "
- "rc = %d\n", lfsck_lfsck2name(lfsck), rc);
+ if (rc != 0)
GOTO(out, rc);
- }
rc = dt_record_write(env, obj, lfsck_buf_get(env, lo, size), &pos,
handle);
- if (rc != 0)
- CERROR("%s: fail to store lfsck_layout(1): size = %d, "
- "rc = %d\n", lfsck_lfsck2name(lfsck), (int)size, rc);
GOTO(out, rc);
out:
dt_trans_stop(env, lfsck->li_bottom, handle);
+log:
+ if (rc != 0)
+ CDEBUG(D_LFSCK, "%s: fail to store lfsck_layout: rc = %d\n",
+ lfsck_lfsck2name(lfsck), rc);
return rc;
}
int rc;
ENTRY;
- CDEBUG(D_LFSCK, "To create LAST_ID for <seq> "LPX64"\n",
- fid_seq(lfsck_dto2fid(obj)));
-
if (bk->lb_param & LPF_DRYRUN)
return 0;
th = dt_trans_create(env, dt);
if (IS_ERR(th))
- RETURN(rc = PTR_ERR(th));
+ GOTO(log, rc = PTR_ERR(th));
rc = dt_declare_create(env, obj, la, NULL, dof, th);
if (rc != 0)
stop:
dt_trans_stop(env, dt, th);
+log:
+ CDEBUG(D_LFSCK, "%s: layout LFSCK will create LAST_ID for <seq> "
+ LPX64": rc = %d\n",
+ lfsck_lfsck2name(lfsck), fid_seq(lfsck_dto2fid(obj)), rc);
+
return rc;
}
}
#endif
- CDEBUG(D_LFSCK, "To sync the LAST_ID for <seq> "LPX64
- " as <oid> "LPU64"\n", lls->lls_seq, lls->lls_lastid);
+ CDEBUG(D_LFSCK, "%s: layout LFSCK will sync the LAST_ID for "
+ "<seq> "LPX64" as <oid> "LPU64"\n",
+ lfsck_lfsck2name(lfsck), lls->lls_seq, lls->lls_lastid);
if (bk->lb_param & LPF_DRYRUN) {
lls->lls_dirty = 0;
th = dt_trans_create(env, dt);
if (IS_ERR(th)) {
rc1 = PTR_ERR(th);
- CERROR("%s: (1) failed to store "LPX64": rc = %d\n",
+ CDEBUG(D_LFSCK, "%s: layout LFSCK failed to store "
+ "the LAST_ID for <seq> "LPX64"(1): rc = %d\n",
lfsck_lfsck2name(com->lc_lfsck),
lls->lls_seq, rc1);
continue;
dt_trans_stop(env, dt, th);
if (rc != 0) {
rc1 = rc;
- CERROR("%s: (2) failed to store "LPX64": rc = %d\n",
+ CDEBUG(D_LFSCK, "%s: layout LFSCK failed to store "
+ "the LAST_ID for <seq> "LPX64"(2): rc = %d\n",
lfsck_lfsck2name(com->lc_lfsck),
lls->lls_seq, rc1);
}
struct lfsck_layout *lo)
{
lo->ll_objs_failed_phase1++;
- if (unlikely(lo->ll_pos_first_inconsistent == 0))
+ if (unlikely(lo->ll_pos_first_inconsistent == 0)) {
lo->ll_pos_first_inconsistent =
lfsck->li_obj_oit->do_index_ops->dio_it.store(env,
lfsck->li_di_oit);
+
+ CDEBUG(D_LFSCK, "%s: layout LFSCK hit first non-repaired "
+ "inconsistency at the pos ["LPU64"]\n",
+ lfsck_lfsck2name(lfsck),
+ lo->ll_pos_first_inconsistent);
+ }
}
static int lfsck_layout_master_async_interpret(const struct lu_env *env,
if (rc != 0) {
struct lfsck_layout *lo = com->lc_file_ram;
- CERROR("%s: fail to notify %s %x for layout start: "
- "rc = %d\n", lfsck_lfsck2name(com->lc_lfsck),
+ CDEBUG(D_LFSCK, "%s: fail to notify %s %x for layout "
+ "start: rc = %d\n",
+ lfsck_lfsck2name(com->lc_lfsck),
(lr->lr_flags & LEF_TO_OST) ? "OST" : "MDT",
ltd->ltd_index, rc);
lo->ll_flags |= LF_INCOMPLETE;
case LE_PHASE2_DONE:
case LE_PEER_EXIT:
if (rc != 0 && rc != -EALREADY)
- CWARN("%s: fail to notify %s %x for layout: "
- "event = %d, rc = %d\n",
- lfsck_lfsck2name(com->lc_lfsck),
- (lr->lr_flags & LEF_TO_OST) ? "OST" : "MDT",
- ltd->ltd_index, lr->lr_event, rc);
+ CDEBUG(D_LFSCK, "%s: fail to notify %s %x for layout: "
+ "event = %d, rc = %d\n",
+ lfsck_lfsck2name(com->lc_lfsck),
+ (lr->lr_flags & LEF_TO_OST) ? "OST" : "MDT",
+ ltd->ltd_index, lr->lr_event, rc);
break;
case LE_QUERY: {
struct lfsck_reply *reply;
&RMF_LFSCK_REPLY);
if (reply == NULL) {
rc = -EPROTO;
- CERROR("%s: invalid return value: rc = %d\n",
+ CDEBUG(D_LFSCK, "%s: invalid query reply: rc = %d\n",
lfsck_lfsck2name(com->lc_lfsck), rc);
spin_lock(<ds->ltd_lock);
list_del_init(<d->ltd_layout_phase_list);
break;
}
default:
- CERROR("%s: unexpected event: rc = %d\n",
+ CDEBUG(D_LFSCK, "%s: layout LFSCK unexpected event: rc = %d\n",
lfsck_lfsck2name(com->lc_lfsck), lr->lr_event);
break;
}
lfsck_layout_master_async_interpret,
laia, LFSCK_QUERY);
if (rc != 0) {
- CERROR("%s: fail to query %s %x for layout: rc = %d\n",
- lfsck_lfsck2name(lfsck),
+ CDEBUG(D_LFSCK, "%s: layout LFSCK fail to query %s %x: "
+ "rc = %d\n", lfsck_lfsck2name(lfsck),
(lr->lr_flags & LEF_TO_OST) ? "OST" : "MDT",
ltd->ltd_index, rc);
lfsck_tgt_put(ltd);
lfsck_layout_master_async_interpret,
laia, LFSCK_NOTIFY);
if (rc != 0) {
- CERROR("%s: fail to notify %s %x for layout "
- "start: rc = %d\n",
+ CDEBUG(D_LFSCK, "%s: layout LFSCK fail to "
+ "notify %s %x for start: rc = %d\n",
lfsck_lfsck2name(lfsck),
(lr->lr_flags & LEF_TO_OST) ? "OST" :
"MDT", idx, rc);
lfsck_layout_master_async_interpret,
laia, LFSCK_NOTIFY);
if (rc != 0) {
- CERROR("%s: fail to notify %s %x for layout "
- "stop/phase2: rc = %d\n",
+ CDEBUG(D_LFSCK, "%s: layout LFSCK fail to "
+ "notify %s %x for stop/phase2_done/"
+ "peer_exit: rc = %d\n",
lfsck_lfsck2name(lfsck),
(lr->lr_flags & LEF_TO_OST) ? "OST" :
"MDT", ltd->ltd_index, rc);
lfsck_layout_master_async_interpret,
laia, LFSCK_NOTIFY);
if (rc != 0) {
- CERROR("%s: fail to notify MDT %x for layout "
- "phase1 done: rc = %d\n",
- lfsck_lfsck2name(lfsck),
+ CDEBUG(D_LFSCK, "%s: layout LFSCK fail to "
+ "notify MDT %x for phase1_done: "
+ "rc = %d\n", lfsck_lfsck2name(lfsck),
ltd->ltd_index, rc);
lfsck_tgt_put(ltd);
}
spin_unlock(<ds->ltd_lock);
break;
default:
- CERROR("%s: unexpected LFSCK event: rc = %d\n",
+ CDEBUG(D_LFSCK, "%s: layout LFSCK unexpected event: rc = %d\n",
lfsck_lfsck2name(lfsck), lr->lr_event);
rc = -EINVAL;
break;
struct lov_ost_data_v1 *objs;
int rc;
__u16 count;
+ bool hole = false;
ENTRY;
if (fl == LU_XATTR_CREATE || reset) {
count = ea_off + 1;
LASSERT(buf->lb_len == lov_mds_md_size(count, LOV_MAGIC_V1));
- if (ea_off != 0 || reset)
+ if (ea_off != 0 || reset) {
pattern |= LOV_PATTERN_F_HOLE;
+ hole = true;
+ }
memset(lmm, 0, buf->lb_len);
lmm->lmm_magic = cpu_to_le32(LOV_MAGIC_V1);
if (gap > 0) {
memset(objs, 0, gap * sizeof(*objs));
lmm->lmm_pattern |= cpu_to_le32(LOV_PATTERN_F_HOLE);
+ hole = true;
}
lmm->lmm_layout_gen =
rc = lfsck_layout_refill_lovea(env, handle, parent, cfid, buf, objs,
fl, ost_idx);
+ CDEBUG(D_LFSCK, "%s: layout LFSCK assistant extend layout EA for "
+ DFID": parent "DFID", OST-index %u, stripe-index %u, fl %d, "
+ "reset %s, %s LOV EA hole: rc = %d\n",
+ lfsck_lfsck2name(lfsck), PFID(cfid), PFID(lfsck_dto2fid(parent)),
+ ost_idx, ea_off, fl, reset ? "yes" : "no",
+ hole ? "with" : "without", rc);
+
RETURN(rc);
}
}
/**
- * This function will create the MDT-object will the given (partial) LOV EA.
+ * This function will create the MDT-object with the given (partial) LOV EA.
*
* Under some data corruption cases, the MDT-object of the file may be lost,
* but its OST-objects, or some of them are there. The layout LFSCK needs to
* \param[in] ea_off the stripe offset in the LOV EA
*
* \retval positive on repaired something
- * \retval if needs to repair nothing
+ * \retval 0 if needs to repair nothing
* \retval negative error number on failure
*/
static int lfsck_layout_recreate_parent(const struct lu_env *env,
if (unlikely(lfsck->li_lpf_obj == NULL)) {
rc = lfsck_create_lpf(env, lfsck);
if (rc != 0)
- RETURN(rc);
+ GOTO(log, rc);
}
if (fid_is_zero(pfid)) {
pbuf = lfsck_buf_get(env, ff, sizeof(struct filter_fid));
cobj = lfsck_object_find_by_dev(env, ltd->ltd_tgt, cfid);
if (IS_ERR(cobj))
- RETURN(PTR_ERR(cobj));
+ GOTO(log, rc = PTR_ERR(cobj));
}
- CDEBUG(D_LFSCK, "Re-create the lost MDT-object: parent "DFID", child "
- DFID", OST-index %u, stripe-index %u, infix %s, type %s\n",
- PFID(pfid), PFID(cfid), ltd->ltd_index, ea_off, infix, type);
-
pobj = lfsck_object_find_by_dev(env, lfsck->li_bottom, pfid);
if (IS_ERR(pobj))
GOTO(put, rc = PTR_ERR(pobj));
lu_object_put(env, &pobj->do_lu);
ea_buf->lb_len = buflen;
+log:
+ if (rc < 0)
+ CDEBUG(D_LFSCK, "%s layout LFSCK assistant failed to "
+ "recreate the lost MDT-object: parent "DFID
+ ", child "DFID", OST-index %u, stripe-index %u, "
+ "infix %s, type %s: rc = %d\n",
+ lfsck_lfsck2name(lfsck), PFID(pfid), PFID(cfid),
+ ltd->ltd_index, ea_off, infix, type, rc);
+
return rc >= 0 ? 1 : rc;
}
rc = dt_destroy(env, obj, th);
if (rc == 0)
- CDEBUG(D_LFSCK, "Destroy the empty OST-object "DFID" which "
- "was created for reparing dangling referenced case. "
- "But the original missed OST-object is found now.\n",
- PFID(fid));
+ CDEBUG(D_LFSCK, "%s: layout LFSCK destroyed the empty "
+ "OST-object "DFID" that was created for reparing "
+ "dangling referenced case. But the original missed "
+ "OST-object is found now.\n",
+ lfsck_lfsck2name(lfsck), PFID(fid));
GOTO(stop, rc);
ostid_le_to_cpu(&slot->l_ost_oi, oi);
ostid_to_fid(cfid2, oi, ost_idx2);
- CDEBUG(D_LFSCK, "Handle layout EA conflict: parent "DFID
- ", cur-child "DFID" on the OST %u, orphan-child "
- DFID" on the OST %u, stripe-index %u\n",
- PFID(lfsck_dto2fid(parent)), PFID(cfid2), ost_idx2,
- PFID(cfid), ltd->ltd_index, ea_off);
-
/* Hold layout lock on the parent to prevent others to access. */
rc = lfsck_layout_lock(env, com, parent, &lh,
MDS_INODELOCK_LAYOUT | MDS_INODELOCK_XATTR);
out:
ea_buf->lb_len = ori_len;
+ CDEBUG(D_LFSCK, "%s: layout LFSCK assistant replaced the conflict "
+ "OST-object "DFID" on the OST %x with the orphan "DFID" on "
+ "the OST %x: parent "DFID", stripe-index %u: rc = %d\n",
+ lfsck_lfsck2name(com->lc_lfsck), PFID(cfid2), ost_idx2,
+ PFID(cfid), ltd->ltd_index, PFID(lfsck_dto2fid(parent)),
+ ea_off, rc);
+
return rc >= 0 ? 1 : rc;
}
bool locked = false;
ENTRY;
- CDEBUG(D_LFSCK, "Re-create the crashed layout EA: parent "
- DFID", child "DFID", OST-index %u, stripe-index %u\n",
- PFID(lfsck_dto2fid(parent)), PFID(cfid), ost_idx, ea_off);
-
rc = lfsck_layout_lock(env, com, parent, &lh,
MDS_INODELOCK_LAYOUT | MDS_INODELOCK_XATTR);
- if (rc != 0)
+ if (rc != 0) {
+ CDEBUG(D_LFSCK, "%s: layout LFSCK assistant failed to recreate "
+ "LOV EA for "DFID": parent "DFID", OST-index %u, "
+ "stripe-index %u: rc = %d\n",
+ lfsck_lfsck2name(lfsck), PFID(cfid),
+ PFID(lfsck_dto2fid(parent)), ost_idx, ea_off, rc);
+
RETURN(rc);
+ }
again:
if (locked) {
rc = lfsck_layout_refill_lovea(env, handle, parent,
cfid, buf, objs, fl,
ost_idx);
+
+ CDEBUG(D_LFSCK, "%s layout LFSCK assistant fill "
+ "dummy layout slot for "DFID": parent "DFID
+ ", OST-index %u, stripe-index %u: rc = %d\n",
+ lfsck_lfsck2name(lfsck), PFID(cfid),
+ PFID(lfsck_dto2fid(parent)), ost_idx, i, rc);
+
GOTO(unlock_parent, rc);
}
rc = lfsck_layout_update_pfid(env, com, parent,
cfid, ltd->ltd_tgt, i);
+ CDEBUG(D_LFSCK, "%s layout LFSCK assistant "
+ "updated OST-object's pfid for "DFID
+ ": parent "DFID", OST-index %u, "
+ "stripe-index %u: rc = %d\n",
+ lfsck_lfsck2name(lfsck), PFID(cfid),
+ PFID(lfsck_dto2fid(parent)),
+ ltd->ltd_index, i, rc);
+
RETURN(rc);
}
}
int rc = 0;
ENTRY;
- CDEBUG(D_LFSCK, "%s: start the orphan scanning for OST%04x\n",
+ CDEBUG(D_LFSCK, "%s: layout LFSCK assistant starts the orphan "
+ "scanning for OST%04x\n",
lfsck_lfsck2name(lfsck), ltd->ltd_index);
ostid_set_seq(oi, FID_SEQ_IDIF);
ostid_to_fid(fid, oi, ltd->ltd_index);
obj = lfsck_object_find_by_dev(env, ltd->ltd_tgt, fid);
if (unlikely(IS_ERR(obj)))
- RETURN(PTR_ERR(obj));
+ GOTO(log, rc = PTR_ERR(obj));
rc = obj->do_ops->do_index_try(env, obj, &dt_lfsck_orphan_features);
if (rc != 0)
put:
lu_object_put(env, &obj->do_lu);
- CDEBUG(D_LFSCK, "%s: finish the orphan scanning for OST%04x, rc = %d\n",
+log:
+ CDEBUG(D_LFSCK, "%s: layout LFSCK assistant finished the orphan "
+ "scanning for OST%04x: rc = %d\n",
lfsck_lfsck2name(lfsck), ltd->ltd_index, rc);
return rc > 0 ? 0 : rc;
else
create = false;
- CDEBUG(D_LFSCK, "Found dangling reference for: parent "DFID
- ", child "DFID", OST-index %u, stripe-index %u, owner %u:%u. %s",
- PFID(lfsck_dto2fid(parent)), PFID(lfsck_dto2fid(child)),
- llr->llr_ost_idx, llr->llr_lov_idx, pla->la_uid, pla->la_gid,
- create ? "Create the lost OST-object as required.\n" :
- "Keep the MDT-object there by default.\n");
-
if (!create)
- RETURN(1);
+ GOTO(log, rc = 1);
memset(cla, 0, sizeof(*cla));
cla->la_uid = pla->la_uid;
rc = lfsck_layout_lock(env, com, parent, &lh,
MDS_INODELOCK_LAYOUT | MDS_INODELOCK_XATTR);
if (rc != 0)
- RETURN(rc);
+ GOTO(log, rc);
handle = dt_trans_create(env, dev);
if (IS_ERR(handle))
unlock1:
lfsck_layout_unlock(&lh);
+log:
+ CDEBUG(D_LFSCK, "%s: layout LFSCK assistant found dangling "
+ "reference for: parent "DFID", child "DFID", OST-index %u, "
+ "stripe-index %u, owner %u/%u. %s: rc = %d\n",
+ lfsck_lfsck2name(com->lc_lfsck), PFID(lfsck_dto2fid(parent)),
+ PFID(lfsck_dto2fid(child)), llr->llr_ost_idx,
+ llr->llr_lov_idx, pla->la_uid, pla->la_gid,
+ create ? "Create the lost OST-object as required" :
+ "Keep the MDT-object there by default", rc);
+
return rc;
}
int rc;
ENTRY;
- CDEBUG(D_LFSCK, "Repair unmatched MDT-OST pair for: parent "DFID
- ", child "DFID", OST-index %u, stripe-index %u, owner %u:%u\n",
- PFID(lfsck_dto2fid(parent)), PFID(lfsck_dto2fid(child)),
- llr->llr_ost_idx, llr->llr_lov_idx, pla->la_uid, pla->la_gid);
-
rc = lfsck_layout_lock(env, com, parent, &lh,
MDS_INODELOCK_LAYOUT | MDS_INODELOCK_XATTR);
if (rc != 0)
- RETURN(rc);
+ GOTO(log, rc);
handle = dt_trans_create(env, dev);
if (IS_ERR(handle))
unlock1:
lfsck_layout_unlock(&lh);
+log:
+ CDEBUG(D_LFSCK, "%s: layout LFSCK assistant repaired unmatched "
+ "MDT-OST pair for: parent "DFID", child "DFID", OST-index %u, "
+ "stripe-index %u, owner %u/%u: rc = %d\n",
+ lfsck_lfsck2name(com->lc_lfsck), PFID(lfsck_dto2fid(parent)),
+ PFID(lfsck_dto2fid(child)), llr->llr_ost_idx, llr->llr_lov_idx,
+ pla->la_uid, pla->la_gid, rc);
+
return rc;
}
int rc;
ENTRY;
- CDEBUG(D_LFSCK, "Repair multiple references for: parent "DFID
- ", OST-index %u, stripe-index %u, owner %u:%u\n",
- PFID(lfsck_dto2fid(parent)), llr->llr_ost_idx,
- llr->llr_lov_idx, la->la_uid, la->la_gid);
-
rc = lfsck_layout_lock(env, com, parent, &lh,
MDS_INODELOCK_LAYOUT | MDS_INODELOCK_XATTR);
if (rc != 0)
- RETURN(rc);
+ GOTO(log, rc);
handle = dt_trans_create(env, pdev);
if (IS_ERR(handle))
unlock1:
lfsck_layout_unlock(&lh);
+log:
+ CDEBUG(D_LFSCK, "%s: layout LFSCK assistant repaired multiple "
+ "references for: parent "DFID", OST-index %u, stripe-index %u, "
+ "owner %u/%u: rc = %d\n",
+ lfsck_lfsck2name(com->lc_lfsck), PFID(lfsck_dto2fid(parent)),
+ llr->llr_ost_idx, llr->llr_lov_idx, la->la_uid, la->la_gid, rc);
+
return rc;
}
int rc;
ENTRY;
- CDEBUG(D_LFSCK, "Repair inconsistent file owner for: parent "DFID
- ", child "DFID", OST-index %u, stripe-index %u, owner %u:%u\n",
- PFID(lfsck_dto2fid(parent)), PFID(lfsck_dto2fid(child)),
- llr->llr_ost_idx, llr->llr_lov_idx, pla->la_uid, pla->la_gid);
-
handle = dt_trans_create(env, dev);
if (IS_ERR(handle))
- RETURN(PTR_ERR(handle));
+ GOTO(log, rc = PTR_ERR(handle));
tla->la_uid = pla->la_uid;
tla->la_gid = pla->la_gid;
/* Get the latest parent's owner. */
rc = dt_attr_get(env, parent, tla, BYPASS_CAPA);
- if (rc != 0) {
- CWARN("%s: fail to get the latest parent's ("DFID") owner, "
- "not sure whether some others chown/chgrp during the "
- "LFSCK: rc = %d\n", lfsck_lfsck2name(com->lc_lfsck),
- PFID(lfsck_dto2fid(parent)), rc);
-
+ if (rc != 0)
GOTO(unlock, rc);
- }
/* Some others chown/chgrp during the LFSCK, needs to do nothing. */
if (unlikely(tla->la_uid != pla->la_uid ||
stop:
rc = lfsck_layout_trans_stop(env, dev, handle, rc);
+log:
+ CDEBUG(D_LFSCK, "%s: layout LFSCK assistant repaired inconsistent "
+ "file owner for: parent "DFID", child "DFID", OST-index %u, "
+ "stripe-index %u, owner %u/%u: rc = %d\n",
+ lfsck_lfsck2name(com->lc_lfsck), PFID(lfsck_dto2fid(parent)),
+ PFID(lfsck_dto2fid(child)), llr->llr_ost_idx, llr->llr_lov_idx,
+ pla->la_uid, pla->la_gid, rc);
+
return rc;
}
rc == -EHOSTUNREACH) {
/* If cannot touch the target server,
* mark the LFSCK as INCOMPLETE. */
- CERROR("%s: Fail to talk with OST %x: rc = %d.\n",
+ CDEBUG(D_LFSCK, "%s: layout LFSCK assistant fail to "
+ "talk with OST %x: rc = %d\n",
lfsck_lfsck2name(lfsck), llr->llr_ost_idx, rc);
lo->ll_flags |= LF_INCOMPLETE;
lo->ll_objs_skipped++;
rc = lfsck_layout_master_notify_others(env, com, lr);
if (rc != 0) {
- CERROR("%s: fail to notify others for layout start: rc = %d\n",
+ CDEBUG(D_LFSCK, "%s: layout LFSCK assistant failed to notify "
+ "others for LFSCK start: rc = %d\n",
lfsck_lfsck2name(lfsck), rc);
GOTO(fini, rc);
}
lr->lr_status = llmd->llmd_post_result;
rc = lfsck_layout_master_notify_others(env, com, lr);
if (rc != 0)
- CERROR("%s: failed to notify others "
- "for layout post: rc = %d\n",
+ CDEBUG(D_LFSCK, "%s: layout LFSCK assistant "
+ "failed to notify others for LFSCK "
+ "post: rc = %d\n",
lfsck_lfsck2name(lfsck), rc);
/* Wakeup the master engine to go ahead. */
llmd->llmd_in_double_scan = 1;
wake_up_all(&mthread->t_ctl_waitq);
+ CDEBUG(D_LFSCK, "%s: layout LFSCK assistant phase2 "
+ "scan start\n", lfsck_lfsck2name(lfsck));
+
com->lc_new_checked = 0;
com->lc_new_scanned = 0;
com->lc_time_last_checkpoint = cfs_time_current();
lr->lr_status = LS_CO_STOPPED;
break;
default:
- CERROR("%s: unknown status: rc = %d\n",
+ CDEBUG(D_LFSCK, "%s: unknown status: rc = %d\n",
lfsck_lfsck2name(lfsck),
lfsck->li_status);
lr->lr_status = LS_CO_FAILED;
rc1 = lfsck_layout_master_notify_others(env, com, lr);
if (rc1 != 0) {
- CERROR("%s: failed to notify others for layout quit: rc = %d\n",
+ CDEBUG(D_LFSCK, "%s: layout LFSCK assistant failed to "
+ "notify others for LFSCK quit: rc = %d\n",
lfsck_lfsck2name(lfsck), rc1);
rc = rc1;
}
/* Under force exit case, some requests may be just freed without
* verification, those objects should be re-handled when next run.
* So not update the on-disk tracing file under such case. */
- if (llmd->llmd_in_double_scan && !llmd->llmd_exit)
- rc1 = lfsck_layout_double_scan_result(env, com, rc);
+ if (llmd->llmd_in_double_scan) {
+ struct lfsck_layout *lo = com->lc_file_ram;
+
+ if (!llmd->llmd_exit)
+ rc1 = lfsck_layout_double_scan_result(env, com, rc);
+
+ CDEBUG(D_LFSCK, "%s: layout LFSCK assistant phase2 scan "
+ "finished, status %d: rc = %d\n",
+ lfsck_lfsck2name(lfsck), lo->ll_status, rc1);
+ }
fini:
if (llmd->llmd_in_double_scan)
struct lfsck_component *com = llsaa->llsaa_com;
struct lfsck_layout_slave_target *llst = llsaa->llsaa_llst;
struct lfsck_layout_slave_data *llsd = com->lc_data;
+ struct lfsck_reply *lr = NULL;
bool done = false;
if (rc != 0) {
* the target finished the LFSCK prcoessing. */
done = true;
} else {
- struct lfsck_reply *lr;
-
lr = req_capsule_server_get(&req->rq_pill, &RMF_LFSCK_REPLY);
if (lr->lr_status != LS_SCANNING_PHASE1 &&
lr->lr_status != LS_SCANNING_PHASE2)
done = true;
}
- if (done)
+
+ if (done) {
+ CDEBUG(D_LFSCK, "%s: layout LFSCK slave gets the MDT %x "
+ "status %d\n", lfsck_lfsck2name(com->lc_lfsck),
+ llst->llst_index, lr != NULL ? lr->lr_status : rc);
+
lfsck_layout_llst_del(llsd, llst);
+ }
+
lfsck_layout_llst_put(llst);
lfsck_component_put(env, com);
class_export_put(exp);
set = ptlrpc_prep_set();
if (set == NULL)
- RETURN(-ENOMEM);
+ GOTO(log, rc = -ENOMEM);
memset(lr, 0, sizeof(*lr));
lr->lr_index = lfsck_dev_idx(lfsck->li_bottom);
rc = lfsck_layout_async_query(env, com, exp, llst, lr, set);
if (rc != 0) {
- CERROR("%s: slave fail to query %s for layout: "
- "rc = %d\n", lfsck_lfsck2name(lfsck),
+ CDEBUG(D_LFSCK, "%s: layout LFSCK slave fail to "
+ "query %s for layout: rc = %d\n",
+ lfsck_lfsck2name(lfsck),
exp->exp_obd->obd_name, rc);
+
rc1 = rc;
lfsck_layout_llst_put(llst);
class_export_put(exp);
rc = ptlrpc_set_wait(set);
ptlrpc_set_destroy(set);
- RETURN(rc1 != 0 ? rc1 : rc);
+ GOTO(log, rc = (rc1 != 0 ? rc1 : rc));
+
+log:
+ CDEBUG(D_LFSCK, "%s: layout LFSCK slave queries master: rc = %d\n",
+ lfsck_lfsck2name(com->lc_lfsck), rc);
+
+ return rc;
}
static void
int rc;
ENTRY;
+ CDEBUG(D_LFSCK, "%s: layout LFSCK slave notifies master\n",
+ lfsck_lfsck2name(com->lc_lfsck));
+
set = ptlrpc_prep_set();
if (set == NULL)
RETURN_EXIT;
rc = lfsck_layout_async_notify(env, exp, lr, set);
if (rc != 0)
- CERROR("%s: slave fail to notify %s for layout: "
- "rc = %d\n", lfsck_lfsck2name(lfsck),
+ CDEBUG(D_LFSCK, "%s: layout LFSCK slave fail to "
+ "notify %s for layout: rc = %d\n",
+ lfsck_lfsck2name(lfsck),
exp->exp_obd->obd_name, rc);
+
lfsck_layout_llst_put(llst);
class_export_put(exp);
spin_lock(&llsd->llsd_lock);
obj = lfsck_object_find_by_dev(env, dev, &lr->lr_fid);
if (IS_ERR(obj))
- RETURN(PTR_ERR(obj));
+ GOTO(log, rc = PTR_ERR(obj));
fid_cpu_to_le(&ff->ff_parent, &lr->lr_fid2);
buf = lfsck_buf_get(env, ff, sizeof(*ff));
dt_write_unlock(env, obj);
lu_object_put(env, &obj->do_lu);
+log:
+ CDEBUG(D_LFSCK, "%s: layout LFSCK slave repaired pfid for "DFID
+ ", parent "DFID": rc = %d\n", lfsck_lfsck2name(com->lc_lfsck),
+ PFID(&lr->lr_fid), PFID(&lr->lr_fid2), rc);
+
return rc;
}
rc = lfsck_layout_store(env, com);
up_write(&com->lc_sem);
+ CDEBUG(D_LFSCK, "%s: layout LFSCK reset: rc = %d\n",
+ lfsck_lfsck2name(com->lc_lfsck), rc);
+
return rc;
}
rc = lfsck_layout_store(env, com);
up_write(&com->lc_sem);
+ CDEBUG(D_LFSCK, "%s: layout LFSCK master checkpoint at the pos ["
+ LPU64"]: rc = %d\n", lfsck_lfsck2name(lfsck),
+ lfsck->li_pos_current.lp_oit_cookie, rc);
+
return rc;
}
return 0;
down_write(&com->lc_sem);
-
if (init) {
lo->ll_pos_latest_start = lfsck->li_pos_current.lp_oit_cookie;
} else {
}
rc = lfsck_layout_store(env, com);
-
up_write(&com->lc_sem);
+ CDEBUG(D_LFSCK, "%s: layout LFSCK slave checkpoint at the pos ["
+ LPU64"]: rc = %d\n", lfsck_lfsck2name(lfsck),
+ lfsck->li_pos_current.lp_oit_cookie, rc);
+
return rc;
}
if (rc == 0)
rc = lfsck_set_param(env, lfsck, start, true);
- if (rc != 0)
+ if (rc != 0) {
+ CDEBUG(D_LFSCK, "%s: layout LFSCK prep failed: "
+ "rc = %d\n", lfsck_lfsck2name(lfsck), rc);
+
return rc;
+ }
}
down_write(&com->lc_sem);
write_unlock(&llsd->llsd_rb_lock);
}
+ CDEBUG(D_LFSCK, "%s: layout LFSCK slave prep done, start pos ["
+ LPU64"]\n", lfsck_lfsck2name(lfsck),
+ com->lc_pos_start.lp_oit_cookie);
+
return rc;
}
task = kthread_run(lfsck_layout_assistant, lta, "lfsck_layout");
if (IS_ERR(task)) {
rc = PTR_ERR(task);
- CERROR("%s: Cannot start LFSCK layout assistant thread: "
+ CERROR("%s: cannot start LFSCK layout assistant thread: "
"rc = %d\n", lfsck_lfsck2name(lfsck), rc);
lfsck_thread_args_fini(lta);
} else {
rc = 0;
}
+ CDEBUG(D_LFSCK, "%s: layout LFSCK master prep done, start pos ["
+ LPU64"\n", lfsck_lfsck2name(lfsck),
+ com->lc_pos_start.lp_oit_cookie);
+
RETURN(rc);
}
ostid_to_fid(fid, oi, index);
tgt = lfsck_tgt_get(ltds, index);
if (unlikely(tgt == NULL)) {
- CERROR("%s: Cannot talk with OST %x which did not join "
- "the layout LFSCK.\n",
+ CDEBUG(D_LFSCK, "%s: cannot talk with OST %x which "
+ "did not join the layout LFSCK\n",
lfsck_lfsck2name(lfsck), index);
lo->ll_flags |= LF_INCOMPLETE;
goto next;
int rc = 0;
bool locked = false;
bool stripe = false;
+ bool bad_oi = false;
ENTRY;
if (!S_ISREG(lfsck_object_type(obj)))
GOTO(out, stripe = true);
/* Inconsistent lmm_oi, should be repaired. */
- CDEBUG(D_LFSCK, "Repair bad lmm_oi for "DFID"\n",
- PFID(lfsck_dto2fid(obj)));
+ bad_oi = true;
if (bk->lb_param & LPF_DRYRUN) {
down_write(&com->lc_sem);
dt_trans_stop(env, dev, handle);
lfsck_layout_unlock(&lh);
+
+ if (bad_oi)
+ CDEBUG(D_LFSCK, "%s: layout LFSCK master %s bad lmm_oi for "
+ DFID": rc = %d\n", lfsck_lfsck2name(lfsck),
+ bk->lb_param & LPF_DRYRUN ? "found" : "repaired",
+ PFID(lfsck_dto2fid(obj)), rc);
+
if (stripe) {
rc = lfsck_layout_scan_stripes(env, com, obj, lmm);
} else {
lls->lls_seq = seq;
rc = lfsck_layout_lastid_load(env, com, lls);
if (rc != 0) {
+ CDEBUG(D_LFSCK, "%s: layout LFSCK failed to "
+ "load LAST_ID for "LPX64": rc = %d\n",
+ lfsck_lfsck2name(com->lc_lfsck), seq, rc);
lo->ll_objs_failed_phase1++;
OBD_FREE_PTR(lls);
GOTO(unlock, rc);
/* OFD may create new objects during LFSCK scanning. */
rc = lfsck_layout_lastid_reload(env, com, lls);
if (unlikely(rc != 0))
- CWARN("%s: failed to reload LAST_ID for "LPX64
- ": rc = %d\n",
+ CDEBUG(D_LFSCK, "%s: layout LFSCK failed to "
+ "reload LAST_ID for "LPX64": rc = %d\n",
lfsck_lfsck2name(com->lc_lfsck),
lls->lls_seq, rc);
if (oid <= lls->lls_lastid)
rc = lfsck_layout_store(env, com);
up_write(&com->lc_sem);
+ CDEBUG(D_LFSCK, "%s: layout LFSCK master post done: rc = %d\n",
+ lfsck_lfsck2name(lfsck), rc);
+
RETURN(rc);
}
LASSERT(lfsck->li_out_notify != NULL);
down_write(&com->lc_sem);
-
spin_lock(&lfsck->li_lock);
if (!init)
lo->ll_pos_last_checkpoint =
}
rc = lfsck_layout_store(env, com);
-
up_write(&com->lc_sem);
lfsck_layout_slave_notify_master(env, com, LE_PHASE1_DONE, result);
if (result <= 0)
lfsck_rbtree_cleanup(env, com);
+ CDEBUG(D_LFSCK, "%s: layout LFSCK slave post done: rc = %d\n",
+ lfsck_lfsck2name(lfsck), rc);
+
return rc;
}
RETURN(0);
}
+ CDEBUG(D_LFSCK, "%s: layout LFSCK slave phase2 scan start\n",
+ lfsck_lfsck2name(lfsck));
+
atomic_inc(&lfsck->li_double_scan_count);
com->lc_new_checked = 0;
if (atomic_dec_and_test(&lfsck->li_double_scan_count))
wake_up_all(&lfsck->li_thread.t_ctl_waitq);
+ CDEBUG(D_LFSCK, "%s: layout LFSCK slave phase2 scan finished, "
+ "status %d: rc = %d\n",
+ lfsck_lfsck2name(lfsck), lo->ll_status, rc);
+
return rc;
}
RETURN(rc);
}
+ CDEBUG(D_LFSCK, "%s: layout LFSCK master handle notify %u "
+ "from %s %x, status %d\n", lfsck_lfsck2name(lfsck),
+ lr->lr_event, (lr->lr_flags & LEF_TO_OST) ? "OST" : "MDT",
+ lr->lr_index, lr->lr_status);
+
if (lr->lr_event != LE_PHASE1_DONE &&
lr->lr_event != LE_PHASE2_DONE &&
lr->lr_event != LE_PEER_EXIT)
if (lr->lr_status <= 0) {
ltd->ltd_layout_done = 1;
list_del_init(<d->ltd_layout_list);
- CWARN("%s: %s %x failed/stopped at phase1: rc = %d.\n",
- lfsck_lfsck2name(lfsck),
- (lr->lr_flags & LEF_TO_OST) ? "OST" : "MDT",
- ltd->ltd_index, lr->lr_status);
lo->ll_flags |= LF_INCOMPLETE;
fail = true;
break;
fail = true;
ltd->ltd_layout_done = 1;
list_del_init(<d->ltd_layout_list);
- if (!(lfsck->li_bookmark_ram.lb_param & LPF_FAILOUT)) {
- CWARN("%s: the peer %s %x exit layout LFSCK.\n",
- lfsck_lfsck2name(lfsck),
- (lr->lr_flags & LEF_TO_OST) ? "OST" : "MDT",
- ltd->ltd_index);
+ if (!(lfsck->li_bookmark_ram.lb_param & LPF_FAILOUT))
lo->ll_flags |= LF_INCOMPLETE;
- }
break;
default:
break;
}
case LE_PHASE2_DONE:
case LE_PEER_EXIT:
+ CDEBUG(D_LFSCK, "%s: layout LFSCK slave handle notify %u "
+ "from MDT %x, status %d\n", lfsck_lfsck2name(lfsck),
+ lr->lr_event, lr->lr_index, lr->lr_status);
break;
default:
RETURN(-EINVAL);
lfsck_layout_master_async_interpret,
laia, LFSCK_NOTIFY);
if (rc != 0) {
- CERROR("%s: Fail to notify %s %x for co-stop: rc = %d\n",
+ CDEBUG(D_LFSCK, "%s: layout LFSCK fail to notify %s %x "
+ "for co-stop: rc = %d\n",
lfsck_lfsck2name(lfsck),
(lr->lr_flags & LEF_TO_OST) ? "OST" : "MDT",
ltd->ltd_index, rc);
spin_unlock(&lfsck->li_lock);
break;
default:
- CERROR("%s: unknown lfsck_layout status: rc = %u\n",
+ CERROR("%s: unknown lfsck_layout status %d\n",
lfsck_lfsck2name(lfsck), lo->ll_status);
/* fall through */
case LS_SCANNING_PHASE1:
if (root != NULL && !IS_ERR(root))
lu_object_put(env, &root->do_lu);
- if (rc != 0)
+ if (rc != 0) {
lfsck_component_cleanup(env, com);
+ CERROR("%s: fail to init layout LFSCK component: rc = %d\n",
+ lfsck_lfsck2name(lfsck), rc);
+ }
return rc;
}
stop:
dt_trans_stop(env, dev, handle);
+ CDEBUG(D_LFSCK, "destroy orphan OST-object "DFID": rc = %d\n",
+ PFID(lfsck_dto2fid(obj)), rc);
+
RETURN_EXIT;
}
out:
if (com != NULL)
lfsck_component_put(env, com);
+
+ CDEBUG(D_LFSCK, "%s: init the orphan iteration: rc = %d\n",
+ lfsck_lfsck2name(lfsck), rc);
+
lfsck_instance_put(env, lfsck);
if (rc != 0) {
if (it != NULL)
struct lfsck_layout_slave_target *llst;
if (com != NULL) {
+ CDEBUG(D_LFSCK, "%s: fini the orphan iteration\n",
+ lfsck_lfsck2name(com->lc_lfsck));
+
llsd = com->lc_data;
read_unlock(&llsd->llsd_rb_lock);
llst = it->loi_llst;
LASSERT(llst != NULL);
if (hash != llst->llst_hash) {
- CWARN("%s: the given hash "LPU64" for orphan iteration does "
- "not match the one when fini "LPU64", to be reset.\n",
- lfsck_lfsck2name(it->loi_com->lc_lfsck), hash,
- llst->llst_hash);
+ CDEBUG(D_LFSCK, "%s: the given hash "LPU64" for orphan "
+ "iteration does not match the one when fini "
+ LPU64", to be reset.\n",
+ lfsck_lfsck2name(it->loi_com->lc_lfsck), hash,
+ llst->llst_hash);
fid_zero(&llst->llst_fid);
llst->llst_hash = 0;
}
seq_printf(m, "%s: "LPU64", N/A, N/A\n",
prefix, pos->lp_oit_cookie);
} else {
- seq_printf(m, "%s: "LPU64", "DFID", "LPU64"\n",
+ seq_printf(m, "%s: "LPU64", "DFID", "LPX64"\n",
prefix, pos->lp_oit_cookie,
PFID(&pos->lp_dir_parent), pos->lp_dir_cookie);
}
format = &RQF_LFSCK_QUERY;
break;
default:
- CERROR("%s: unknown async request: opc = %d\n",
- exp->exp_obd->obd_name, request);
+ CDEBUG(D_LFSCK, "%s: unknown async request %d: rc = %d\n",
+ exp->exp_obd->obd_name, request, -EINVAL);
return -EINVAL;
}
LASSERT(stop->ls_flags & LPF_BROADCAST);
set = ptlrpc_prep_set();
- if (unlikely(set == NULL)) {
- CERROR("%s: cannot allocate memory for stop LFSCK on "
- "all targets\n", lfsck_lfsck2name(lfsck));
-
+ if (unlikely(set == NULL))
RETURN(-ENOMEM);
- }
memset(lr, 0, sizeof(*lr));
lr->lr_event = LE_STOP;
if (rc != 0) {
lfsck_interpret(env, lfsck, NULL, laia, rc);
lfsck_tgt_put(ltd);
- CWARN("%s: cannot notify MDT %x for LFSCK stop: "
- "rc = %d\n", lfsck_lfsck2name(lfsck), idx, rc);
+ CERROR("%s: cannot notify MDT %x for LFSCK stop: "
+ "rc = %d\n", lfsck_lfsck2name(lfsck), idx, rc);
rc1 = rc;
}
}
rc = 0;
if (rc != 0)
- CWARN("%s: fail to stop LFSCK on some MDTs: rc = %d\n",
- lfsck_lfsck2name(lfsck), rc);
+ CERROR("%s: fail to stop LFSCK on some MDTs: rc = %d\n",
+ lfsck_lfsck2name(lfsck), rc);
RETURN(rc != 0 ? rc : rc1);
}
LASSERT(start->ls_flags & LPF_BROADCAST);
set = ptlrpc_prep_set();
- if (unlikely(set == NULL)) {
- if (bk->lb_param & LPF_FAILOUT) {
- CERROR("%s: cannot allocate memory for start LFSCK on "
- "all targets, failout.\n",
- lfsck_lfsck2name(lfsck));
-
- RETURN(-ENOMEM);
- } else {
- CWARN("%s: cannot allocate memory for start LFSCK on "
- "all targets, partly scan.\n",
- lfsck_lfsck2name(lfsck));
-
- RETURN(0);
- }
- }
+ if (unlikely(set == NULL))
+ RETURN(-ENOMEM);
memset(lr, 0, sizeof(*lr));
lr->lr_event = LE_START;
if (rc != 0) {
lfsck_interpret(env, lfsck, NULL, laia, rc);
lfsck_tgt_put(ltd);
- if (bk->lb_param & LPF_FAILOUT) {
- CERROR("%s: cannot notify MDT %x for LFSCK "
- "start, failout: rc = %d\n",
- lfsck_lfsck2name(lfsck), idx, rc);
- break;
- } else {
- CWARN("%s: cannot notify MDT %x for LFSCK "
- "start, partly scan: rc = %d\n",
- lfsck_lfsck2name(lfsck), idx, rc);
- rc = 0;
- }
+ CERROR("%s: cannot notify MDT %x for LFSCK "
+ "start, failout: rc = %d\n",
+ lfsck_lfsck2name(lfsck), idx, rc);
+ break;
}
}
up_read(<ds->ltd_rw_sem);
rc = laia->laia_result;
if (rc != 0) {
- if (bk->lb_param & LPF_FAILOUT) {
- struct lfsck_stop *stop = &info->lti_stop;
-
- CERROR("%s: cannot start LFSCK on some MDTs, "
- "stop all: rc = %d\n",
- lfsck_lfsck2name(lfsck), rc);
- if (rc != -EALREADY) {
- stop->ls_status = LS_FAILED;
- stop->ls_flags = LPF_ALL_TGT | LPF_BROADCAST;
- lfsck_stop_all(env, lfsck, stop);
- }
- } else {
- CWARN("%s: cannot start LFSCK on some MDTs, "
- "partly scan: rc = %d\n",
- lfsck_lfsck2name(lfsck), rc);
- rc = 0;
+ struct lfsck_stop *stop = &info->lti_stop;
+
+ CERROR("%s: cannot start LFSCK on some MDTs, "
+ "stop all: rc = %d\n",
+ lfsck_lfsck2name(lfsck), rc);
+ if (rc != -EALREADY) {
+ stop->ls_status = LS_FAILED;
+ stop->ls_flags = LPF_ALL_TGT | LPF_BROADCAST;
+ lfsck_stop_all(env, lfsck, stop);
}
}
lfsck_namespace_le_to_cpu(ns,
(struct lfsck_namespace *)com->lc_file_disk);
if (ns->ln_magic != LFSCK_NAMESPACE_MAGIC) {
- CWARN("%s: invalid lfsck_namespace magic %#x != %#x\n",
- lfsck_lfsck2name(com->lc_lfsck), ns->ln_magic,
- LFSCK_NAMESPACE_MAGIC);
+ CDEBUG(D_LFSCK, "%s: invalid lfsck_namespace magic "
+ "%#x != %#x\n", lfsck_lfsck2name(com->lc_lfsck),
+ ns->ln_magic, LFSCK_NAMESPACE_MAGIC);
rc = 1;
} else {
rc = 0;
}
} else if (rc != -ENODATA) {
- CERROR("%s: fail to load lfsck_namespace: expected = %d, "
- "rc = %d\n", lfsck_lfsck2name(com->lc_lfsck), len, rc);
+ CDEBUG(D_LFSCK, "%s: fail to load lfsck_namespace, "
+ "expected = %d: rc = %d\n",
+ lfsck_lfsck2name(com->lc_lfsck), len, rc);
if (rc >= 0)
rc = 1;
}
lfsck_namespace_cpu_to_le((struct lfsck_namespace *)com->lc_file_disk,
(struct lfsck_namespace *)com->lc_file_ram);
handle = dt_trans_create(env, lfsck->li_bottom);
- if (IS_ERR(handle)) {
- rc = PTR_ERR(handle);
- CERROR("%s: fail to create trans for storing lfsck_namespace: "
- "rc = %d\n", lfsck_lfsck2name(lfsck), rc);
- RETURN(rc);
- }
+ if (IS_ERR(handle))
+ GOTO(log, rc = PTR_ERR(handle));
rc = dt_declare_xattr_set(env, obj,
lfsck_buf_get(env, com->lc_file_disk, len),
XATTR_NAME_LFSCK_NAMESPACE, 0, handle);
- if (rc != 0) {
- CERROR("%s: fail to declare trans for storing lfsck_namespace: "
- "rc = %d\n", lfsck_lfsck2name(lfsck), rc);
+ if (rc != 0)
GOTO(out, rc);
- }
rc = dt_trans_start_local(env, lfsck->li_bottom, handle);
- if (rc != 0) {
- CERROR("%s: fail to start trans for storing lfsck_namespace: "
- "rc = %d\n", lfsck_lfsck2name(lfsck), rc);
+ if (rc != 0)
GOTO(out, rc);
- }
rc = dt_xattr_set(env, obj,
lfsck_buf_get(env, com->lc_file_disk, len),
XATTR_NAME_LFSCK_NAMESPACE,
init ? LU_XATTR_CREATE : LU_XATTR_REPLACE,
handle, BYPASS_CAPA);
- if (rc != 0)
- CERROR("%s: fail to store lfsck_namespace: len = %d, "
- "rc = %d\n", lfsck_lfsck2name(lfsck), len, rc);
GOTO(out, rc);
out:
dt_trans_stop(env, lfsck->li_bottom, handle);
+
+log:
+ if (rc != 0)
+ CDEBUG(D_LFSCK, "%s: fail to store lfsck_namespace: rc = %d\n",
+ lfsck_lfsck2name(lfsck), rc);
return rc;
}
if (exist) {
rc = dt_delete(env, obj, (const struct dt_key *)key, handle,
BYPASS_CAPA);
- if (rc != 0) {
- CERROR("%s: fail to insert "DFID": rc = %d\n",
- lfsck_lfsck2name(com->lc_lfsck), PFID(fid), rc);
+ if (rc != 0)
GOTO(out, rc);
- }
}
rc = dt_insert(env, obj, (const struct dt_rec *)&flags,
if (bk->lb_param & LPF_DRYRUN)
RETURN(1);
- CDEBUG(D_LFSCK, "Remove linkEA: "DFID"[%.*s], "DFID"\n",
- PFID(lfsck_dto2fid(child)), cname->ln_namelen, cname->ln_name,
- PFID(pfid));
+ CDEBUG(D_LFSCK, "%s: namespace LFSCK remove invalid linkEA "
+ "for the object: "DFID", parent "DFID", name %.*s\n",
+ lfsck_lfsck2name(lfsck), PFID(lfsck_dto2fid(child)),
+ PFID(pfid), cname->ln_namelen, cname->ln_name);
+
linkea_del_buf(&ldata, cname);
update = true;
}
if (rc == 0 && !lfsck_is_dead_obj(child) &&
ldata.ld_leh != NULL &&
ldata.ld_leh->leh_reccount != la->la_nlink)
- CWARN("%s: the object "DFID" linkEA entry count %u "
- "may not match its hardlink count %u\n",
- lfsck_lfsck2name(lfsck), PFID(cfid),
- ldata.ld_leh->leh_reccount, la->la_nlink);
+ CDEBUG(D_LFSCK, "%s: the object "DFID" linkEA entry "
+ "count %u may not match its hardlink count %u\n",
+ lfsck_lfsck2name(lfsck), PFID(cfid),
+ ldata.ld_leh->leh_reccount, la->la_nlink);
dt_write_unlock(env, child);
}
root = dt_locate(env, lfsck->li_bottom, &lfsck->li_local_root_fid);
if (IS_ERR(root))
- RETURN(PTR_ERR(root));
+ GOTO(log, rc = PTR_ERR(root));
- if (unlikely(!dt_try_as_dir(env, root))) {
- lu_object_put(env, &root->do_lu);
- RETURN(-ENOTDIR);
- }
+ if (unlikely(!dt_try_as_dir(env, root)))
+ GOTO(put, rc = -ENOTDIR);
down_write(&com->lc_sem);
if (init) {
out:
up_write(&com->lc_sem);
+
+put:
lu_object_put(env, &root->do_lu);
+log:
+ CDEBUG(D_LFSCK, "%s: namespace LFSCK reset: rc = %d\n",
+ lfsck_lfsck2name(lfsck), rc);
return rc;
}
if (new_checked)
com->lc_new_checked++;
ns->ln_items_failed++;
- if (lfsck_pos_is_zero(&ns->ln_pos_first_inconsistent))
+ if (lfsck_pos_is_zero(&ns->ln_pos_first_inconsistent)) {
lfsck_pos_fill(env, com->lc_lfsck,
&ns->ln_pos_first_inconsistent, false);
+
+ CDEBUG(D_LFSCK, "%s: namespace LFSCK hit first non-repaired "
+ "inconsistency at the pos ["LPU64", "DFID", "LPX64"]\n",
+ lfsck_lfsck2name(com->lc_lfsck),
+ ns->ln_pos_first_inconsistent.lp_oit_cookie,
+ PFID(&ns->ln_pos_first_inconsistent.lp_dir_parent),
+ ns->ln_pos_first_inconsistent.lp_dir_cookie);
+ }
up_write(&com->lc_sem);
}
return 0;
down_write(&com->lc_sem);
-
if (init) {
ns->ln_pos_latest_start = lfsck->li_pos_current;
} else {
}
rc = lfsck_namespace_store(env, com, false);
-
up_write(&com->lc_sem);
+
+ CDEBUG(D_LFSCK, "%s: namespace LFSCK checkpoint at the pos ["LPU64
+ ", "DFID", "LPX64"]: rc = %d\n", lfsck_lfsck2name(lfsck),
+ lfsck->li_pos_current.lp_oit_cookie,
+ PFID(&lfsck->li_pos_current.lp_dir_parent),
+ lfsck->li_pos_current.lp_dir_cookie, rc);
+
return rc;
}
if (rc == 0)
rc = lfsck_set_param(env, lfsck, lsp->lsp_start, true);
- if (rc != 0)
+ if (rc != 0) {
+ CDEBUG(D_LFSCK, "%s: namespace LFSCK prep failed: "
+ "rc = %d\n", lfsck_lfsck2name(lfsck), rc);
+
return rc;
+ }
}
down_write(&com->lc_sem);
-
ns->ln_time_latest_start = cfs_time_current_sec();
spin_lock(&lfsck->li_lock);
}
}
spin_unlock(&lfsck->li_lock);
-
up_write(&com->lc_sem);
+
+ CDEBUG(D_LFSCK, "%s: namespace LFSCK prep done, start pos ["LPU64", "
+ DFID", "LPX64"]\n", lfsck_lfsck2name(lfsck), pos->lp_oit_cookie,
+ PFID(&pos->lp_dir_parent), pos->lp_dir_cookie);
+
return 0;
}
bool locked = false;
bool remove;
bool newdata;
+ bool log = false;
int count = 0;
int rc;
ENTRY;
nodata:
if (bk->lb_param & LPF_DRYRUN) {
ns->ln_linkea_repaired++;
+ log = true;
repaired = true;
goto record;
}
count = ldata.ld_leh->leh_reccount;
ns->ln_linkea_repaired++;
+ log = true;
repaired = true;
} else {
GOTO(stop, rc);
dt_trans_stop(env, lfsck->li_next, handle);
handle = NULL;
+
+ if (log)
+ CDEBUG(D_LFSCK, "%s: namespace LFSCK repaired "
+ "linkEA for the object: "DFID", parent "
+ DFID", name %.*s\n",
+ lfsck_lfsck2name(lfsck), PFID(cfid), PFID(pfid),
+ ent->lde_namelen, ent->lde_name);
}
ns->ln_mlinked_checked++;
out:
if (rc < 0) {
+ CDEBUG(D_LFSCK, "%s: namespace LFSCK exec_dir failed, "
+ "parent "DFID", child name %.*s, child FID "DFID
+ ": rc = %d\n", lfsck_lfsck2name(lfsck), PFID(pfid),
+ ent->lde_namelen, ent->lde_name, PFID(cfid), rc);
+
ns->ln_items_failed++;
if (lfsck_pos_is_zero(&ns->ln_pos_first_inconsistent))
lfsck_pos_fill(env, lfsck,
int rc;
down_write(&com->lc_sem);
-
spin_lock(&lfsck->li_lock);
if (!init)
ns->ln_pos_last_checkpoint = lfsck->li_pos_current;
}
rc = lfsck_namespace_store(env, com, false);
-
up_write(&com->lc_sem);
+
+ CDEBUG(D_LFSCK, "%s: namespace LFSCK post done: rc = %d\n",
+ lfsck_lfsck2name(lfsck), rc);
+
return rc;
}
__u8 flags = 0;
ENTRY;
+ CDEBUG(D_LFSCK, "%s: namespace LFSCK phase2 scan start\n",
+ lfsck_lfsck2name(lfsck));
+
com->lc_new_checked = 0;
com->lc_new_scanned = 0;
com->lc_time_last_checkpoint = cfs_time_current();
ns->ln_status = LS_FAILED;
}
+ CDEBUG(D_LFSCK, "%s: namespace LFSCK phase2 scan finished, status %d: "
+ "rc = %d\n", lfsck_lfsck2name(lfsck), ns->ln_status, rc);
+
rc = lfsck_namespace_store(env, com, false);
up_write(&com->lc_sem);
if (atomic_dec_and_test(&lfsck->li_double_scan_count))
lta = lfsck_thread_args_init(lfsck, com, NULL);
if (IS_ERR(lta))
- RETURN(PTR_ERR(lta));
+ GOTO(out, rc = PTR_ERR(lta));
atomic_inc(&lfsck->li_double_scan_count);
task = kthread_run(lfsck_namespace_double_scan_main, lta,
"lfsck_namespace");
if (IS_ERR(task)) {
- rc = PTR_ERR(task);
- CERROR("%s: cannot start LFSCK namespace thread: rc = %d\n",
- lfsck_lfsck2name(lfsck), rc);
atomic_dec(&lfsck->li_double_scan_count);
lfsck_thread_args_fini(lta);
- } else {
- rc = 0;
+ GOTO(out, rc = PTR_ERR(task));
}
- RETURN(rc);
+ RETURN(0);
+
+out:
+ CERROR("%s: cannot start LFSCK namespace thread: rc = %d\n",
+ lfsck_lfsck2name(lfsck), rc);
+ return rc;
}
static int lfsck_namespace_in_notify(const struct lu_env *env,
spin_unlock(&lfsck->li_lock);
break;
default:
- CERROR("%s: unknown lfsck_namespace status: rc = %u\n",
+ CERROR("%s: unknown lfsck_namespace status %d\n",
lfsck_lfsck2name(lfsck), ns->ln_status);
/* fall through */
case LS_SCANNING_PHASE1:
out:
if (root != NULL && !IS_ERR(root))
lu_object_put(env, &root->do_lu);
- if (rc != 0)
+ if (rc != 0) {
lfsck_component_cleanup(env, com);
+ CERROR("%s: fail to init namespace LFSCK component: rc = %d\n",
+ lfsck_lfsck2name(lfsck), rc);
+ }
return rc;
}
bool wakeup = false;
OBD_ALLOC_PTR(oii);
- if (oii == NULL) {
- CERROR("%s: cannot alloc memory for verify OST-object "
- "consistency for "DFID", client given PFID "DFID
- ", local stored PFID "DFID"\n",
- ofd_name(ofd), PFID(&fo->ofo_header.loh_fid),
- oa->o_parent_seq, oa->o_parent_oid, oa->o_stripe_idx,
- PFID(&fo->ofo_pfid));
-
+ if (oii == NULL)
return;
- }
INIT_LIST_HEAD(&oii->oii_list);
lu_object_get(&fo->ofo_obj.do_lu);
* Pravin Shelar <pravin.shelar@sun.com> : Added fid in dirent
*/
-#define DEBUG_SUBSYSTEM S_MDS
+#define DEBUG_SUBSYSTEM S_OSD
#include <linux/module.h>
LASSERT(de->rec_len >= de->name_len + sizeof(struct osd_fid_pack));
rc = ldiskfs_journal_get_write_access(jh, bh);
- if (rc != 0) {
- CERROR("%.16s: fail to write access for update dirent: "
- "name = %.*s, rc = %d\n",
- LDISKFS_SB(sb)->s_es->s_volume_name,
- ent->oied_namelen, ent->oied_name, rc);
+ if (rc != 0)
RETURN(rc);
- }
rec = (struct osd_fid_pack *)(de->name + de->name_len + 1);
fid_cpu_to_be((struct lu_fid *)rec->fp_area, fid);
rc = ldiskfs_journal_dirty_metadata(jh, bh);
- if (rc != 0)
- CERROR("%.16s: fail to dirty metadata for update dirent: "
- "name = %.*s, rc = %d\n",
- LDISKFS_SB(sb)->s_es->s_volume_name,
- ent->oied_namelen, ent->oied_name, rc);
RETURN(rc);
}
if (osd_dirent_has_space(de->rec_len, ent->oied_namelen,
dir->i_sb->s_blocksize)) {
rc = ldiskfs_journal_get_write_access(jh, bh);
- if (rc != 0) {
- CERROR("%.16s: fail to write access for reinsert "
- "dirent: name = %.*s, rc = %d\n",
- LDISKFS_SB(inode->i_sb)->s_es->s_volume_name,
- ent->oied_namelen, ent->oied_name, rc);
+ if (rc != 0)
RETURN(rc);
- }
de->name[de->name_len] = 0;
rec = (struct osd_fid_pack *)(de->name + de->name_len + 1);
de->file_type |= LDISKFS_DIRENT_LUFID;
rc = ldiskfs_journal_dirty_metadata(jh, bh);
- if (rc != 0)
- CERROR("%.16s: fail to dirty metadata for reinsert "
- "dirent: name = %.*s, rc = %d\n",
- LDISKFS_SB(inode->i_sb)->s_es->s_volume_name,
- ent->oied_namelen, ent->oied_name, rc);
RETURN(rc);
}
rc = ldiskfs_delete_entry(jh, dir, de, bh);
- if (rc != 0) {
- CERROR("%.16s: fail to delete entry for reinsert dirent: "
- "name = %.*s, rc = %d\n",
- LDISKFS_SB(inode->i_sb)->s_es->s_volume_name,
- ent->oied_namelen, ent->oied_name, rc);
+ if (rc != 0)
RETURN(rc);
- }
dentry = osd_child_dentry_by_inode(env, dir, ent->oied_name,
ent->oied_namelen);
/* It is too bad, we cannot reinsert the name entry back.
* That means we lose it! */
if (rc != 0)
- CERROR("%.16s: fail to insert entry for reinsert dirent: "
- "name = %.*s, rc = %d\n",
+ CDEBUG(D_LFSCK, "%.16s: fail to reinsert the dirent, "
+ "dir = %lu/%u, name = %.*s, "DFID": rc = %d\n",
LDISKFS_SB(inode->i_sb)->s_es->s_volume_name,
- ent->oied_namelen, ent->oied_name, rc);
+ dir->i_ino, dir->i_generation,
+ ent->oied_namelen, ent->oied_name, PFID(fid), rc);
RETURN(rc);
}
jh = osd_journal_start_sb(sb, LDISKFS_HT_MISC, credits);
if (IS_ERR(jh)) {
rc = PTR_ERR(jh);
- CERROR("%.16s: fail to start trans for dirent "
- "check_repair: credits %d, name %.*s, rc %d\n",
- devname, credits, ent->oied_namelen,
- ent->oied_name, rc);
+ CDEBUG(D_LFSCK, "%.16s: fail to start trans for dirent "
+ "check_repair, dir = %lu/%u, credits = %d, "
+ "name = %.*s: rc = %d\n",
+ devname, dir->i_ino, dir->i_generation, credits,
+ ent->oied_namelen, ent->oied_name, rc);
RETURN(rc);
}
if (rc == -ENOENT || rc == -ESTALE) {
*attr |= LUDA_IGNORE;
rc = 0;
+ } else {
+ CDEBUG(D_LFSCK, "%.16s: fail to iget for dirent "
+ "check_repair, dir = %lu/%u, name = %.*s: "
+ "rc = %d\n",
+ devname, dir->i_ino, dir->i_generation,
+ ent->oied_namelen, ent->oied_name, rc);
}
GOTO(out_journal, rc);
rc = osd_dirent_update(jh, sb, ent, fid, bh, de);
if (rc == 0)
*attr |= LUDA_REPAIR;
+ else
+ CDEBUG(D_LFSCK, "%.16s: fail to update FID "
+ "in the dirent, dir = %lu/%u, "
+ "name = %.*s, "DFID": rc = %d\n",
+ devname, dir->i_ino, dir->i_generation,
+ ent->oied_namelen, ent->oied_name,
+ PFID(fid), rc);
} else {
/* Do not repair under dryrun mode. */
if (*attr & LUDA_VERIFY_DRYRUN) {
fid, bh, de, hlock);
if (rc == 0)
*attr |= LUDA_REPAIR;
+ else
+ CDEBUG(D_LFSCK, "%.16s: fail to append FID "
+ "after the dirent, dir = %lu/%u, "
+ "name = %.*s, "DFID": rc = %d\n",
+ devname, dir->i_ino, dir->i_generation,
+ ent->oied_namelen, ent->oied_name,
+ PFID(fid), rc);
}
} else if (rc == -ENODATA) {
/* Do not repair under dryrun mode. */
rc = osd_ea_fid_set(info, inode, fid, 0, 0);
if (rc == 0)
*attr |= LUDA_REPAIR;
+ else
+ CDEBUG(D_LFSCK, "%.16s: fail to set LMA for "
+ "update dirent, dir = %lu/%u, "
+ "name = %.*s, "DFID": rc = %d\n",
+ devname, dir->i_ino, dir->i_generation,
+ ent->oied_namelen, ent->oied_name,
+ PFID(fid), rc);
} else {
lu_igif_build(fid, inode->i_ino, inode->i_generation);
/* It is probably IGIF object. Only aappend the
fid, bh, de, hlock);
if (rc == 0)
*attr |= LUDA_UPGRADE;
+ else
+ CDEBUG(D_LFSCK, "%.16s: fail to append IGIF "
+ "after the dirent, dir = %lu/%u, "
+ "name = %.*s, "DFID": rc = %d\n",
+ devname, dir->i_ino, dir->i_generation,
+ ent->oied_namelen, ent->oied_name,
+ PFID(fid), rc);
}
}
* Author: Mikhail Pershin <tappro@sun.com>
*/
-#define DEBUG_SUBSYSTEM S_CLASS
+#define DEBUG_SUBSYSTEM S_OSD
#include <lprocfs_status.h>
#include <lustre/lustre_idl.h>
* Author: Nikita Danilov <nikita@clusterfs.com>
*/
-#define DEBUG_SUBSYSTEM S_MDS
+#define DEBUG_SUBSYSTEM S_OSD
#include <linux/module.h>
* Author: Fan Yong <yong.fan@whamcloud.com>
*/
-#define DEBUG_SUBSYSTEM S_MDS
+#define DEBUG_SUBSYSTEM S_LFSCK
#include <lustre/lustre_idl.h>
#include <lustre_disk.h>
return scrub->os_pos_current < ooc->ooc_pos_preload + SCRUB_WINDOW_SIZE;
}
+static inline const char *osd_scrub2name(struct osd_scrub *scrub)
+{
+ return LDISKFS_SB(osd_scrub2sb(scrub))->s_es->s_volume_name;
+}
+
/**
* update/insert/delete the specified OI mapping (@fid @id) according to the ops
*
osd_dto_credits_noquota[DTO_INDEX_INSERT]);
if (IS_ERR(th)) {
rc = PTR_ERR(th);
- CERROR("%s: fail to start trans for scrub %d: rc = %d\n",
- osd_name(dev), ops, rc);
+ CDEBUG(D_LFSCK, "%s: fail to start trans for scrub op %d "
+ DFID" => %u/%u: rc = %d\n", osd_name(dev), ops,
+ PFID(fid), id->oii_ino, id->oii_gen, rc);
RETURN(rc);
}
}
ldiskfs_journal_stop(th);
- return rc;
+ if (rc < 0)
+ CDEBUG(D_LFSCK, "%s: fail to refresh OI map for scrub op %d "
+ DFID" => %u/%u: rc = %d\n", osd_name(dev), ops,
+ PFID(fid), id->oii_ino, id->oii_gen, rc);
+
+ RETURN(rc);
}
/* OI_scrub file ops */
{
struct scrub_file *sf = &scrub->os_file;
- CDEBUG(D_LFSCK, "Reset OI scrub file, flags = "LPX64"\n", flags);
+ CDEBUG(D_LFSCK, "%.16s: reset OI scrub file, flags = "LPX64"\n",
+ osd_scrub2name(scrub), flags);
memcpy(sf->sf_uuid, uuid, 16);
sf->sf_status = SS_INIT;
sf->sf_flags |= flags;
static int osd_scrub_file_load(struct osd_scrub *scrub)
{
loff_t pos = 0;
- char *name = LDISKFS_SB(osd_scrub2sb(scrub))->s_es->s_volume_name;
int len = sizeof(scrub->os_file_disk);
int rc;
osd_scrub_file_to_cpu(sf, &scrub->os_file_disk);
if (sf->sf_magic != SCRUB_MAGIC_V1) {
- CWARN("%.16s: invalid scrub magic 0x%x != 0x%x\n,",
- name, sf->sf_magic, SCRUB_MAGIC_V1);
+ CDEBUG(D_LFSCK, "%.16s: invalid scrub magic "
+ "0x%x != 0x%x\n", osd_scrub2name(scrub),
+ sf->sf_magic, SCRUB_MAGIC_V1);
/* Process it as new scrub file. */
rc = -ENOENT;
} else {
rc = 0;
}
} else if (rc != 0) {
- CERROR("%.16s: fail to load scrub file, expected = %d, "
- "rc = %d\n", name, len, rc);
+ CDEBUG(D_LFSCK, "%.16s: fail to load scrub file, "
+ "expected = %d: rc = %d\n",
+ osd_scrub2name(scrub), len, rc);
if (rc > 0)
rc = -EFAULT;
} else {
jh = osd_journal_start_sb(osd_sb(dev), LDISKFS_HT_MISC, credits);
if (IS_ERR(jh)) {
rc = PTR_ERR(jh);
- CERROR("%.16s: fail to start trans for scrub store, rc = %d\n",
- LDISKFS_SB(osd_scrub2sb(scrub))->s_es->s_volume_name,rc);
+ CDEBUG(D_LFSCK, "%.16s: fail to start trans for scrub store: "
+ "rc = %d\n", osd_scrub2name(scrub), rc);
return rc;
}
len, 0, &pos, jh);
ldiskfs_journal_stop(jh);
if (rc != 0)
- CERROR("%.16s: fail to store scrub file, expected = %d, "
- "rc = %d\n",
- LDISKFS_SB(osd_scrub2sb(scrub))->s_es->s_volume_name,
- len, rc);
+ CDEBUG(D_LFSCK, "%.16s: fail to store scrub file, "
+ "expected = %d: rc = %d\n",
+ osd_scrub2name(scrub), len, rc);
+
scrub->os_time_last_checkpoint = cfs_time_current();
scrub->os_time_next_checkpoint = scrub->os_time_last_checkpoint +
cfs_time_seconds(SCRUB_CHECKPOINT_INTERVAL);
osd_dto_credits_noquota[DTO_XATTR_SET] * 3);
if (IS_ERR(jh)) {
rc = PTR_ERR(jh);
- CERROR("%s: fail to start trans for convert ff: "DFID
- ": rc = %d\n",
- osd_name(dev), PFID(fid), rc);
+ CDEBUG(D_LFSCK, "%s: fail to start trans for convert ff "
+ DFID": rc = %d\n", osd_name(dev), PFID(fid), rc);
RETURN(rc);
}
stop:
ldiskfs_journal_stop(jh);
+ if (rc < 0)
+ CDEBUG(D_LFSCK, "%s: fail to convert ff "DFID": rc = %d\n",
+ osd_name(dev), PFID(fid), rc);
return rc;
}
sf->sf_run_time += cfs_duration_sec(cfs_time_current() + HALF_SEC -
scrub->os_time_last_checkpoint);
result = osd_scrub_file_store(scrub);
- if (result < 0)
- CERROR("%.16s: fail to osd_scrub_post, rc = %d\n",
- LDISKFS_SB(osd_scrub2sb(scrub))->s_es->s_volume_name,
- result);
up_write(&scrub->os_rwsem);
EXIT;
if (rc == -ENOENT || rc == -ESTALE)
RETURN(SCRUB_NEXT_CONTINUE);
- CERROR("%.16s: fail to read inode, ino# = %u, rc = %d\n",
- LDISKFS_SB(sb)->s_es->s_volume_name, pos, rc);
+ CDEBUG(D_LFSCK, "%.16s: fail to read inode, ino# = %u: "
+ "rc = %d\n", LDISKFS_SB(sb)->s_es->s_volume_name,
+ pos, rc);
RETURN(rc);
}
rc = osd_scrub_checkpoint(scrub);
if (rc != 0) {
- CERROR("%.16s: fail to checkpoint, pos = %u, rc = %d\n",
- LDISKFS_SB(param->sb)->s_es->s_volume_name,
+ CDEBUG(D_LFSCK, "%.16s: fail to checkpoint, pos = %u: "
+ "rc = %d\n", osd_scrub2name(scrub),
scrub->os_pos_current, rc);
/* Continue, as long as the scrub itself can go ahead. */
}
param.gbase = 1 + param.bg * LDISKFS_INODES_PER_GROUP(param.sb);
param.bitmap = ldiskfs_read_inode_bitmap(param.sb, param.bg);
if (param.bitmap == NULL) {
- CERROR("%.16s: fail to read bitmap for %u, "
+ CDEBUG(D_LFSCK, "%.16s: fail to read bitmap for %u, "
"scrub will stop, urgent mode\n",
LDISKFS_SB(param.sb)->s_es->s_volume_name,
(__u32)param.bg);
if (rc == SCRUB_IT_ALL)
it->ooi_all_cached = 1;
- CDEBUG(D_LFSCK, "OSD pre-loaded: max = %u, preload = %u, rc = %d\n",
- le32_to_cpu(LDISKFS_SB(osd_sb(dev))->s_es->s_inodes_count),
- ooc->ooc_pos_preload, rc);
-
if (scrub->os_waiting && osd_scrub_has_window(scrub, ooc)) {
spin_lock(&scrub->os_lock);
scrub->os_waiting = 0;
struct osd_device *dev = (struct osd_device *)args;
struct osd_scrub *scrub = &dev->od_scrub;
struct ptlrpc_thread *thread = &scrub->os_thread;
- struct super_block *sb = osd_sb(dev);
int rc;
ENTRY;
rc = lu_env_init(&env, LCT_LOCAL);
if (rc != 0) {
- CERROR("%.16s: OI scrub, fail to init env, rc = %d\n",
- LDISKFS_SB(sb)->s_es->s_volume_name, rc);
+ CDEBUG(D_LFSCK, "%.16s: OI scrub fail to init env: rc = %d\n",
+ osd_scrub2name(scrub), rc);
GOTO(noenv, rc);
}
rc = osd_scrub_prep(dev);
if (rc != 0) {
- CERROR("%.16s: OI scrub, fail to scrub prep, rc = %d\n",
- LDISKFS_SB(sb)->s_es->s_volume_name, rc);
+ CDEBUG(D_LFSCK, "%.16s: OI scrub fail to scrub prep: rc = %d\n",
+ osd_scrub2name(scrub), rc);
GOTO(out, rc);
}
scrub->os_pos_current = ooc->ooc_pos_preload;
}
- CDEBUG(D_LFSCK, "OI scrub: flags = 0x%x, pos = %u\n",
- scrub->os_start_flags, scrub->os_pos_current);
+ CDEBUG(D_LFSCK, "%.16s: OI scrub start, flags = 0x%x, pos = %u\n",
+ osd_scrub2name(scrub), scrub->os_start_flags,
+ scrub->os_pos_current);
rc = osd_inode_iteration(osd_oti_get(&env), dev, ~0U, false);
if (unlikely(rc == SCRUB_IT_CRASH))
post:
osd_scrub_post(scrub, rc);
- CDEBUG(D_LFSCK, "OI scrub: stop, rc = %d, pos = %u\n",
- rc, scrub->os_pos_current);
+ CDEBUG(D_LFSCK, "%.16s: OI scrub: stop, pos = %u: rc = %d\n",
+ osd_scrub2name(scrub), scrub->os_pos_current, rc);
out:
while (!list_empty(&scrub->os_inconsistent_items)) {
{
struct dentry *dentry;
- CDEBUG(D_LFSCK, "init lookup one: parent = %.*s, name = %.*s\n",
- parent->d_name.len, parent->d_name.name, namelen, name);
-
dentry = ll_lookup_one_len(name, parent, namelen);
if (!IS_ERR(dentry) && dentry->d_inode == NULL) {
dput(dentry);
int rc;
ENTRY;
- CDEBUG(D_LFSCK, "init scan one: ino = %ld\n", inode->i_ino);
-
rc = osd_get_lma(info, inode, &info->oti_obj_dentry, lma);
- if (rc != 0 && rc != -ENODATA)
+ if (rc != 0 && rc != -ENODATA) {
+ CDEBUG(D_LFSCK, "%s: fail to get lma for init OI scrub: "
+ "rc = %d\n", osd_name(dev), rc);
+
RETURN(rc);
+ }
osd_id_gen(id, inode->i_ino, inode->i_generation);
if (rc == -ENODATA) {
else
tfid = *fid;
rc = osd_ea_fid_set(info, inode, &tfid, 0, 0);
- if (rc != 0)
+ if (rc != 0) {
+ CDEBUG(D_LFSCK, "%s: fail to set LMA for init OI "
+ "scrub: rc = %d\n", osd_name(dev), rc);
+
RETURN(rc);
+ }
} else {
if (lma->lma_compat & LMAC_NOT_IN_OI)
RETURN(0);
scrub->os_lf_scanned++;
child = osd_ios_lookup_one_len(name, parent, namelen);
if (IS_ERR(child)) {
- CWARN("%s: cannot lookup child '%.*s': rc = %d\n",
+ CDEBUG(D_LFSCK, "%s: cannot lookup child '%.*s': rc = %d\n",
osd_name(dev), namelen, name, (int)PTR_ERR(child));
RETURN(0);
}
rc = osd_ios_new_item(dev, child, osd_ios_general_scan,
osd_ios_lf_fill);
if (rc != 0)
- CWARN("%s: cannot add child '%.*s': rc = %d\n",
- osd_name(dev), namelen, name, rc);
+ CDEBUG(D_LFSCK, "%s: cannot add child '%.*s': "
+ "rc = %d\n", osd_name(dev), namelen, name, rc);
GOTO(put, rc);
}
"/lost+found.\n", namelen, name, PFID(fid));
scrub->os_lf_repaired++;
} else {
- CWARN("%s: cannot rename for '%.*s' "DFID": rc = %d\n",
- osd_name(dev), namelen, name, PFID(fid), rc);
+ CDEBUG(D_LFSCK, "%s: cannot rename for '%.*s' "
+ DFID": rc = %d\n",
+ osd_name(dev), namelen, name, PFID(fid), rc);
}
}
if (IS_ERR(task)) {
rc = PTR_ERR(task);
CERROR("%.16s: cannot start iteration thread: rc = %d\n",
- LDISKFS_SB(osd_sb(dev))->s_es->s_volume_name, rc);
+ osd_scrub2name(scrub), rc);
RETURN(rc);
}
* Author: Mike Pershin <tappro@whamcloud.com>
*/
-#define DEBUG_SUBSYSTEM S_CLASS
+#define DEBUG_SUBSYSTEM S_OSD
#include <obd.h>
#include <obd_class.h>
local POS1=$($SHOW_NAMESPACE |
awk '/^latest_start_position/ { print $2 }' |
tr -d ',')
- [ $POS0 -lt $POS1 ] ||
+ [[ $POS0 -lt $POS1 ]] ||
error "(7) Expect larger than: $POS0, but got $POS1"
do_facet $SINGLEMDS $LCTL set_param fail_loc=0 fail_val=0
awk '/^latest_start_position/ { print $4 }')
if [ "$D_POS0" == "N/A" -o "$D_POS1" == "N/A" ]; then
- [ $O_POS0 -lt $O_POS1 ] ||
+ [[ $O_POS0 -lt $O_POS1 ]] ||
error "(7.1) $O_POS1 is not larger than $O_POS0"
else
- [ $D_POS0 -lt $D_POS1 ] ||
+ [[ $D_POS0 -lt $D_POS1 ]] ||
error "(7.2) $D_POS1 is not larger than $D_POS0"
fi