@@ -243,7 +243,7 @@ struct llog_ctxt {
struct llog_operations *loc_logops;
struct llog_handle *loc_handle;
struct mutex loc_mutex; /* protect loc_imp */
- atomic_t loc_refcount;
+ refcount_t loc_refcount;
long loc_flags; /* flags, see above defines */
/*
* llog chunk size, and llog record size can not be bigger than
@@ -267,9 +267,9 @@ static inline int llog_handle2ops(struct llog_handle *loghandle,
static inline struct llog_ctxt *llog_ctxt_get(struct llog_ctxt *ctxt)
{
- atomic_inc(&ctxt->loc_refcount);
+ refcount_inc(&ctxt->loc_refcount);
CDEBUG(D_INFO, "GETting ctxt %p : new refcount %d\n", ctxt,
- atomic_read(&ctxt->loc_refcount));
+ refcount_read(&ctxt->loc_refcount));
return ctxt;
}
@@ -277,9 +277,10 @@ static inline void llog_ctxt_put(struct llog_ctxt *ctxt)
{
if (!ctxt)
return;
- LASSERT_ATOMIC_GT_LT(&ctxt->loc_refcount, 0, LI_POISON);
+ LASSERT(refcount_read(&ctxt->loc_refcount) > 0);
+ LASSERT(refcount_read(&ctxt->loc_refcount) < LI_POISON);
CDEBUG(D_INFO, "PUTting ctxt %p : new refcount %d\n", ctxt,
- atomic_read(&ctxt->loc_refcount) - 1);
+ refcount_read(&ctxt->loc_refcount) - 1);
__llog_ctxt_put(NULL, ctxt);
}
@@ -47,7 +47,7 @@ static struct llog_ctxt *llog_new_ctxt(struct obd_device *obd)
return NULL;
ctxt->loc_obd = obd;
- atomic_set(&ctxt->loc_refcount, 1);
+ refcount_set(&ctxt->loc_refcount, 1);
return ctxt;
}
@@ -71,11 +71,9 @@ int __llog_ctxt_put(const struct lu_env *env, struct llog_ctxt *ctxt)
struct obd_device *obd;
int rc = 0;
- spin_lock(&olg->olg_lock);
- if (!atomic_dec_and_test(&ctxt->loc_refcount)) {
- spin_unlock(&olg->olg_lock);
+ if (!refcount_dec_and_lock(&ctxt->loc_refcount, &olg->olg_lock))
return rc;
- }
+
olg->olg_ctxts[ctxt->loc_idx] = NULL;
spin_unlock(&olg->olg_lock);
@@ -116,8 +114,8 @@ int llog_cleanup(const struct lu_env *env, struct llog_ctxt *ctxt)
/*
* Banlance the ctxt get when calling llog_cleanup()
*/
- LASSERT(atomic_read(&ctxt->loc_refcount) < LI_POISON);
- LASSERT(atomic_read(&ctxt->loc_refcount) > 1);
+ LASSERT(refcount_read(&ctxt->loc_refcount) < LI_POISON);
+ LASSERT(refcount_read(&ctxt->loc_refcount) > 1);
llog_ctxt_put(ctxt);
/*
Make this a refcount_t for clarity, and also use refcount_dec_and_lock() rather than having separate lock and dec calls. Signed-off-by: NeilBrown <neilb@suse.com> --- drivers/staging/lustre/lustre/include/lustre_log.h | 11 ++++++----- drivers/staging/lustre/lustre/obdclass/llog_obd.c | 12 +++++------- 2 files changed, 11 insertions(+), 12 deletions(-)