Whamcloud - gitweb
LU-2558 test: recovery-small 19a FAIL no eviction
[fs/lustre-release.git] / lustre / ofd / ofd_io.c
index 489256a..7f72a17 100644 (file)
@@ -214,16 +214,31 @@ int ofd_preprw(const struct lu_env* env, int cmd, struct obd_export *exp,
        struct ofd_thread_info  *info;
        int                      rc = 0;
 
-       if (OBD_FAIL_CHECK(OBD_FAIL_OST_ENOENT) &&
-           ofd->ofd_destroys_in_progress == 0) {
-               /* don't fail lookups for orphan recovery, it causes
-                * later LBUGs when objects still exist during precreate */
-               CDEBUG(D_INFO, "*** obd_fail_loc=%x ***\n",OBD_FAIL_OST_ENOENT);
-               RETURN(-ENOENT);
-       }
-
+       rc = lu_env_refill((struct lu_env *)env);
+       LASSERT(rc == 0);
        info = ofd_info_init(env, exp);
 
+       LASSERT(oa != NULL);
+
+       if (OBD_FAIL_CHECK(OBD_FAIL_OST_ENOENT)) {
+               struct ofd_seq          *oseq;
+               oseq = ofd_seq_load(env, ofd, oa->o_seq);
+               if (oseq == NULL) {
+                       CERROR("%s: Can not find seq for "LPU64":"LPU64"\n",
+                               ofd_name(ofd), oa->o_seq, oa->o_id);
+                       RETURN(-EINVAL);
+               }
+
+               if (oseq->os_destroys_in_progress == 0) {
+                       /* don't fail lookups for orphan recovery, it causes
+                        * later LBUGs when objects still exist during
+                        * precreate */
+                       ofd_seq_put(env, oseq);
+                       RETURN(-ENOENT);
+               }
+               ofd_seq_put(env, oseq);
+       }
+
        LASSERT(objcount == 1);
        LASSERT(obj->ioo_bufcnt > 0);
 
@@ -232,7 +247,6 @@ int ofd_preprw(const struct lu_env* env, int cmd, struct obd_export *exp,
                rc = ofd_auth_capa(exp, &info->fti_fid, oa->o_seq,
                                   capa, CAPA_OPC_OSS_WRITE);
                if (rc == 0) {
-                       LASSERT(oa != NULL);
                        la_from_obdo(&info->fti_attr, oa, OBD_MD_FLGETATTR);
                        rc = ofd_preprw_write(env, exp, ofd, &info->fti_fid,
                                              &info->fti_attr, oa, objcount,