From: wangdi Date: Thu, 7 Sep 2006 09:51:47 +0000 (+0000) Subject: Branch: b_new_cmd X-Git-Tag: v1_8_0_110~486^2~994 X-Git-Url: https://git.whamcloud.com/gitweb?a=commitdiff_plain;h=e657fd2c4bfb79fd411d254a11aadfe9fc1df309;p=fs%2Flustre-release.git Branch: b_new_cmd fix set mds_conn bugs to make o_id cache work for each group in ost --- diff --git a/lustre/lov/lov_obd.c b/lustre/lov/lov_obd.c index f4c9ceb..50c7a85 100644 --- a/lustre/lov/lov_obd.c +++ b/lustre/lov/lov_obd.c @@ -2449,8 +2449,23 @@ static int lov_set_info_async(struct obd_export *exp, obd_count keylen, } GOTO(out, rc); } + if (KEY_IS(KEY_MDS_CONN)) { + for (i = 0; i < lov->desc.ld_tgt_count; i++) { + if (!lov->lov_tgts[i] || !lov->lov_tgts[i]->ltd_exp) + continue; + + if (!val && !lov->lov_tgts[i]->ltd_active) + continue; - if (KEY_IS(KEY_MDS_CONN) || KEY_IS("unlinked")) { + err = obd_set_info_async(lov->lov_tgts[i]->ltd_exp, + keylen, key, vallen, val, set); + if (!rc) + rc = err; + } + GOTO(out, rc); + } + + if (KEY_IS("unlinked")) { if (vallen != 0 && KEY_IS("unlinked")) GOTO(out, rc = -EINVAL); } else { diff --git a/lustre/osc/osc_create.c b/lustre/osc/osc_create.c index 3f6c15b..6d7fff7 100644 --- a/lustre/osc/osc_create.c +++ b/lustre/osc/osc_create.c @@ -151,7 +151,9 @@ static int oscc_internal_create(struct osc_creator *oscc) spin_lock(&oscc->oscc_lock); body->oa.o_id = oscc->oscc_last_id + oscc->oscc_grow_count; - body->oa.o_valid |= OBD_MD_FLID; + body->oa.o_gr = oscc->oscc_oa.o_gr; + LASSERT(body->oa.o_gr > 0); + body->oa.o_valid |= OBD_MD_FLID | OBD_MD_FLGROUP; spin_unlock(&oscc->oscc_lock); CDEBUG(D_HA, "preallocating through id "LPU64" (last used "LPU64")\n", body->oa.o_id, oscc->oscc_next_id); @@ -242,13 +244,7 @@ int osc_create(struct obd_export *exp, struct obdo *oa, LASSERT(oa->o_gr > 0); LASSERT(oa->o_valid & OBD_MD_FLGROUP); - /* - * FIXME: Now we can only create the object without cache, - * since we have only 1 oscc, only support one cache, will - * fix it soon Wangdi - */ - if ((oa->o_valid & OBD_MD_FLGROUP) && (oa->o_gr != 0)) - RETURN(osc_real_create(exp, oa, ea, oti)); + if ((oa->o_valid & OBD_MD_FLFLAGS) && oa->o_flags == OBD_FL_RECREATE_OBJS) { RETURN(osc_real_create(exp, oa, ea, oti)); diff --git a/lustre/osc/osc_request.c b/lustre/osc/osc_request.c index 39fc297..495af7b 100644 --- a/lustre/osc/osc_request.c +++ b/lustre/osc/osc_request.c @@ -3477,8 +3477,13 @@ static int osc_set_info_async(struct obd_export *exp, obd_count keylen, if (req == NULL) RETURN(-ENOMEM); - if (KEY_IS("mds_conn")) + if (KEY_IS("mds_conn")) { + struct osc_creator *oscc = &obd->u.cli.cl_oscc; + + oscc->oscc_oa.o_gr = (*(__u32 *)val); + LASSERT(oscc->oscc_oa.o_gr > 0); req->rq_interpret_reply = osc_setinfo_mds_conn_interpret; + } ptlrpc_req_set_repsize(req, 1, NULL); ptlrpc_set_add_req(set, req);