/* Bypass la_vaild == LA_MODE,
* this is for changing file with SUID or SGID. */
if ((la->la_valid & ~LA_MODE) &&
+ !(ma->ma_attr_flags & MDS_PERM_BYPASS) &&
(uc->mu_fsuid != tmp_la->la_uid) &&
!mdd_capable(uc, CAP_FOWNER))
RETURN(-EPERM);
return rc;
}
+static int mdd_object_sync(const struct lu_env *env, struct md_object *obj)
+{
+ struct mdd_object *mdd_obj = md2mdd_obj(obj);
+ struct dt_object *next;
+
+ LASSERT(mdd_object_exists(mdd_obj));
+ next = mdd_object_child(mdd_obj);
+ return next->do_ops->do_object_sync(env, next);
+}
+
struct md_object_operations mdd_obj_ops = {
.moo_permission = mdd_permission,
.moo_attr_get = mdd_attr_get,
.moo_close = mdd_close,
.moo_readpage = mdd_readpage,
.moo_readlink = mdd_readlink,
- .moo_capa_get = mdd_capa_get
+ .moo_capa_get = mdd_capa_get,
+ .moo_object_sync = mdd_object_sync,
};