* GPL HEADER END
*/
/*
- * Copyright 2008 Sun Microsystems, Inc. All rights reserved
+ * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved.
* Use is subject to license terms.
*/
/*
struct lov_lock_handles {
struct portals_handle llh_handle;
- atomic_t llh_refcount;
+ cfs_atomic_t llh_refcount;
int llh_stripe_count;
struct lustre_handle llh_handles[0];
};
struct obd_info rq_oi;
struct lov_request_set *rq_rqset;
- struct list_head rq_link;
+ cfs_list_t rq_link;
int rq_idx; /* index in lov->tgts array */
int rq_stripe; /* stripe number */
struct lov_request_set {
struct ldlm_enqueue_info*set_ei;
struct obd_info *set_oi;
- atomic_t set_refcount;
+ cfs_atomic_t set_refcount;
struct obd_export *set_exp;
/* XXX: There is @set_exp already, however obd_statfs gets obd_device
only. */
obd_count set_oabufs;
struct brw_page *set_pga;
struct lov_lock_handles *set_lockh;
- struct list_head set_list;
+ cfs_list_t set_list;
+ cfs_waitq_t set_waitq;
+ cfs_spinlock_t set_lock;
};
extern cfs_mem_cache_t *lov_oinfo_slab;
static inline void lov_llh_addref(void *llhp)
{
struct lov_lock_handles *llh = llhp;
- atomic_inc(&llh->llh_refcount);
+ cfs_atomic_inc(&llh->llh_refcount);
CDEBUG(D_INFO, "GETting llh %p : new refcount %d\n", llh,
- atomic_read(&llh->llh_refcount));
+ cfs_atomic_read(&llh->llh_refcount));
}
static inline struct lov_lock_handles *lov_llh_new(struct lov_stripe_md *lsm)
sizeof(*llh->llh_handles) * lsm->lsm_stripe_count);
if (llh == NULL)
return NULL;
- atomic_set(&llh->llh_refcount, 2);
+ cfs_atomic_set(&llh->llh_refcount, 2);
llh->llh_stripe_count = lsm->lsm_stripe_count;
CFS_INIT_LIST_HEAD(&llh->llh_handle.h_link);
class_handle_hash(&llh->llh_handle, lov_llh_addref);
return llh;
}
+void lov_finish_set(struct lov_request_set *set);
+
+static inline void lov_get_reqset(struct lov_request_set *set)
+{
+ LASSERT(set != NULL);
+ LASSERT(cfs_atomic_read(&set->set_refcount) > 0);
+ cfs_atomic_inc(&set->set_refcount);
+}
+
+static inline void lov_put_reqset(struct lov_request_set *set)
+{
+ if (cfs_atomic_dec_and_test(&set->set_refcount))
+ lov_finish_set(set);
+}
+
static inline struct lov_lock_handles *
lov_handle2llh(struct lustre_handle *handle)
{
static inline void lov_llh_put(struct lov_lock_handles *llh)
{
CDEBUG(D_INFO, "PUTting llh %p : new refcount %d\n", llh,
- atomic_read(&llh->llh_refcount) - 1);
- LASSERT(atomic_read(&llh->llh_refcount) > 0 &&
- atomic_read(&llh->llh_refcount) < 0x5a5a);
- if (atomic_dec_and_test(&llh->llh_refcount)) {
+ cfs_atomic_read(&llh->llh_refcount) - 1);
+ LASSERT(cfs_atomic_read(&llh->llh_refcount) > 0 &&
+ cfs_atomic_read(&llh->llh_refcount) < 0x5a5a);
+ if (cfs_atomic_dec_and_test(&llh->llh_refcount)) {
class_handle_unhash(&llh->llh_handle);
/* The structure may be held by other threads because RCU.
* -jxiong */
- if (atomic_read(&llh->llh_refcount))
+ if (cfs_atomic_read(&llh->llh_refcount))
return;
OBD_FREE_RCU(llh, sizeof *llh +
/* lov_request.c */
void lov_set_add_req(struct lov_request *req, struct lov_request_set *set);
+int lov_finished_set(struct lov_request_set *set);
void lov_update_set(struct lov_request_set *set,
struct lov_request *req, int rc);
int lov_update_common_set(struct lov_request_set *set,
struct lov_stripe_md **ea, struct obdo *src_oa,
struct obd_trans_info *oti,
struct lov_request_set **reqset);
-int lov_update_create_set(struct lov_request_set *set,
- struct lov_request *req, int rc);
+int cb_create_update(void *cookie, int rc);
int lov_fini_create_set(struct lov_request_set *set, struct lov_stripe_md **ea);
int lov_prep_brw_set(struct obd_export *exp, struct obd_info *oinfo,
obd_count oa_bufs, struct brw_page *pga,
struct obd_uuid *uuidp, int gen);
/* lov_log.c */
int lov_llog_init(struct obd_device *obd, struct obd_llog_group *olg,
- struct obd_device *tgt, int count, struct llog_catid *logid,
- struct obd_uuid *uuid);
+ struct obd_device *tgt, int *idx);
int lov_llog_finish(struct obd_device *obd, int count);
/* lov_pack.c */
void lov_free_memmd(struct lov_stripe_md **lsmp);
void lov_dump_lmm_v1(int level, struct lov_mds_md_v1 *lmm);
-void lov_dump_lmm_join(int level, struct lov_mds_md_join *lmmj);
void lov_dump_lmm_v3(int level, struct lov_mds_md_v3 *lmm);
void lov_dump_lmm(int level, void *lmm);
/* lov_ea.c */
-int lov_unpackmd_join(struct lov_obd *lov, struct lov_stripe_md *lsm,
- struct lov_mds_md *lmm);
struct lov_stripe_md *lsm_alloc_plain(int stripe_count, int *size);
void lsm_free_plain(struct lov_stripe_md *lsm);
-struct lov_extent *lovea_idx2le(struct lov_stripe_md *lsm, int stripe_no);
-struct lov_extent *lovea_off2le(struct lov_stripe_md *lsm, obd_off lov_off);
int lovea_destroy_object(struct lov_obd *lov, struct lov_stripe_md *lsm,
struct obdo *oa, void *data);
/* lproc_lov.c */
extern struct lu_device_type lov_device_type;
/* pools */
-extern lustre_hash_ops_t pool_hash_operations;
+extern cfs_hash_ops_t pool_hash_operations;
/* ost_pool methods */
int lov_ost_pool_init(struct ost_pool *op, unsigned int count);
int lov_ost_pool_extend(struct ost_pool *op, unsigned int min_count);