Ejemplo n.º 1
0
static int osc_object_prune(const struct lu_env *env, struct cl_object *obj)
{
    struct osc_object       *osc = cl2osc(obj);
    struct ldlm_res_id      *resname = &osc_env_info(env)->oti_resname;

    /* DLM locks don't hold a reference of osc_object so we have to
     * clear it before the object is being destroyed. */
    ostid_build_res_name(&osc->oo_oinfo->loi_oi, resname);
    ldlm_resource_iterate(osc_export(osc)->exp_obd->obd_namespace, resname,
                          osc_object_ast_clear, osc);
    return 0;
}
Ejemplo n.º 2
0
static int osc_object_prune(const struct lu_env *env, struct cl_object *obj)
{
	struct osc_object       *osc = cl2osc(obj);
	struct ldlm_res_id      *resname = &osc_env_info(env)->oti_resname;

	LASSERTF(osc->oo_npages == 0,
		 DFID "still have %lu pages, obj: %p, osc: %p\n",
		 PFID(lu_object_fid(&obj->co_lu)), osc->oo_npages, obj, osc);

	/* DLM locks don't hold a reference of osc_object so we have to
	 * clear it before the object is being destroyed. */
	ostid_build_res_name(&osc->oo_oinfo->loi_oi, resname);
	ldlm_resource_iterate(osc_export(osc)->exp_obd->obd_namespace, resname,
			      osc_object_ast_clear, osc);
	return 0;
}
Ejemplo n.º 3
0
/**
 * Find any ldlm lock covers the osc object.
 * \retval 0	not found
 * \retval 1	find one
 * \retval < 0	error
 */
static int osc_object_find_cbdata(const struct lu_env *env,
				  struct cl_object *obj, ldlm_iterator_t iter,
				  void *data)
{
	struct ldlm_res_id		res_id;
	struct obd_device		*obd;
	int				rc = 0;

	ostid_build_res_name(&cl2osc(obj)->oo_oinfo->loi_oi, &res_id);
	obd = obj->co_lu.lo_dev->ld_obd;
	rc = ldlm_resource_iterate(obd->obd_namespace, &res_id, iter, data);
	if (rc == LDLM_ITER_STOP)
		return 1;

	if (rc == LDLM_ITER_CONTINUE)
		return 0;

	return rc;
}