* Implementation of cl_object for OSC layer.
*
* Author: Nikita Danilov <nikita.danilov@sun.com>
+ * Author: Jinshan Xiong <jinshan.xiong@intel.com>
*/
#define DEBUG_SUBSYSTEM S_OSC
CFS_INIT_LIST_HEAD(&osc->oo_urgent_exts);
CFS_INIT_LIST_HEAD(&osc->oo_rpc_exts);
CFS_INIT_LIST_HEAD(&osc->oo_reading_exts);
- cfs_atomic_set(&osc->oo_nr_reads, 0);
- cfs_atomic_set(&osc->oo_nr_writes, 0);
+ atomic_set(&osc->oo_nr_reads, 0);
+ atomic_set(&osc->oo_nr_writes, 0);
spin_lock_init(&osc->oo_lock);
+ spin_lock_init(&osc->oo_tree_lock);
cl_object_page_init(lu2cl(obj), sizeof(struct osc_page));
LASSERT(cfs_list_empty(&osc->oo_urgent_exts));
LASSERT(cfs_list_empty(&osc->oo_rpc_exts));
LASSERT(cfs_list_empty(&osc->oo_reading_exts));
- LASSERT(cfs_atomic_read(&osc->oo_nr_reads) == 0);
- LASSERT(cfs_atomic_read(&osc->oo_nr_writes) == 0);
+ LASSERT(atomic_read(&osc->oo_nr_reads) == 0);
+ LASSERT(atomic_read(&osc->oo_nr_writes) == 0);
lu_object_fini(obj);
OBD_SLAB_FREE_PTR(osc, osc_object_kmem);
};
struct lu_object *osc_object_alloc(const struct lu_env *env,
- const struct lu_object_header *unused,
- struct lu_device *dev)
+ const struct lu_object_header *unused,
+ struct lu_device *dev)
{
- struct osc_object *osc;
- struct lu_object *obj;
-
- OBD_SLAB_ALLOC_PTR_GFP(osc, osc_object_kmem, __GFP_IO);
- if (osc != NULL) {
- obj = osc2lu(osc);
- lu_object_init(obj, NULL, dev);
- osc->oo_cl.co_ops = &osc_ops;
- obj->lo_ops = &osc_lu_obj_ops;
- } else
- obj = NULL;
- return obj;
+ struct osc_object *osc;
+ struct lu_object *obj;
+
+ OBD_SLAB_ALLOC_PTR_GFP(osc, osc_object_kmem, GFP_NOFS);
+ if (osc != NULL) {
+ obj = osc2lu(osc);
+ lu_object_init(obj, NULL, dev);
+ osc->oo_cl.co_ops = &osc_ops;
+ obj->lo_ops = &osc_lu_obj_ops;
+ } else
+ obj = NULL;
+ return obj;
}
/** @} osc */