X-Git-Url: https://git.whamcloud.com/?p=fs%2Flustre-release.git;a=blobdiff_plain;f=lustre%2Ftarget%2Ftgt_lastrcvd.c;h=061f088f8a91967b9888b14c84c028384bf57995;hp=aac5a6f3e1b3dea3a6d710eb1afc25877edb4f8d;hb=300858ccfcd00b52663de45e0bb472012242f342;hpb=4115148e4ac5ccb3620a9f8d3e48da0a712943c5;ds=sidebyside diff --git a/lustre/target/tgt_lastrcvd.c b/lustre/target/tgt_lastrcvd.c index aac5a6f..061f088 100644 --- a/lustre/target/tgt_lastrcvd.c +++ b/lustre/target/tgt_lastrcvd.c @@ -1343,11 +1343,11 @@ static int tgt_last_rcvd_update(const struct lu_env *env, struct lu_target *tgt, { struct tgt_thread_info *tti = tgt_th_info(env); struct tgt_session_info *tsi = tgt_ses_info(env); - struct obd_export *exp = tsi->tsi_exp; - struct tg_export_data *ted; - __u64 *transno_p; - int rc = 0; - bool lw_client; + struct obd_export *exp = tsi->tsi_exp; + struct tg_export_data *ted; + __u64 *transno_p; + bool nolcd = false; + int rc = 0; ENTRY; @@ -1355,11 +1355,15 @@ static int tgt_last_rcvd_update(const struct lu_env *env, struct lu_target *tgt, LASSERT(exp != NULL); ted = &exp->exp_target_data; - lw_client = exp_connect_flags(exp) & OBD_CONNECT_LIGHTWEIGHT; - if (ted->ted_lr_idx < 0 && !lw_client) - /* ofd connect may cause transaction before export has - * last_rcvd slot */ - RETURN(0); + /* Some clients don't support recovery, and they don't have last_rcvd + * client data: + * 1. lightweight clients. + * 2. local clients on MDS which doesn't enable "localrecov". + * 3. OFD connect may cause transaction before export has last_rcvd + * slot. + */ + if (ted->ted_lr_idx < 0) + nolcd = true; if (req != NULL) tti->tti_transno = lustre_msg_get_transno(req->rq_reqmsg); @@ -1400,14 +1404,13 @@ static int tgt_last_rcvd_update(const struct lu_env *env, struct lu_target *tgt, /* if can't add callback, do sync write */ th->th_sync |= !!tgt_last_commit_cb_add(th, tgt, exp, tti->tti_transno); - if (lw_client) { - /* All operations performed by LW clients are synchronous and - * we store the committed transno in the last_rcvd header */ + if (nolcd) { + /* store transno in the last_rcvd header */ spin_lock(&tgt->lut_translock); if (tti->tti_transno > tgt->lut_lsd.lsd_last_transno) { tgt->lut_lsd.lsd_last_transno = tti->tti_transno; spin_unlock(&tgt->lut_translock); - /* Although lightweight (LW) connections have no slot + /* Although current connection doesn't have slot * in the last_rcvd, we still want to maintain * the in-memory lsd_client_data structure in order to * properly handle reply reconstruction. */ @@ -1480,7 +1483,7 @@ static int tgt_last_rcvd_update(const struct lu_env *env, struct lu_target *tgt, } } - if (!lw_client) { + if (!nolcd) { tti->tti_off = ted->ted_lr_off; if (CFS_FAIL_CHECK(OBD_FAIL_TGT_RCVD_EIO)) rc = -EIO;