Whamcloud - gitweb
LU-1876 hsm: revise ll_setattr_raw to not check stripe data
[fs/lustre-release.git] / lustre / osp / osp_object.c
index e5ffe31..3c59035 100644 (file)
@@ -94,7 +94,8 @@ static int osp_declare_attr_set(const struct lu_env *env, struct dt_object *dt,
        if (attr == NULL)
                RETURN(0);
 
-       if (attr->la_valid & LA_SIZE && attr->la_size > 0) {
+       if (attr->la_valid & LA_SIZE && attr->la_size > 0 &&
+           fid_is_zero(lu_object_fid(&o->opo_obj.do_lu))) {
                LASSERT(!dt_object_exists(dt));
                osp_object_assign_fid(env, d, o);
                rc = osp_object_truncate(env, dt, attr->la_size);
@@ -356,15 +357,28 @@ static int is_ost_obj(struct lu_object *lo)
 }
 
 static int osp_object_init(const struct lu_env *env, struct lu_object *o,
-                          const struct lu_object_conf *unused)
+                          const struct lu_object_conf *conf)
 {
        struct osp_object       *po = lu2osp_obj(o);
        int                     rc = 0;
        ENTRY;
 
-       if (is_ost_obj(o))
+       if (is_ost_obj(o)) {
                po->opo_obj.do_ops = &osp_obj_ops;
-
+       } else {
+               struct lu_attr          *la = &osp_env_info(env)->osi_attr;
+
+               po->opo_obj.do_ops = &osp_md_obj_ops;
+               o->lo_header->loh_attr |= LOHA_REMOTE;
+               po->opo_obj.do_lock_ops = &osp_md_lock_ops;
+               rc = po->opo_obj.do_ops->do_attr_get(env, lu2dt_obj(o),
+                                                    la, NULL);
+               if (rc == 0)
+                       o->lo_header->loh_attr |=
+                               LOHA_EXISTS | (la->la_mode & S_IFMT);
+               if (rc == -ENOENT)
+                       rc = 0;
+       }
        RETURN(rc);
 }