}
return type;
}
+EXPORT_SYMBOL(class_get_type);
void class_put_type(struct obd_type *type)
{
cfs_module_put(type->typ_dt_ops->o_owner);
cfs_spin_unlock(&type->obd_type_lock);
}
+EXPORT_SYMBOL(class_put_type);
#define CLASS_MAX_NAME 1024
OBD_FREE(type, sizeof(*type));
RETURN(rc);
}
+EXPORT_SYMBOL(class_register_type);
int class_unregister_type(const char *name)
{
OBD_FREE(type, sizeof(*type));
RETURN(0);
} /* class_unregister_type */
+EXPORT_SYMBOL(class_unregister_type);
/**
* Create a new obd device.
}
LASSERT(newdev->obd_magic == OBD_DEVICE_MAGIC);
- cfs_spin_lock(&obd_dev_lock);
+ cfs_write_lock(&obd_dev_lock);
for (i = 0; i < class_devno_max(); i++) {
struct obd_device *obd = class_num2obd(i);
+
if (obd && obd->obd_name &&
(strcmp(name, obd->obd_name) == 0)) {
CERROR("Device %s already exists, won't add\n", name);
obd_devs[i] = result;
}
}
- cfs_spin_unlock(&obd_dev_lock);
+ cfs_write_unlock(&obd_dev_lock);
if (result == NULL && i >= class_devno_max()) {
CERROR("all %u OBD devices used, increase MAX_OBD_DEVICES\n",
CDEBUG(D_INFO, "Release obd device %s obd_type name =%s\n",
obd->obd_name,obd->obd_type->typ_name);
- cfs_spin_lock(&obd_dev_lock);
+ cfs_write_lock(&obd_dev_lock);
obd_devs[obd->obd_minor] = NULL;
- cfs_spin_unlock(&obd_dev_lock);
+ cfs_write_unlock(&obd_dev_lock);
obd_device_free(obd);
class_put_type(obd_type);
if (!name)
return -1;
- cfs_spin_lock(&obd_dev_lock);
+ cfs_read_lock(&obd_dev_lock);
for (i = 0; i < class_devno_max(); i++) {
struct obd_device *obd = class_num2obd(i);
+
if (obd && obd->obd_name && strcmp(name, obd->obd_name) == 0) {
/* Make sure we finished attaching before we give
out any references */
LASSERT(obd->obd_magic == OBD_DEVICE_MAGIC);
if (obd->obd_attached) {
- cfs_spin_unlock(&obd_dev_lock);
+ cfs_read_unlock(&obd_dev_lock);
return i;
}
break;
}
}
- cfs_spin_unlock(&obd_dev_lock);
+ cfs_read_unlock(&obd_dev_lock);
return -1;
}
+EXPORT_SYMBOL(class_name2dev);
struct obd_device *class_name2obd(const char *name)
{
return NULL;
return class_num2obd(dev);
}
+EXPORT_SYMBOL(class_name2obd);
int class_uuid2dev(struct obd_uuid *uuid)
{
int i;
- cfs_spin_lock(&obd_dev_lock);
+ cfs_read_lock(&obd_dev_lock);
for (i = 0; i < class_devno_max(); i++) {
struct obd_device *obd = class_num2obd(i);
+
if (obd && obd_uuid_equals(uuid, &obd->obd_uuid)) {
LASSERT(obd->obd_magic == OBD_DEVICE_MAGIC);
- cfs_spin_unlock(&obd_dev_lock);
+ cfs_read_unlock(&obd_dev_lock);
return i;
}
}
- cfs_spin_unlock(&obd_dev_lock);
+ cfs_read_unlock(&obd_dev_lock);
return -1;
}
+EXPORT_SYMBOL(class_uuid2dev);
struct obd_device *class_uuid2obd(struct obd_uuid *uuid)
{
return NULL;
return class_num2obd(dev);
}
+EXPORT_SYMBOL(class_uuid2obd);
/**
* Get obd device from ::obd_devs[]
return obd;
}
+EXPORT_SYMBOL(class_num2obd);
void class_obd_list(void)
{
char *status;
int i;
- cfs_spin_lock(&obd_dev_lock);
+ cfs_read_lock(&obd_dev_lock);
for (i = 0; i < class_devno_max(); i++) {
struct obd_device *obd = class_num2obd(i);
+
if (obd == NULL)
continue;
if (obd->obd_stopping)
obd->obd_name, obd->obd_uuid.uuid,
cfs_atomic_read(&obd->obd_refcount));
}
- cfs_spin_unlock(&obd_dev_lock);
+ cfs_read_unlock(&obd_dev_lock);
return;
}
{
int i;
- cfs_spin_lock(&obd_dev_lock);
+ cfs_read_lock(&obd_dev_lock);
for (i = 0; i < class_devno_max(); i++) {
struct obd_device *obd = class_num2obd(i);
+
if (obd == NULL)
continue;
if ((strncmp(obd->obd_type->typ_name, typ_name,
&obd->u.cli.cl_target_uuid) &&
((grp_uuid)? obd_uuid_equals(grp_uuid,
&obd->obd_uuid) : 1)) {
- cfs_spin_unlock(&obd_dev_lock);
+ cfs_read_unlock(&obd_dev_lock);
return obd;
}
}
}
- cfs_spin_unlock(&obd_dev_lock);
+ cfs_read_unlock(&obd_dev_lock);
return NULL;
}
+EXPORT_SYMBOL(class_find_client_obd);
/* Iterate the obd_device list looking devices have grp_uuid. Start
searching at *next, and if a device is found, the next index to look
else
return NULL;
- cfs_spin_lock(&obd_dev_lock);
+ cfs_read_lock(&obd_dev_lock);
for (; i < class_devno_max(); i++) {
struct obd_device *obd = class_num2obd(i);
+
if (obd == NULL)
continue;
if (obd_uuid_equals(grp_uuid, &obd->obd_uuid)) {
if (next != NULL)
*next = i+1;
- cfs_spin_unlock(&obd_dev_lock);
+ cfs_read_unlock(&obd_dev_lock);
return obd;
}
}
- cfs_spin_unlock(&obd_dev_lock);
+ cfs_read_unlock(&obd_dev_lock);
return NULL;
}
+EXPORT_SYMBOL(class_devices_in_group);
/**
* to notify sptlrpc log for \a fsname has changed, let every relevant OBD
LASSERT(namelen > 0);
- cfs_spin_lock(&obd_dev_lock);
+ cfs_read_lock(&obd_dev_lock);
for (i = 0; i < class_devno_max(); i++) {
obd = class_num2obd(i);
continue;
class_incref(obd, __FUNCTION__, obd);
- cfs_spin_unlock(&obd_dev_lock);
+ cfs_read_unlock(&obd_dev_lock);
rc2 = obd_set_info_async(obd->obd_self_export,
sizeof(KEY_SPTLRPC_CONF),
KEY_SPTLRPC_CONF, 0, NULL, NULL);
rc = rc ? rc : rc2;
class_decref(obd, __FUNCTION__, obd);
- cfs_spin_lock(&obd_dev_lock);
+ cfs_read_lock(&obd_dev_lock);
}
- cfs_spin_unlock(&obd_dev_lock);
+ cfs_read_unlock(&obd_dev_lock);
return rc;
}
EXPORT_SYMBOL(class_notify_sptlrpc_conf);
export = class_handle2object(conn->cookie);
RETURN(export);
}
+EXPORT_SYMBOL(class_conn2export);
struct obd_device *class_exp2obd(struct obd_export *exp)
{
return exp->exp_obd;
return NULL;
}
+EXPORT_SYMBOL(class_exp2obd);
struct obd_device *class_conn2obd(struct lustre_handle *conn)
{
}
return NULL;
}
+EXPORT_SYMBOL(class_conn2obd);
struct obd_import *class_exp2cliimp(struct obd_export *exp)
{
return NULL;
return obd->u.cli.cl_import;
}
+EXPORT_SYMBOL(class_exp2cliimp);
struct obd_import *class_conn2cliimp(struct lustre_handle *conn)
{
return NULL;
return obd->u.cli.cl_import;
}
+EXPORT_SYMBOL(class_conn2cliimp);
/* Export management functions */
static void class_export_destroy(struct obd_export *exp)
class_export_put(export);
RETURN(0);
}
+EXPORT_SYMBOL(class_disconnect);
/* Return non-zero for a fully connected export */
int class_connected_export(struct obd_export *exp)