X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;f=lustre%2Fobdclass%2Fllog_obd.c;h=0f105038df3e10f87c1639056a8393af5ec13a02;hb=a928591d58b5d0dbbcc9a7f534dca2b6df22da9e;hp=2178f9e736935c0cb6ded69ef1551df8d2ea1982;hpb=f6a03ab0fea13ea658cf08a582581682eb15b71c;p=fs%2Flustre-release.git diff --git a/lustre/obdclass/llog_obd.c b/lustre/obdclass/llog_obd.c index 2178f9e..0f10503 100644 --- a/lustre/obdclass/llog_obd.c +++ b/lustre/obdclass/llog_obd.c @@ -91,10 +91,10 @@ int __llog_ctxt_put(struct llog_ctxt *ctxt) } olg->olg_ctxts[ctxt->loc_idx] = NULL; spin_unlock(&olg->olg_lock); - + if (ctxt->loc_lcm) lcm_put(ctxt->loc_lcm); - + obd = ctxt->loc_obd; spin_lock(&obd->obd_dev_lock); spin_unlock(&obd->obd_dev_lock); /* sync with llog ctxt user thread */ @@ -178,6 +178,7 @@ int llog_setup_named(struct obd_device *obd, struct obd_llog_group *olg, ctxt->loc_logops = op; sema_init(&ctxt->loc_sem, 1); ctxt->loc_exp = class_export_get(disk_obd->obd_self_export); + ctxt->loc_flags = LLOG_CTXT_FLAG_UNINITIALIZED; rc = llog_group_set_ctxt(olg, ctxt, index); if (rc) { @@ -185,7 +186,7 @@ int llog_setup_named(struct obd_device *obd, struct obd_llog_group *olg, if (rc == -EEXIST) { ctxt = llog_group_get_ctxt(olg, index); if (ctxt) { - /* + /* * mds_lov_update_desc() might call here multiple * times. So if the llog is already set up then * don't to do it again. @@ -215,6 +216,10 @@ int llog_setup_named(struct obd_device *obd, struct obd_llog_group *olg, CERROR("obd %s ctxt %d lop_setup=%p failed %d\n", obd->obd_name, index, op->lop_setup, rc); llog_ctxt_put(ctxt); + } else { + CDEBUG(D_CONFIG, "obd %s ctxt %d is initialized\n", + obd->obd_name, index); + ctxt->loc_flags &= ~LLOG_CTXT_FLAG_UNINITIALIZED; } RETURN(rc); @@ -256,6 +261,10 @@ int llog_add(struct llog_ctxt *ctxt, struct llog_rec_hdr *rec, RETURN(-ENODEV); } + if (ctxt->loc_flags & LLOG_CTXT_FLAG_UNINITIALIZED) + RETURN(-ENXIO); + + CTXT_CHECK_OP(ctxt, add, -EOPNOTSUPP); raised = cfs_cap_raised(CFS_CAP_SYS_RESOURCE); if (!raised) @@ -353,7 +362,6 @@ int llog_obd_origin_setup(struct obd_device *obd, struct obd_llog_group *olg, ctxt = llog_group_get_ctxt(olg, index); if (!ctxt) RETURN(-ENODEV); - llog_gen_init(ctxt); if (logid && logid->lgl_oid) { rc = llog_create(ctxt, &handle, logid, NULL); @@ -442,54 +450,15 @@ int llog_obd_origin_add(struct llog_ctxt *ctxt, } EXPORT_SYMBOL(llog_obd_origin_add); -int llog_cat_initialize(struct obd_device *obd, struct obd_llog_group *olg, - int idx, struct obd_uuid *uuid) -{ - char name[32] = CATLIST; - struct llog_catid idarray; - int rc; - ENTRY; - - mutex_down(&olg->olg_cat_processing); - rc = llog_get_cat_list(obd, obd, name, idx, 1, &idarray); - if (rc) { - CERROR("rc: %d\n", rc); - GOTO(out, rc); - } - - CDEBUG(D_INFO, "%s: Init llog for %s/%d - catid "LPX64"/"LPX64":%x\n", - obd->obd_name, uuid->uuid, idx, idarray.lci_logid.lgl_oid, - idarray.lci_logid.lgl_ogr, idarray.lci_logid.lgl_ogen); - - rc = obd_llog_init(obd, olg, obd, 1, &idarray, uuid); - if (rc) { - CERROR("rc: %d\n", rc); - GOTO(out, rc); - } - - rc = llog_put_cat_list(obd, obd, name, idx, 1, &idarray); - if (rc) { - CERROR("rc: %d\n", rc); - GOTO(out, rc); - } - - out: - mutex_up(&olg->olg_cat_processing); - - RETURN(rc); -} -EXPORT_SYMBOL(llog_cat_initialize); - int obd_llog_init(struct obd_device *obd, struct obd_llog_group *olg, - struct obd_device *disk_obd, int count, - struct llog_catid *logid, struct obd_uuid *uuid) + struct obd_device *disk_obd, int *index) { int rc; ENTRY; OBD_CHECK_DT_OP(obd, llog_init, 0); OBD_COUNTER_INCREMENT(obd, llog_init); - rc = OBP(obd, llog_init)(obd, olg, disk_obd, count, logid, uuid); + rc = OBP(obd, llog_init)(obd, olg, disk_obd, index); RETURN(rc); } EXPORT_SYMBOL(obd_llog_init);