#include <linux/atomic.h>
#include <linux/list.h>
#include <linux/mutex.h>
+#ifdef HAVE_REFCOUNT_T
+#include <linux/refcount.h>
+#else
+#include <libcfs/linux/linux-refcount.h>
+#endif
#include <linux/spinlock.h>
#include <linux/time.h>
#include <linux/types.h>
*/
struct obd_import {
/** Reference counter */
- atomic_t imp_refcount;
+ refcount_t imp_refcount;
struct lustre_handle imp_dlm_handle; /* client's ldlm export */
/** Currently active connection */
struct ptlrpc_connection *imp_connection;
CDEBUG(D_IOCTL, "destroying import %p for %s\n", imp,
imp->imp_obd->obd_name);
- LASSERT_ATOMIC_ZERO(&imp->imp_refcount);
+ LASSERT(refcount_read(&imp->imp_refcount) == 0);
ptlrpc_put_connection_superhack(imp->imp_connection);
struct obd_import *class_import_get(struct obd_import *import)
{
- atomic_inc(&import->imp_refcount);
+ refcount_inc(&import->imp_refcount);
CDEBUG(D_INFO, "import %p refcount=%d obd=%s\n", import,
- atomic_read(&import->imp_refcount),
+ refcount_read(&import->imp_refcount),
import->imp_obd->obd_name);
return import;
}
{
ENTRY;
- LASSERT_ATOMIC_GT_LT(&imp->imp_refcount, 0, LI_POISON);
+ LASSERT(refcount_read(&imp->imp_refcount) > 0);
CDEBUG(D_INFO, "import %p refcount=%d obd=%s\n", imp,
- atomic_read(&imp->imp_refcount) - 1,
+ refcount_read(&imp->imp_refcount) - 1,
imp->imp_obd->obd_name);
- if (atomic_dec_and_test(&imp->imp_refcount)) {
+ if (refcount_dec_and_test(&imp->imp_refcount)) {
CDEBUG(D_INFO, "final put import %p\n", imp);
obd_zombie_import_add(imp);
}
else
imp->imp_sec_refpid = 1;
- atomic_set(&imp->imp_refcount, 2);
+ refcount_set(&imp->imp_refcount, 2);
atomic_set(&imp->imp_unregistering, 0);
atomic_set(&imp->imp_inflight, 0);
atomic_set(&imp->imp_replay_inflight, 0);
DEBUG_REQ(D_HA, req, "inflight=%d, refcount=%d: rc = %d",
atomic_read(&imp->imp_inflight),
- atomic_read(&imp->imp_refcount), rc);
+ refcount_read(&imp->imp_refcount), rc);
spin_lock(&imp->imp_lock);
/* DISCONNECT reply can be late and another connection can just