From 9856a2951ac7c66b3335a58d05d7451bac9e95a3 Mon Sep 17 00:00:00 2001 From: braam Date: Sat, 25 Oct 2003 19:19:41 +0000 Subject: [PATCH] - all obd operations should return int - in the process capture a double free in a prep_async_page error case in rw.c - remove unused logging code - add a mini fix from Tian to not fail in llog_obd_setup when re-entering it. --- lustre/mds/mds_log.c | 6 ++-- lustre/obdclass/llog_obd.c | 19 +++++++----- lustre/obdfilter/filter_log.c | 70 ------------------------------------------- 3 files changed, 15 insertions(+), 80 deletions(-) diff --git a/lustre/mds/mds_log.c b/lustre/mds/mds_log.c index 3988a7a..386b1af 100644 --- a/lustre/mds/mds_log.c +++ b/lustre/mds/mds_log.c @@ -43,7 +43,7 @@ int mds_llog_setup(struct obd_device *obd, struct obd_device *disk_obd, int rc; ENTRY; - OBD_CHECK_OP(obd->u.mds.mds_osc_obd, llog_setup); + OBD_CHECK_OP(obd->u.mds.mds_osc_obd, llog_setup, 0); rc = OBP(obd->u.mds.mds_osc_obd, llog_setup)(obd->u.mds.mds_osc_obd, disk_obd, index, count, logid); @@ -55,7 +55,7 @@ int mds_llog_cleanup(struct obd_device *obd) int rc; ENTRY; - OBD_CHECK_OP(obd->u.mds.mds_osc_obd, llog_cleanup); + OBD_CHECK_OP(obd->u.mds.mds_osc_obd, llog_cleanup, 0); rc = OBP(obd->u.mds.mds_osc_obd, llog_cleanup)(obd->u.mds.mds_osc_obd); RETURN(rc); } @@ -82,7 +82,7 @@ int mds_llog_repl_cancel(struct obd_device *obd, struct lov_stripe_md *lsm, struct obd_device *lov_obd = obd->u.mds.mds_osc_obd; ENTRY; - OBD_CHECK_OP(obd, llog_repl_cancel); + OBD_CHECK_OP(obd, llog_repl_cancel, -EOPNOTSUPP); rc = OBP(lov_obd, llog_repl_cancel)(lov_obd, lsm, count, cookies, flags); diff --git a/lustre/obdclass/llog_obd.c b/lustre/obdclass/llog_obd.c index 903b6c6..1522a73 100644 --- a/lustre/obdclass/llog_obd.c +++ b/lustre/obdclass/llog_obd.c @@ -27,7 +27,7 @@ int obd_llog_setup(struct obd_device *obd, struct obd_device *disk_obd, int rc; ENTRY; - OBD_CHECK_OP(obd, llog_setup); + OBD_CHECK_OP(obd, llog_setup, 0); OBD_COUNTER_INCREMENT(obd, llog_setup); rc = OBP(obd, llog_setup)(obd, disk_obd, index, count, logid); @@ -40,7 +40,7 @@ int obd_llog_cleanup(struct obd_device *obd) int rc; ENTRY; - OBD_CHECK_OP(obd, llog_cleanup); + OBD_CHECK_OP(obd, llog_cleanup, 0); OBD_COUNTER_INCREMENT(obd, llog_cleanup); rc = OBP(obd, llog_cleanup)(obd); @@ -71,7 +71,7 @@ int obd_llog_repl_cancel(struct obd_device *obd, struct lov_stripe_md *lsm, int rc; ENTRY; - OBD_CHECK_OP(obd, llog_repl_cancel); + OBD_CHECK_OP(obd, llog_repl_cancel, -EOPNOTSUPP); OBD_COUNTER_INCREMENT(obd, llog_repl_cancel); rc = OBP(obd, llog_repl_cancel)(obd, lsm, count, cookies, flags); @@ -90,16 +90,21 @@ int llog_obd_setup(struct obd_device *obd, struct obd_device *disk_obd, LASSERT(count == 1); + if (disk_obd->obd_llog_ctxt && + disk_obd->obd_llog_ctxt->loc_handles[index]) + RETURN(0); + if (index == 0) { - OBD_ALLOC(ctxt, sizeof(*ctxt)); - if (!ctxt) - RETURN(-ENOMEM); - if (disk_obd->obd_llog_ctxt) { CERROR("llog_ctxt already allocated\n"); LBUG(); } + + OBD_ALLOC(ctxt, sizeof(*ctxt)); + if (!ctxt) + RETURN(-ENOMEM); disk_obd->obd_llog_ctxt = ctxt; + sema_init(&disk_obd->obd_llog_ctxt->loc_sem, 1); } else ctxt = disk_obd->obd_llog_ctxt; diff --git a/lustre/obdfilter/filter_log.c b/lustre/obdfilter/filter_log.c index 7a96064..520c4a3 100644 --- a/lustre/obdfilter/filter_log.c +++ b/lustre/obdfilter/filter_log.c @@ -37,76 +37,6 @@ #include "filter_internal.h" -#if 0 - -/* This is called from filter_setup() and should be single threaded */ -int filter_get_catalog(struct obd_device *obd) -{ - struct filter_obd *filter = &obd->u.filter; - struct filter_server_data *fsd = filter->fo_fsd; - struct obd_run_ctxt saved; - struct llog_handle *cathandle = NULL; - struct llog_logid logid; - struct llog_obd_ctxt *ctxt; - int rc; - ENTRY; - - push_ctxt(&saved, &obd->obd_ctxt, NULL); - if (fsd->fsd_catalog_oid) { - logid.lgl_oid = le64_to_cpu(fsd->fsd_catalog_oid); - logid.lgl_ogen = 0; - logid.lgl_ogr = le64_to_cpu(fsd->fsd_catalog_ogr); - rc = llog_create(obd, &cathandle, &logid, NULL); - if (rc) { - CERROR("error opening catalog "LPX64"/"LPX64": rc %d\n", - logid.lgl_oid, logid.lgl_ogr, - (int)PTR_ERR(cathandle)); - fsd->fsd_catalog_oid = 0; - fsd->fsd_catalog_ogr = 0; - RETURN(rc); - } - } - - if (!fsd->fsd_catalog_oid) { - rc = llog_create(obd, &cathandle, NULL, NULL); - if (rc) { - CERROR("error creating new catalog: rc %d\n", rc); - cathandle = ERR_PTR(rc); - GOTO(out, cathandle); - } - logid = cathandle->lgh_id; - fsd->fsd_catalog_oid = cpu_to_le64(logid.lgl_oid); - fsd->fsd_catalog_ogr = cpu_to_le64(logid.lgl_ogr); - rc = filter_update_server_data(obd, filter->fo_rcvd_filp, - fsd, 0); - if (rc) { - CERROR("error writing new catalog to disk: rc %d\n",rc); - GOTO(out_handle, rc); - } - } - - rc = llog_init_handle(cathandle, LLOG_F_IS_CAT, &obd->obd_uuid); - if (rc) - GOTO(out_handle, rc); - OBD_ALLOC(ctxt, sizeof(*ctxt)); - if (!ctxt) - GOTO(out_handle, rc = -ENOMEM); - LASSERT(obd->obd_llog_ctxt == NULL); - obd->obd_llog_ctxt = ctxt; - obd->obd_llog_ctxt->loc_obd = obd; - obd->obd_llog_ctxt->loc_handles[LLOG_OBD_SZ_LOG_HANDLE] = cathandle; - -out: - pop_ctxt(&saved, &obd->obd_ctxt, NULL); - RETURN(rc); - -out_handle: - llog_close(cathandle); - goto out; -} -#endif - - int filter_log_sz_change(struct llog_handle *cathandle, struct ll_fid *mds_fid, __u32 io_epoch, -- 1.8.3.1