{
LASSERT(atomic_read(&lqs->lqs_refcount) > 0);
- /* killing last ref, let's let hash table kill it */
- if (atomic_read(&lqs->lqs_refcount) == 1) {
- lustre_hash_del(lqs->lqs_ctxt->lqc_lqs_hash,
- &lqs->lqs_key, &lqs->lqs_hash);
- OBD_FREE_PTR(lqs);
- } else {
- if (atomic_dec_return(&lqs->lqs_refcount) == 1)
- if (atomic_dec_and_test(&lqs->lqs_ctxt->lqc_lqs))
- cfs_waitq_signal(&lqs->lqs_ctxt->lqc_lqs_waitq);
- CDEBUG(D_QUOTA, "lqs=%p refcount %d\n",
- lqs, atomic_read(&lqs->lqs_refcount));
-
- }
+ if (atomic_dec_return(&lqs->lqs_refcount) == 1)
+ if (atomic_dec_and_test(&lqs->lqs_ctxt->lqc_lqs))
+ cfs_waitq_signal(&lqs->lqs_ctxt->lqc_lqs_waitq);
+ CDEBUG(D_QUOTA, "lqs=%p refcount %d\n",
+ lqs, atomic_read(&lqs->lqs_refcount));
}
static inline void lqs_initref(struct lustre_qunit_size *lqs)
hlist_entry(hnode, struct lustre_qunit_size, lqs_hash);
ENTRY;
- if (atomic_inc_return(&q->lqs_refcount) == 2) /* quota_search_lqs */
- atomic_inc(&q->lqs_ctxt->lqc_lqs);
- CDEBUG(D_QUOTA, "lqs=%p refcount %d\n",
- q, atomic_read(&q->lqs_refcount));
+ lqs_getref(q);
RETURN(q);
}
hlist_entry(hnode, struct lustre_qunit_size, lqs_hash);
ENTRY;
- LASSERT(atomic_read(&q->lqs_refcount) > 0);
-
- if (atomic_dec_return(&q->lqs_refcount) == 1)
- if (atomic_dec_and_test(&q->lqs_ctxt->lqc_lqs))
- cfs_waitq_signal(&q->lqs_ctxt->lqc_lqs_waitq);
-
- CDEBUG(D_QUOTA, "lqs=%p refcount %d\n",
- q, atomic_read(&q->lqs_refcount));
+ lqs_putref(q);
RETURN(q);
}