X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;f=lustre%2Flod%2Flod_sub_object.c;h=3e8d822a9b996717b3ae5da466b2812fc7c05d46;hb=15998eb78e279f1bfa5059f0f65087f7851d40ff;hp=ee67616c1feed9101de859f55cdbdbfaf409e919;hpb=ccabce23bd9e366c345c852f565766a799f61238;p=fs%2Flustre-release.git diff --git a/lustre/lod/lod_sub_object.c b/lustre/lod/lod_sub_object.c index ee67616..3e8d822 100644 --- a/lustre/lod/lod_sub_object.c +++ b/lustre/lod/lod_sub_object.c @@ -74,6 +74,7 @@ struct thandle *lod_sub_get_thandle(const struct lu_env *env, RETURN(th); tth = container_of(th, struct top_thandle, tt_super); + tth->tt_master_sub_thandle->th_ignore_quota = th->th_ignore_quota; /* local object must be mdt object, Note: during ost object * creation, FID is not assigned until osp_create(), @@ -103,6 +104,7 @@ struct thandle *lod_sub_get_thandle(const struct lu_env *env, sub_th = thandle_get_sub(env, th, sub_obj); if (IS_ERR(sub_th)) RETURN(sub_th); + sub_th->th_ignore_quota = th->th_ignore_quota; if (tth->tt_multiple_thandle != NULL && record_update != NULL && th->th_result == 0) @@ -436,14 +438,13 @@ int lod_sub_declare_insert(const struct lu_env *env, struct dt_object *dt, * \param[in] rec record of the index to be inserted * \param[in] key key of the index to be inserted * \param[in] th the transaction handle - * \param[in] ign whether ignore quota * * \retval 0 if the insertion succeeds. * \retval negative errno if the insertion fails. */ int lod_sub_insert(const struct lu_env *env, struct dt_object *dt, const struct dt_rec *rec, const struct dt_key *key, - struct thandle *th, int ign) + struct thandle *th) { struct thandle *sub_th; int rc; @@ -460,7 +461,7 @@ int lod_sub_insert(const struct lu_env *env, struct dt_object *dt, return rc; } - return dt_insert(env, dt, rec, key, sub_th, ign); + return dt_insert(env, dt, rec, key, sub_th); } /** @@ -802,14 +803,13 @@ int lod_sub_declare_write(const struct lu_env *env, struct dt_object *dt, * \param[in] buf buffer to write which includes an embedded size field * \param[in] pos offet in the object to start writing at * \param[in] th transaction handle - * \param[in] rq enforcement for this write * * \retval the buffer size in bytes if it succeeds. * \retval negative errno if it fails. */ ssize_t lod_sub_write(const struct lu_env *env, struct dt_object *dt, const struct lu_buf *buf, loff_t *pos, - struct thandle *th, int rq) + struct thandle *th) { struct thandle *sub_th; bool record_update; @@ -827,7 +827,7 @@ ssize_t lod_sub_write(const struct lu_env *env, struct dt_object *dt, RETURN(rc); } - rc = dt_write(env, dt, buf, pos, sub_th, rq); + rc = dt_write(env, dt, buf, pos, sub_th); RETURN(rc); } @@ -936,6 +936,12 @@ int lod_sub_prep_llog(const struct lu_env *env, struct lod_device *lod, obd = dt->dd_lu_dev.ld_obd; ctxt = llog_get_context(obd, LLOG_UPDATELOG_ORIG_CTXT); LASSERT(ctxt != NULL); + /* concurrent config processing (e.g. setting MDT active) + * can try to initialize llog again before causing double + * initialization. check for this */ + if (ctxt->loc_handle) + GOTO(out_put, rc = 0); + ctxt->loc_flags |= LLOG_CTXT_FLAG_NORMAL_FID; ctxt->loc_chunk_size = LLOG_MIN_CHUNK_SIZE * 4; if (likely(logid_id(&cid->lci_logid) != 0)) {