strcat(flags, "A");
lustre_cfg_bufs_set_string(&bufs, 1, flags);
lcfg = lustre_cfg_new(LCFG_CLEANUP, &bufs);
- if (!lcfg) {
- CERROR("Cannot alloc lcfg!\n");
+ if (lcfg == NULL)
RETURN_EXIT;
- }
LASSERT(top);
top->ld_ops->ldo_process_config(env, top, lcfg);
RCL_CLIENT);
if (KEY_IS(KEY_LAST_ID)) {
- obd_id *last_id;
+ u64 *last_id;
struct ofd_seq *oseq;
req_capsule_extend(tsi->tsi_pill, &RQF_OST_GET_INFO_LAST_ID);
last_id = req_capsule_server_get(tsi->tsi_pill, &RMF_OBD_ID);
oseq = ofd_seq_load(tsi->tsi_env, ofd,
- (obd_seq)exp->exp_filter_data.fed_group);
+ (u64)exp->exp_filter_data.fed_group);
if (IS_ERR(oseq))
rc = -EFAULT;
else
struct lu_fid *fid = &info->fti_fid;
struct ost_id *oi = &oa->o_oi;
struct ofd_seq *oseq;
- obd_seq seq = ostid_seq(oi);
- obd_id end_id = ostid_id(oi);
- obd_id last;
- obd_id oid;
+ u64 seq = ostid_seq(oi);
+ u64 end_id = ostid_id(oi);
+ u64 last;
+ u64 oid;
int skip_orphan;
int rc = 0;
struct obdo *rep_oa;
struct obd_export *exp = tsi->tsi_exp;
struct ofd_device *ofd = ofd_exp(exp);
- obd_seq seq = ostid_seq(&oa->o_oi);
- obd_id oid = ostid_id(&oa->o_oi);
+ u64 seq = ostid_seq(&oa->o_oi);
+ u64 oid = ostid_id(&oa->o_oi);
struct ofd_seq *oseq;
int rc = 0, diff;
int sync_trans = 0;
CDEBUG(D_HA, "ofd_last_id() = "LPU64" -> diff = %d\n",
ofd_seq_last_oid(oseq), diff);
if (-diff > OST_MAX_PRECREATE) {
- /* FIXME: should reset precreate_next_id on MDS */
+ /* Let MDS know that we are so far ahead. */
+ ostid_set_id(&rep_oa->o_oi, ofd_seq_last_oid(oseq) + 1);
rc = 0;
} else if (diff < 0) {
rc = ofd_orphans_destroy(tsi->tsi_env, exp,
ofd_name(ofd), POSTID(&oa->o_oi));
GOTO(out, rc = -EINVAL);
}
+
+ if (diff < 0) {
+ /* LU-5648 */
+ CERROR("%s: invalid precreate request for "
+ DOSTID", last_id " LPU64 ". "
+ "Likely MDS last_id corruption\n",
+ ofd_name(ofd), POSTID(&oa->o_oi),
+ ofd_seq_last_oid(oseq));
+ GOTO(out, rc = -EINVAL);
+ }
}
}
if (diff > 0) {
cfs_time_t enough_time = cfs_time_shift(DISK_TIMEOUT);
- obd_id next_id;
+ u64 next_id;
int created = 0;
int count;
struct ofd_device *ofd = ofd_exp(tsi->tsi_exp);
struct ofd_thread_info *fti = tsi2ofd_info(tsi);
struct lu_fid *fid = &fti->fti_fid;
- obd_id oid;
- obd_count count;
+ u64 oid;
+ u32 count;
int rc = 0;
ENTRY;