* if creation reaches here, it means the object has been created
* successfully */
dt->do_lu.lo_header->loh_attr |= LOHA_EXISTS | (attr->la_mode & S_IFMT);
- if (S_ISDIR(attr->la_mode))
- obj->opo_empty = 1;
+ obj->opo_empty = 1;
return 0;
}
ah->dah_mode = child_mode;
}
-static int osp_md_declare_attr_set(const struct lu_env *env,
- struct dt_object *dt,
- const struct lu_attr *attr,
- struct thandle *th)
+int osp_md_declare_attr_set(const struct lu_env *env, struct dt_object *dt,
+ const struct lu_attr *attr, struct thandle *th)
{
struct osp_thread_info *osi = osp_env_info(env);
struct update_request *update;
return rc;
}
-static int osp_md_attr_set(const struct lu_env *env, struct dt_object *dt,
- const struct lu_attr *attr, struct thandle *th,
- struct lustre_capa *capa)
+int osp_md_attr_set(const struct lu_env *env, struct dt_object *dt,
+ const struct lu_attr *attr, struct thandle *th,
+ struct lustre_capa *capa)
{
CDEBUG(D_INFO, "attr set object "DFID"\n",
PFID(&dt->do_lu.lo_header->loh_fid));
struct dt_object *dt,
struct lustre_handle *lh,
struct ldlm_enqueue_info *einfo,
- void *policy)
+ ldlm_policy_data_t *policy)
{
- struct osp_thread_info *info = osp_env_info(env);
- struct ldlm_res_id *res_id = &info->osi_resid;
- struct dt_device *dt_dev = lu2dt_dev(dt->do_lu.lo_dev);
- struct osp_device *osp = dt2osp_dev(dt_dev);
- struct ptlrpc_request *req = NULL;
- int rc = 0;
- __u64 flags = 0;
- ldlm_mode_t mode;
+ struct osp_thread_info *info = osp_env_info(env);
+ struct ldlm_res_id *res_id = &info->osi_resid;
+ struct dt_device *dt_dev = lu2dt_dev(dt->do_lu.lo_dev);
+ struct osp_device *osp = dt2osp_dev(dt_dev);
+ struct ptlrpc_request *req;
+ int rc = 0;
+ __u64 flags = 0;
+ ldlm_mode_t mode;
fid_build_reg_res_name(lu_object_fid(&dt->do_lu), res_id);
mode = ldlm_lock_match(osp->opd_obd->obd_namespace,
LDLM_FL_BLOCK_GRANTED, res_id,
- einfo->ei_type,
- (ldlm_policy_data_t *)policy,
+ einfo->ei_type, policy,
einfo->ei_mode, lh, 0);
if (mode > 0)
return ELDLM_OK;
return rc == ELDLM_OK ? 0 : -EIO;
}
+static int osp_md_object_unlock(const struct lu_env *env,
+ struct dt_object *dt,
+ struct ldlm_enqueue_info *einfo,
+ ldlm_policy_data_t *policy)
+{
+ struct lustre_handle *lockh = einfo->ei_cbdata;
+
+ /* unlock finally */
+ ldlm_lock_decref(lockh, einfo->ei_mode);
+
+ return 0;
+}
+
struct dt_object_operations osp_md_obj_ops = {
.do_read_lock = osp_md_object_read_lock,
.do_write_lock = osp_md_object_write_lock,
.do_xattr_set = osp_xattr_set,
.do_index_try = osp_md_index_try,
.do_object_lock = osp_md_object_lock,
+ .do_object_unlock = osp_md_object_unlock,
};