if (rc)
RETURN(rc);
+ /* osp_declare_attr_set() ignores all attributes other than
+ * UID, GID, and size, and osp_attr_set() ignores all but UID
+ * and GID. Declaration of size attr setting happens through
+ * lod_declare_init_size(), and not through this function.
+ * Therefore we need not load striping unless ownership is
+ * changing. This should save memory and (we hope) speed up
+ * rename(). */
+ if (!(attr->la_valid & (LA_UID | LA_GID)))
+ RETURN(rc);
+
/*
* load striping information, notice we don't do this when object
* is being initialized as we don't need this information till
if (rc)
RETURN(rc);
+ if (!(attr->la_valid & (LA_UID | LA_GID)))
+ RETURN(rc);
+
/*
* if object is striped, apply changes to all the stripes
*/
rc = sizeof(struct lov_user_md_v1);
} else if (buf->lb_len >= sizeof(struct lov_user_md_v1)) {
lum->lmm_magic = LOV_USER_MAGIC_V1;
- lum->lmm_oi.oi_seq = FID_SEQ_LOV_DEFAULT;
+ ostid_set_seq(&lum->lmm_oi, FID_SEQ_LOV_DEFAULT);
lum->lmm_pattern = desc->ld_pattern;
lum->lmm_stripe_size = desc->ld_default_stripe_size;
lum->lmm_stripe_count = desc->ld_default_stripe_count;
v3->lmm_magic = cpu_to_le32(LOV_MAGIC_V3);
v3->lmm_pattern = cpu_to_le32(LOV_PATTERN_RAID0);
- fid_ostid_pack(lu_object_fid(&dt->do_lu), &v3->lmm_oi);
+ fid_to_ostid(lu_object_fid(&dt->do_lu), &v3->lmm_oi);
ostid_cpu_to_le(&v3->lmm_oi, &v3->lmm_oi);
v3->lmm_stripe_size = cpu_to_le32(lo->ldo_def_stripe_size);
v3->lmm_stripe_count = cpu_to_le32(lo->ldo_def_stripenr);
return dt_object_sync(env, dt_object_child(dt));
}
+static int lod_object_lock(const struct lu_env *env,
+ struct dt_object *dt, struct lustre_handle *lh,
+ struct ldlm_enqueue_info *einfo,
+ void *policy)
+{
+ struct dt_object *next = dt_object_child(dt);
+ int rc;
+ ENTRY;
+
+ /*
+ * declare setattr on the local object
+ */
+ rc = dt_object_lock(env, next, lh, einfo, policy);
+
+ RETURN(rc);
+}
+
struct dt_object_operations lod_obj_ops = {
.do_read_lock = lod_object_read_lock,
.do_write_lock = lod_object_write_lock,
.do_ref_del = lod_ref_del,
.do_capa_get = lod_capa_get,
.do_object_sync = lod_object_sync,
+ .do_object_lock = lod_object_lock,
};
-static int lod_object_lock(const struct lu_env *env,
- struct dt_object *dt, struct lustre_handle *lh,
- struct ldlm_enqueue_info *einfo,
- void *policy)
-{
- struct dt_object *next = dt_object_child(dt);
- int rc;
- ENTRY;
-
- /*
- * declare setattr on the local object
- */
- rc = dt_object_lock(env, next, lh, einfo, policy);
-
- RETURN(rc);
-}
-
-struct dt_lock_operations lod_lock_ops = {
- .do_object_lock = lod_object_lock,
-};
static ssize_t lod_read(const struct lu_env *env, struct dt_object *dt,
struct lu_buf *buf, loff_t *pos,
struct lustre_capa *capa)