From aa6b13876f2dcf0705e1d1acb0fb1c743beb37d2 Mon Sep 17 00:00:00 2001 From: alex Date: Sat, 3 Oct 2009 18:15:45 +0000 Subject: [PATCH] - osd_object_destroy() to release dbuf even in case of failure --- lustre/dmu-osd/osd_handler.c | 4 +++- lustre/dmu-osd/udmu.c | 18 ++---------------- 2 files changed, 5 insertions(+), 17 deletions(-) diff --git a/lustre/dmu-osd/osd_handler.c b/lustre/dmu-osd/osd_handler.c index d0de129..4a2516e 100644 --- a/lustre/dmu-osd/osd_handler.c +++ b/lustre/dmu-osd/osd_handler.c @@ -628,11 +628,13 @@ static int osd_object_destroy(const struct lu_env *env, struct osd_object *obj) CERROR("udmu_object_delete() failed with error %d\n", rc); GOTO(out, rc); } - obj->oo_db = NULL; out: /* COMMIT changes */ osd_trans_stop(env, th); + + udmu_object_put_dmu_buf(obj->oo_db, osd_object_tag); + obj->oo_db = NULL; CDEBUG(D_OTHER, "destroy object %s (objid %llu)\n", buf, va.va_nodeid); RETURN (0); diff --git a/lustre/dmu-osd/udmu.c b/lustre/dmu-osd/udmu.c index 2b17f94..120ce17 100644 --- a/lustre/dmu-osd/udmu.c +++ b/lustre/dmu-osd/udmu.c @@ -117,7 +117,7 @@ void udmu_debug(int level) int udmu_objset_open(char *osname, udmu_objset_t *uos) { uint64_t version = ZPL_VERSION; - int error, len; + int error; memset(uos, 0, sizeof(udmu_objset_t)); @@ -982,8 +982,6 @@ static int udmu_object_delete_impl(udmu_objset_t *uos, dmu_buf_t **db, dmu_tx_t } oid = (*db)->db_object; - udmu_object_put_dmu_buf(*db, tag); - *db = NULL; uos->deletes++; return dmu_object_free(uos->os, oid, tx); @@ -1055,19 +1053,7 @@ void udmu_tx_abort(dmu_tx_t *tx) int udmu_tx_assign(dmu_tx_t *tx, uint64_t txg_how) { - int rc; - rc = dmu_tx_assign(tx, txg_how); -#if 0 - if (rc == 28) { - uint64_t refdbytes, availbytes, usedobjs, availobjs; - - dmu_objset_space(tx->tx_objset, &refdbytes, &availbytes, - &usedobjs, &availobjs); - printk("ref %Lu, avail %Lu, used objs %Lu, avail objs %Lu\n", - refdbytes, availbytes, usedobjs, availobjs); - } -#endif - return rc; + return dmu_tx_assign(tx, txg_how); } void udmu_tx_wait(dmu_tx_t *tx) -- 1.8.3.1