CDEBUG(D_LFSCK, "%s: fail to verify OST local stored "
"PFID xattr for "DFID", the client given PFID "
DFID", OST local stored PFID "DFID": rc = %d\n",
- ofd_obd(ofd)->obd_name,
- PFID(&fo->ofo_header.loh_fid),
+ ofd_name(ofd), PFID(&fo->ofo_header.loh_fid),
PFID(&oii->oii_pfid), PFID(pfid), rc);
else
fo->ofo_pfid_verified = 1;
CDEBUG(D_LFSCK, "%s: fail to verify the client given "
"PFID for "DFID", the client given PFID "DFID
", local stored PFID "DFID": rc = %d\n",
- ofd_obd(ofd)->obd_name,
- PFID(&fo->ofo_header.loh_fid),
+ ofd_name(ofd), PFID(&fo->ofo_header.loh_fid),
PFID(&oii->oii_pfid), PFID(pfid), rc);
else
CDEBUG(D_LFSCK, "%s: both the client given PFID and "
"the OST local stored PFID are stale for the "
"OST-object "DFID", client given PFID is "DFID
", local stored PFID is "DFID"\n",
- ofd_obd(ofd)->obd_name,
- PFID(&fo->ofo_header.loh_fid),
+ ofd_name(ofd), PFID(&fo->ofo_header.loh_fid),
PFID(&oii->oii_pfid), PFID(pfid));
break;
case LPVS_INCONSISTENT_TOFIX:
CDEBUG(D_LFSCK, "%s: fixed the staled OST PFID xattr "
"for "DFID", with the client given PFID "DFID
", the old stored PFID "DFID"\n",
- ofd_obd(ofd)->obd_name,
- PFID(&fo->ofo_header.loh_fid),
+ ofd_name(ofd), PFID(&fo->ofo_header.loh_fid),
PFID(&oii->oii_pfid), PFID(pfid));
} else {
CDEBUG(D_LFSCK, "%s: fail to fix the OST PFID xattr "
"for "DFID", client given PFID "DFID", local "
"stored PFID "DFID": rc = %d\n",
- ofd_obd(ofd)->obd_name,
- PFID(&fo->ofo_header.loh_fid),
+ ofd_name(ofd), PFID(&fo->ofo_header.loh_fid),
PFID(&oii->oii_pfid), PFID(pfid), rc);
}
*pfid = oii->oii_pfid;
GOTO(out, rc = -ENOMEM);
lr->lr_event = LE_PAIRS_VERIFY;
- lr->lr_active = LT_LAYOUT;
+ lr->lr_active = LFSCK_TYPE_LAYOUT;
spin_lock(&ofd->ofd_inconsistency_lock);
while (1) {
{
struct ptlrpc_thread *thread = &ofd->ofd_inconsistency_thread;
struct l_wait_info lwi = { 0 };
- long rc;
+ struct task_struct *task;
+ int rc;
spin_lock(&ofd->ofd_inconsistency_lock);
if (unlikely(thread_is_running(thread))) {
thread_set_flags(thread, 0);
spin_unlock(&ofd->ofd_inconsistency_lock);
- rc = PTR_ERR(kthread_run(ofd_inconsistency_verification_main, ofd,
- "inconsistency_verification"));
- if (IS_ERR_VALUE(rc)) {
- CERROR("%s: cannot start self_repair thread: rc = %ld\n",
- ofd_obd(ofd)->obd_name, rc);
+ task = kthread_run(ofd_inconsistency_verification_main, ofd,
+ "inconsistency_verification");
+ if (IS_ERR(task)) {
+ rc = PTR_ERR(task);
+ CERROR("%s: cannot start self_repair thread: rc = %d\n",
+ ofd_name(ofd), rc);
} else {
rc = 0;
l_wait_event(thread->t_ctl_waitq,
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_obd(ofd)->obd_name, 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);
LASSERT(objcount == 1);
if (unlikely(exp->exp_obd->obd_recovering)) {
- struct ofd_thread_info *info = ofd_info(env);
-
- /* copied from ofd_precreate_object */
- /* XXX this should be consolidated to use the same code
- * instead of a copy, due to the ongoing risk of bugs. */
- memset(&info->fti_attr, 0, sizeof(info->fti_attr));
- info->fti_attr.la_valid = LA_TYPE | LA_MODE;
- info->fti_attr.la_mode = S_IFREG | S_ISUID | S_ISGID | 0666;
- info->fti_attr.la_valid |= LA_ATIME | LA_MTIME | LA_CTIME;
- /* Initialize a/c/m time so any client timestamp will always
- * be newer and update the inode. ctime = 0 is also handled
- * specially in osd_inode_setattr(). See LU-221, LU-1042 */
- info->fti_attr.la_atime = 0;
- info->fti_attr.la_mtime = 0;
- info->fti_attr.la_ctime = 0;
-
- fo = ofd_object_find_or_create(env, ofd, fid, &info->fti_attr);
- } else {
- fo = ofd_object_find(env, ofd, fid);
+ obd_seq seq = fid_seq(fid);
+ obd_id oid = fid_oid(fid);
+ struct ofd_seq *oseq;
+
+ oseq = ofd_seq_load(env, ofd, seq);
+ if (IS_ERR(oseq)) {
+ CERROR("%s: Can't find FID Sequence "LPX64": rc = %d\n",
+ ofd_name(ofd), seq, (int)PTR_ERR(oseq));
+ GOTO(out, rc = -EINVAL);
+ }
+
+ if (oid > ofd_seq_last_oid(oseq)) {
+ int sync = 0;
+ int diff;
+
+ mutex_lock(&oseq->os_create_lock);
+ diff = oid - ofd_seq_last_oid(oseq);
+
+ /* Do sync create if the seq is about to used up */
+ if (fid_seq_is_idif(seq) || fid_seq_is_mdt0(seq)) {
+ if (unlikely(oid >= IDIF_MAX_OID - 1))
+ sync = 1;
+ } else if (fid_seq_is_norm(seq)) {
+ if (unlikely(oid >=
+ LUSTRE_DATA_SEQ_MAX_WIDTH - 1))
+ sync = 1;
+ } else {
+ CERROR("%s : invalid o_seq "DOSTID"\n",
+ ofd_name(ofd), POSTID(&oa->o_oi));
+ mutex_unlock(&oseq->os_create_lock);
+ ofd_seq_put(env, oseq);
+ GOTO(out, rc = -EINVAL);
+ }
+
+ while (diff > 0) {
+ obd_id next_id = ofd_seq_last_oid(oseq) + 1;
+ int count = ofd_precreate_batch(ofd, diff);
+
+ rc = ofd_precreate_objects(env, ofd, next_id,
+ oseq, count, sync);
+ if (rc < 0) {
+ mutex_unlock(&oseq->os_create_lock);
+ ofd_seq_put(env, oseq);
+ GOTO(out, rc);
+ }
+
+ diff -= rc;
+ }
+
+ mutex_unlock(&oseq->os_create_lock);
+ }
+
+ ofd_seq_put(env, oseq);
}
+ fo = ofd_object_find(env, ofd, fid);
if (IS_ERR(fo))
GOTO(out, rc = PTR_ERR(fo));
LASSERT(fo != NULL);
LASSERT(oti != NULL);
info = ofd_info_init(env, exp);
ofd_oti2info(info, oti);
- jobid = oti->oti_jobid;
+ jobid = NULL;
} else {
info = tsi2ofd_info(tsi);
jobid = tsi->tsi_jobid;
dcb = &ossc->ossc_cb;
dcb->dcb_func = ofd_cb_soft_sync;
- CFS_INIT_LIST_HEAD(&dcb->dcb_linkage);
- strncpy(dcb->dcb_name, "ofd_cb_soft_sync", MAX_COMMIT_CB_STR_LEN);
- dcb->dcb_name[MAX_COMMIT_CB_STR_LEN - 1] = '\0';
+ INIT_LIST_HEAD(&dcb->dcb_linkage);
+ strlcpy(dcb->dcb_name, "ofd_cb_soft_sync", sizeof(dcb->dcb_name));
rc = dt_trans_cb_add(th, dcb);
if (rc) {
ost_fid_build_resid(fid, &info->fti_resid);
rs = ldlm_resource_get(ns, NULL, &info->fti_resid,
LDLM_EXTENT, 0);
- if (rs != NULL) {
- ns->ns_lvbo->lvbo_update(rs, NULL, 1);
+ if (!IS_ERR(rs)) {
+ ldlm_res_lvbo_update(rs, NULL, 1);
ldlm_resource_putref(rs);
}
}