- } else if (it_disposition(it, DISP_LOOKUP_NEG) && lsm != NULL &&
- lmv_need_try_all_stripes(lsm)) {
- /* For migrating and unknown hash type directory, it will
- * try to target the entry on other stripes */
- int stripe_index;
-
- for (stripe_index = 1;
- stripe_index < lsm->lsm_md_stripe_count &&
- it_disposition(it, DISP_LOOKUP_NEG); stripe_index++) {
- struct lmv_oinfo *oinfo;
-
- /* release the previous request */
- ptlrpc_req_finished(*reqp);
- it->d.lustre.it_data = NULL;
- *reqp = NULL;
-
- oinfo = &lsm->lsm_md_oinfo[stripe_index];
- tgt = lmv_find_target(lmv, &oinfo->lmo_fid);
- if (IS_ERR(tgt))
- RETURN(PTR_ERR(tgt));
-
- CDEBUG(D_INODE, "Try other stripes " DFID"\n",
- PFID(&oinfo->lmo_fid));
-
- op_data->op_fid1 = oinfo->lmo_fid;
- it->d.lustre.it_disposition &= ~DISP_ENQ_COMPLETE;
- rc = md_intent_lock(tgt->ltd_exp, op_data, it, reqp,
- cb_blocking, extra_lock_flags);
- if (rc != 0)
- RETURN(rc);
- }
+ } else if (it_disposition(it, DISP_LOOKUP_NEG) &&
+ lmv_dir_retry_check_update(op_data)) {
+ ptlrpc_req_finished(*reqp);
+ it->it_request = NULL;
+ it->it_disposition = 0;
+ *reqp = NULL;
+
+ goto retry;