adjust += req_capsule_shrink(pill, &RMF_LOGCOOKIES,
acl_size, adjust, 1);
- if ((req_capsule_has_field(pill, &RMF_CAPA1, RCL_SERVER) &&
- !(body->valid & OBD_MD_FLMDSCAPA)))
- adjust += req_capsule_shrink(pill, &RMF_CAPA1, 0, adjust, 1);
+ /* RMF_CAPA1 on server-side maybe for OBD_MD_FLMDSCAPA or
+ * OBD_MD_FLOSSCAPA. If RMF_CAPA2 exist also, RMF_CAPA1 is
+ * for OBD_MD_FLMDSCAPA only. */
+ if (req_capsule_has_field(pill, &RMF_CAPA1, RCL_SERVER)) {
+ if ((req_capsule_has_field(pill, &RMF_CAPA2, RCL_SERVER) &&
+ !(body->valid & OBD_MD_FLMDSCAPA)) ||
+ (!req_capsule_has_field(pill, &RMF_CAPA2, RCL_SERVER) &&
+ !(body->valid & OBD_MD_FLMDSCAPA) &&
+ !(body->valid & OBD_MD_FLOSSCAPA)))
+ adjust += req_capsule_shrink(pill, &RMF_CAPA1,
+ 0, adjust, 1);
+ }
+ /* RMF_CAPA2 on server-side is for OBD_MD_FLOSSCAPA only. */
if ((req_capsule_has_field(pill, &RMF_CAPA2, RCL_SERVER) &&
!(body->valid & OBD_MD_FLOSSCAPA)))
adjust += req_capsule_shrink(pill, &RMF_CAPA2, 0, adjust, 0);
RETURN(0);
}
+static inline unsigned int attr_unpack(__u64 sa_valid) {
+ unsigned int ia_valid = 0;
+
+ if (sa_valid & MDS_ATTR_MODE)
+ ia_valid |= ATTR_MODE;
+ if (sa_valid & MDS_ATTR_UID)
+ ia_valid |= ATTR_UID;
+ if (sa_valid & MDS_ATTR_GID)
+ ia_valid |= ATTR_GID;
+ if (sa_valid & MDS_ATTR_SIZE)
+ ia_valid |= ATTR_SIZE;
+ if (sa_valid & MDS_ATTR_ATIME)
+ ia_valid |= ATTR_ATIME;
+ if (sa_valid & MDS_ATTR_MTIME)
+ ia_valid |= ATTR_MTIME;
+ if (sa_valid & MDS_ATTR_CTIME)
+ ia_valid |= ATTR_CTIME;
+ if (sa_valid & MDS_ATTR_ATIME_SET)
+ ia_valid |= ATTR_ATIME_SET;
+ if (sa_valid & MDS_ATTR_MTIME_SET)
+ ia_valid |= ATTR_MTIME_SET;
+ if (sa_valid & MDS_ATTR_FORCE)
+ ia_valid |= ATTR_FORCE;
+ if (sa_valid & MDS_ATTR_ATTR_FLAG)
+ ia_valid |= ATTR_ATTR_FLAG;
+ if (sa_valid & MDS_ATTR_KILL_SUID)
+ ia_valid |= ATTR_KILL_SUID;
+ if (sa_valid & MDS_ATTR_KILL_SGID)
+ ia_valid |= ATTR_KILL_SGID;
+ if (sa_valid & MDS_ATTR_CTIME_SET)
+ ia_valid |= ATTR_CTIME_SET;
+ if (sa_valid & MDS_ATTR_FROM_OPEN)
+ ia_valid |= ATTR_FROM_OPEN;
+ if (sa_valid & MDS_ATTR_BLOCKS)
+ ia_valid |= ATTR_BLOCKS;
+ return ia_valid;
+}
+
static __u64 mdt_attr_valid_xlate(__u64 in, struct mdt_reint_record *rr,
struct md_attr *ma)
{
uc->mu_suppgids[1] = -1;
rr->rr_fid1 = &rec->sa_fid;
- la->la_valid = mdt_attr_valid_xlate(rec->sa_valid, rr, ma);
+ la->la_valid = mdt_attr_valid_xlate(attr_unpack(rec->sa_valid), rr, ma);
la->la_mode = rec->sa_mode;
la->la_flags = rec->sa_attr_flags;
la->la_uid = rec->sa_uid;