X-Git-Url: https://git.whamcloud.com/?p=fs%2Flustre-release.git;a=blobdiff_plain;f=lustre%2Fmds%2Fmds_lov.c;h=4dd05a35f1c86100aef4c1733741a63b58ed52a9;hp=507ab7e91eaa82fc91e850028a2fe2c14e2c4ea9;hb=090c677210ee2946d99c71412e4ff762bb300f4f;hpb=ff34d9e04109edf730f7f430b30a108275b3808b diff --git a/lustre/mds/mds_lov.c b/lustre/mds/mds_lov.c index 507ab7e..4dd05a3 100644 --- a/lustre/mds/mds_lov.c +++ b/lustre/mds/mds_lov.c @@ -131,7 +131,8 @@ static int mds_lov_clearorphans(struct mds_obd *mds, struct obd_uuid *ost_uuid) * missing objects below this ID, they will be created. If it finds * objects above this ID, they will be removed. */ memset(&oa, 0, sizeof(oa)); - oa.o_valid = OBD_MD_FLFLAGS; + oa.o_gr = FILTER_GROUP_FIRST_MDS + mds->mds_num; + oa.o_valid = OBD_MD_FLFLAGS | OBD_MD_FLGROUP; oa.o_flags = OBD_FL_DELORPHAN; if (ost_uuid != NULL) { memcpy(&oa.o_inline, ost_uuid, sizeof(*ost_uuid)); @@ -180,8 +181,8 @@ int mds_lov_connect(struct obd_device *obd, char * lov_name) { struct mds_obd *mds = &obd->u.mds; struct lustre_handle conn = {0,}; - int valsize; - int rc, i; + int valsize, rc, i; + __u32 group; ENTRY; if (IS_ERR(mds->mds_osc_obd)) @@ -220,7 +221,9 @@ int mds_lov_connect(struct obd_device *obd, char * lov_name) if (rc) GOTO(err_reg, rc); - mds->mds_max_mdsize = lov_mds_md_size(mds->mds_lov_desc.ld_tgt_count); + i = lov_mds_md_size(mds->mds_lov_desc.ld_tgt_count); + if (i > mds->mds_max_mdsize) + mds->mds_max_mdsize = i; mds->mds_max_cookiesize = mds->mds_lov_desc.ld_tgt_count* sizeof(struct llog_cookie); mds->mds_has_lov_desc = 1; @@ -230,15 +233,18 @@ int mds_lov_connect(struct obd_device *obd, char * lov_name) GOTO(err_reg, rc); } - rc = llog_cat_initialize(obd, mds->mds_lov_desc.ld_tgt_count); + rc = llog_cat_initialize(obd, &obd->obd_llogs, + mds->mds_lov_desc.ld_tgt_count); if (rc) { CERROR("failed to initialize catalog %d\n", rc); GOTO(err_reg, rc); } /* FIXME before set info call is made, we must initialize logging */ + group = FILTER_GROUP_FIRST_MDS + mds->mds_num; + valsize = sizeof(group); rc = obd_set_info(mds->mds_osc_exp, strlen("mds_conn"), "mds_conn", - 0, NULL); + valsize, &group); if (rc) GOTO(err_reg, rc); @@ -266,9 +272,10 @@ int mds_lov_connect(struct obd_device *obd, char * lov_name) * it can use the obd_recovering flag to determine when the * the OBD is full available. */ if (!obd->obd_recovering) { - rc = llog_connect(llog_get_context(obd, LLOG_UNLINK_ORIG_CTXT), - obd->u.mds.mds_lov_desc.ld_tgt_count, NULL, - NULL, NULL); + struct llog_ctxt *ctxt; + ctxt = llog_get_context(&obd->obd_llogs, LLOG_UNLINK_ORIG_CTXT); + rc = llog_connect(ctxt, obd->u.mds.mds_lov_desc.ld_tgt_count, + NULL, NULL, NULL); if (rc != 0) CERROR("faild at llog_origin_connect: %d\n", rc); @@ -284,7 +291,8 @@ int mds_lov_connect(struct obd_device *obd, char * lov_name) err_llog: /* cleanup all llogging subsystems */ - rc = obd_llog_finish(obd, mds->mds_lov_desc.ld_tgt_count); + rc = obd_llog_finish(obd, &obd->obd_llogs, + mds->mds_lov_desc.ld_tgt_count); if (rc) CERROR("failed to cleanup llogging subsystems\n"); err_reg: @@ -304,7 +312,8 @@ int mds_lov_disconnect(struct obd_device *obd, int flags) if (!IS_ERR(mds->mds_osc_obd) && mds->mds_osc_exp != NULL) { /* cleanup all llogging subsystems */ - rc = obd_llog_finish(obd, mds->mds_lov_desc.ld_tgt_count); + rc = obd_llog_finish(obd, &obd->obd_llogs, + mds->mds_lov_desc.ld_tgt_count); if (rc) CERROR("failed to cleanup llogging subsystems\n"); @@ -331,6 +340,7 @@ int mds_iocontrol(unsigned int cmd, struct obd_export *exp, int len, struct mds_obd *mds = &obd->u.mds; struct obd_ioctl_data *data = karg; struct obd_run_ctxt saved; + struct llog_ctxt *ctxt; int rc = 0; switch (cmd) { @@ -340,8 +350,8 @@ int mds_iocontrol(unsigned int cmd, struct obd_export *exp, int len, RETURN(-EBUSY); push_ctxt(&saved, &obd->obd_ctxt, NULL); - rc = llog_create(llog_get_context(obd, LLOG_CONFIG_ORIG_CTXT), - &mds->mds_cfg_llh, NULL, name); + ctxt = llog_get_context(&obd->obd_llogs, LLOG_CONFIG_ORIG_CTXT); + rc = llog_create(ctxt, &mds->mds_cfg_llh, NULL, name); if (rc == 0) llog_init_handle(mds->mds_cfg_llh, LLOG_F_IS_PLAIN, &cfg_uuid); @@ -370,29 +380,8 @@ int mds_iocontrol(unsigned int cmd, struct obd_export *exp, int len, RETURN(-EBUSY); push_ctxt(&saved, &obd->obd_ctxt, NULL); - rc = llog_create(llog_get_context(obd, LLOG_CONFIG_ORIG_CTXT), - &mds->mds_cfg_llh, NULL, name); - if (rc == 0) { - llog_init_handle(mds->mds_cfg_llh, LLOG_F_IS_PLAIN, - NULL); - - rc = llog_destroy(mds->mds_cfg_llh); - llog_free_handle(mds->mds_cfg_llh); - } - pop_ctxt(&saved, &obd->obd_ctxt, NULL); - - mds->mds_cfg_llh = NULL; - RETURN(rc); - } - - case OBD_IOC_CLEAR_LOG: { - char *name = data->ioc_inlbuf1; - if (mds->mds_cfg_llh) - RETURN(-EBUSY); - - push_ctxt(&saved, &obd->obd_ctxt, NULL); - rc = llog_create(llog_get_context(obd, LLOG_CONFIG_ORIG_CTXT), - &mds->mds_cfg_llh, NULL, name); + ctxt = llog_get_context(&obd->obd_llogs, LLOG_CONFIG_ORIG_CTXT); + rc = llog_create(ctxt, &mds->mds_cfg_llh, NULL, name); if (rc == 0) { llog_init_handle(mds->mds_cfg_llh, LLOG_F_IS_PLAIN, NULL); @@ -443,7 +432,7 @@ int mds_iocontrol(unsigned int cmd, struct obd_export *exp, int len, case OBD_IOC_PARSE: { struct llog_ctxt *ctxt = - llog_get_context(obd, LLOG_CONFIG_ORIG_CTXT); + llog_get_context(&obd->obd_llogs, LLOG_CONFIG_ORIG_CTXT); push_ctxt(&saved, &obd->obd_ctxt, NULL); rc = class_config_parse_llog(ctxt, data->ioc_inlbuf1, NULL); pop_ctxt(&saved, &obd->obd_ctxt, NULL); @@ -455,7 +444,7 @@ int mds_iocontrol(unsigned int cmd, struct obd_export *exp, int len, case OBD_IOC_DUMP_LOG: { struct llog_ctxt *ctxt = - llog_get_context(obd, LLOG_CONFIG_ORIG_CTXT); + llog_get_context(&obd->obd_llogs, LLOG_CONFIG_ORIG_CTXT); push_ctxt(&saved, &obd->obd_ctxt, NULL); rc = class_config_dump_llog(ctxt, data->ioc_inlbuf1, NULL); pop_ctxt(&saved, &obd->obd_ctxt, NULL); @@ -490,14 +479,16 @@ int mds_iocontrol(unsigned int cmd, struct obd_export *exp, int len, case OBD_IOC_LLOG_CANCEL: case OBD_IOC_LLOG_REMOVE: { struct llog_ctxt *ctxt = - llog_get_context(obd, LLOG_CONFIG_ORIG_CTXT); + llog_get_context(&obd->obd_llogs, LLOG_CONFIG_ORIG_CTXT); int rc2; - obd_llog_finish(obd, mds->mds_lov_desc.ld_tgt_count); + obd_llog_finish(obd, &obd->obd_llogs, + mds->mds_lov_desc.ld_tgt_count); push_ctxt(&saved, &ctxt->loc_exp->exp_obd->obd_ctxt, NULL); rc = llog_ioctl(ctxt, cmd, data); pop_ctxt(&saved, &ctxt->loc_exp->exp_obd->obd_ctxt, NULL); - llog_cat_initialize(obd, mds->mds_lov_desc.ld_tgt_count); + llog_cat_initialize(obd, &obd->obd_llogs, + mds->mds_lov_desc.ld_tgt_count); rc2 = obd_set_info(mds->mds_osc_exp, strlen("mds_conn"), "mds_conn", 0, NULL); if (!rc) @@ -507,7 +498,7 @@ int mds_iocontrol(unsigned int cmd, struct obd_export *exp, int len, case OBD_IOC_LLOG_INFO: case OBD_IOC_LLOG_PRINT: { struct llog_ctxt *ctxt = - llog_get_context(obd, LLOG_CONFIG_ORIG_CTXT); + llog_get_context(&obd->obd_llogs, LLOG_CONFIG_ORIG_CTXT); push_ctxt(&saved, &ctxt->loc_exp->exp_obd->obd_ctxt, NULL); rc = llog_ioctl(ctxt, cmd, data); @@ -547,15 +538,18 @@ int mds_notify(struct obd_device *obd, struct obd_device *watched, int active) CWARN("MDS %s: in recovery, not resetting orphans on %s\n", obd->obd_name, uuid->uuid); } else { - LASSERT(llog_get_context(obd, LLOG_UNLINK_ORIG_CTXT) != NULL); + struct llog_ctxt *ctxt; + + ctxt = llog_get_context(&obd->obd_llogs, LLOG_UNLINK_ORIG_CTXT); + LASSERT(ctxt != NULL); rc = obd_set_info(obd->u.mds.mds_osc_exp, strlen("mds_conn"), "mds_conn", 0, uuid); if (rc != 0) RETURN(rc); - rc = llog_connect(llog_get_context(obd, LLOG_UNLINK_ORIG_CTXT), - obd->u.mds.mds_lov_desc.ld_tgt_count, + ctxt = llog_get_context(&obd->obd_llogs, LLOG_UNLINK_ORIG_CTXT); + rc = llog_connect(ctxt, obd->u.mds.mds_lov_desc.ld_tgt_count, NULL, NULL, uuid); if (rc != 0) { CERROR("faild at llog_origin_connect: %d\n", rc);