cs_pagestate_dec(obj, cl_page->cp_state);
lu_object_ref_del_at(&obj->co_lu, &cl_page->cp_obj_ref,
"cl_page", cl_page);
- cl_object_put(env, obj);
+ if (cl_page->cp_type != CPT_TRANSIENT)
+ cl_object_put(env, obj);
lu_ref_fini(&cl_page->cp_reference);
__cl_page_free(cl_page, bufsize);
EXIT;
struct cl_page *cl_page = NULL;
unsigned short bufsize = cl_object_header(o)->coh_page_bufsize;
+ if (OBD_FAIL_CHECK(OBD_FAIL_LLITE_PAGE_ALLOC))
+ return NULL;
+
check:
/* the number of entries in cl_page_kmem_array is expected to
* only be 2-3 entries, so the lookup overhead should be low.
BUILD_BUG_ON((1 << CP_TYPE_BITS) < CPT_NR); /* cp_type */
atomic_set(&cl_page->cp_ref, 1);
cl_page->cp_obj = o;
- cl_object_get(o);
+ if (type != CPT_TRANSIENT)
+ cl_object_get(o);
lu_object_ref_add_at(&o->co_lu, &cl_page->cp_obj_ref,
"cl_page", cl_page);
cl_page->cp_vmpage = vmpage;
if (crt >= CRT_NR)
return -EINVAL;
- cl_page_slice_for_each(cl_page, slice, i) {
- if (slice->cpl_ops->cpo_own)
- result = (*slice->cpl_ops->io[crt].cpo_prep)(env,
+ if (cl_page->cp_type != CPT_TRANSIENT) {
+ cl_page_slice_for_each(cl_page, slice, i) {
+ if (slice->cpl_ops->cpo_own)
+ result =
+ (*slice->cpl_ops->io[crt].cpo_prep)(env,
slice,
io);
- if (result != 0)
- break;
+ if (result != 0)
+ break;
+ }
}
if (result >= 0) {