* Note: we need check oi_seq to decide where to set oi_id,
  * so oi_seq should always be set ahead of oi_id.
  */
-static inline void ostid_set_id(struct ost_id *oi, __u64 oid)
+static inline int ostid_set_id(struct ost_id *oi, __u64 oid)
 {
        if (fid_seq_is_mdt0(oi->oi.oi_seq)) {
-               if (oid >= IDIF_MAX_OID) {
-                       CERROR("Too large OID %#llx to set MDT0 " DOSTID "\n",
-                              oid, POSTID(oi));
-                       return;
-               }
+               if (oid >= IDIF_MAX_OID)
+                       return -E2BIG;
                oi->oi.oi_id = oid;
        } else if (fid_is_idif(&oi->oi_fid)) {
-               if (oid >= IDIF_MAX_OID) {
-                       CERROR("Too large OID %#llx to set IDIF " DOSTID "\n",
-                              oid, POSTID(oi));
-                       return;
-               }
+               if (oid >= IDIF_MAX_OID)
+                       return -E2BIG;
                oi->oi_fid.f_seq = fid_idif_seq(oid,
                                                fid_idif_ost_idx(&oi->oi_fid));
                oi->oi_fid.f_oid = oid;
                oi->oi_fid.f_ver = oid >> 48;
        } else {
-               if (oid >= OBIF_MAX_OID) {
-                       CERROR("Bad %llu to set " DOSTID "\n", oid, POSTID(oi));
-                       return;
-               }
+               if (oid >= OBIF_MAX_OID)
+                       return -E2BIG;
                oi->oi_fid.f_oid = oid;
        }
+       return 0;
 }
 
 static inline int fid_set_id(struct lu_fid *fid, __u64 oid)
 
                return -EINVAL;
        }
 
-       if (!ostid_id(&oa->o_oi))
-               ostid_set_id(&oa->o_oi, ++last_object_id);
+       if (!ostid_id(&oa->o_oi)) {
+               rc = ostid_set_id(&oa->o_oi, ++last_object_id);
+               if (rc)
+                       goto failed;
+       }
 
        rc = obd_create(env, ec->ec_exp, oa);
        if (rc != 0) {
 
                oa->o_valid |= OBD_MD_FLGROUP;
        }
        if (flags & OBD_MD_FLID) {
-               ostid_set_id(&oa->o_oi, ostid_id(&oinfo->loi_oi));
+               int rc;
+
+               rc = ostid_set_id(&oa->o_oi, ostid_id(&oinfo->loi_oi));
+               if (rc) {
+                       CERROR("Bad %llu to set " DOSTID " : rc %d\n",
+                              (unsigned long long)ostid_id(&oinfo->loi_oi),
+                              POSTID(&oa->o_oi), rc);
+               }
                oa->o_valid |= OBD_MD_FLID;
        }
        if (flags & OBD_MD_FLHANDLE) {