struct lu_device_type *ldt);
int class_unregister_type(const char *nm);
-struct obd_device *class_newdev(const char *type_name, const char *name);
+
+
+
+/**
+ allocate one minor number
+ */
+int obd_minor_alloc(void);
+/**
+ release allocated minor
+ */
+void obd_minor_release(long minor);
+/**
+ return 1 if minor is point to allocated device,
+ return 0 otherwise
+ */
+int obd_minor_valid(long minor);
+
+int obd_hashes_init(void);
+void obd_hashes_fini(void);
+
+struct obd_device *class_newdev(const char *type_name, const char *name,
+ const char *uuid);
void class_release_dev(struct obd_device *obd);
int class_name2dev(const char *name);
struct obd_device *class_name2obd(const char *name);
int class_uuid2dev(struct obd_uuid *uuid);
struct obd_device *class_uuid2obd(struct obd_uuid *uuid);
+
void class_obd_list(void);
+void obd_devlist_first(struct obd_device **pos);
+void obd_devlist_next(struct obd_device **pos);
+void obd_devlist_last(struct obd_device *pos);
+const char *obd_dev_status(struct obd_device *obd);
+
struct obd_device * class_find_client_obd(struct obd_uuid *tgt_uuid,
const char * typ_name,
struct obd_uuid *grp_uuid);
struct obd_device * class_devices_in_group(struct obd_uuid *grp_uuid,
- int *next);
-struct obd_device * class_num2obd(int num);
+ struct obd_device **prev);
+struct obd_device * class_num2obd(__u32 num);
+
int class_notify_sptlrpc_conf(const char *fsname, int namelen);
void obd_zombie_impexp_cull(void);
void obd_zombie_barrier(void);
void obd_exports_barrier(struct obd_device *obd);
+int kuc_len(int payload_len);
+struct kuc_hdr * kuc_ptr(void *p);
+int kuc_ispayload(void *p);
+void *kuc_alloc(int payload_len, int transport, int type);
+void kuc_free(void *p, int payload_len);
+
/* obd_config.c */
int class_process_config(struct lustre_cfg *lcfg);
int class_process_proc_param(char *prefix, struct lprocfs_vars *lvars,
#define class_export_rpc_put(exp) \
({ \
- LASSERT(cfs_atomic_read(&exp->exp_rpc_count) > 0); \
+ LASSERT_ATOMIC_POS(&exp->exp_rpc_count); \
cfs_atomic_dec(&(exp)->exp_rpc_count); \
CDEBUG(D_INFO, "RPC PUTting export %p : new rpc_count %d\n", \
(exp), cfs_atomic_read(&(exp)->exp_rpc_count)); \
#define class_export_lock_put(exp, lock) \
({ \
- LASSERT(cfs_atomic_read(&exp->exp_locks_count) > 0); \
+ LASSERT_ATOMIC_POS(&exp->exp_locks_count); \
cfs_atomic_dec(&(exp)->exp_locks_count); \
__class_export_del_lock_ref(exp, lock); \
CDEBUG(D_INFO, "lock PUTting export %p : new locks_count %d\n", \
#define class_export_cb_put(exp) \
({ \
- LASSERT(cfs_atomic_read(&exp->exp_cb_count) > 0); \
+ LASSERT_ATOMIC_POS(&exp->exp_cb_count); \
cfs_atomic_dec(&(exp)->exp_cb_count); \
CDEBUG(D_INFO, "callback PUTting export %p : new cb_count %d\n",\
(exp), cfs_atomic_read(&(exp)->exp_cb_count)); \
} \
} while (0)
-static inline int class_devno_max(void)
-{
- return MAX_OBD_DEVICES;
-}
-
static inline int obd_get_info(struct obd_export *exp, __u32 keylen,
void *key, __u32 *vallen, void *val,
struct lov_stripe_md *lsm)
RETURN(rc);
}
-static inline int obd_sync(struct obd_export *exp, struct obdo *oa,
- struct lov_stripe_md *ea, obd_size start,
- obd_size end, void *capa)
+static inline int obd_sync_rqset(struct obd_export *exp, struct obd_info *oinfo,
+ obd_size start, obd_size end)
+{
+ struct ptlrpc_request_set *set = NULL;
+ int rc;
+ ENTRY;
+
+ OBD_CHECK_DT_OP(exp->exp_obd, sync, -EOPNOTSUPP);
+ EXP_COUNTER_INCREMENT(exp, sync);
+
+ set = ptlrpc_prep_set();
+ if (set == NULL)
+ RETURN(-ENOMEM);
+
+ rc = OBP(exp->exp_obd, sync)(exp, oinfo, start, end, set);
+ if (rc == 0)
+ rc = ptlrpc_set_wait(set);
+ ptlrpc_set_destroy(set);
+ RETURN(rc);
+}
+
+static inline int obd_sync(struct obd_export *exp, struct obd_info *oinfo,
+ obd_size start, obd_size end,
+ struct ptlrpc_request_set *set)
{
int rc;
ENTRY;
OBD_CHECK_DT_OP(exp->exp_obd, sync, -EOPNOTSUPP);
EXP_COUNTER_INCREMENT(exp, sync);
- rc = OBP(exp->exp_obd, sync)(exp, oa, ea, start, end, capa);
+ rc = OBP(exp->exp_obd, sync)(exp, oinfo, start, end, set);
RETURN(rc);
}