- __u64 out;
-
- out = 0;
- if (in & ATTR_MODE)
- out |= LA_MODE;
- if (in & ATTR_UID)
- out |= LA_UID;
- if (in & ATTR_GID)
- out |= LA_GID;
- if (in & ATTR_SIZE)
- out |= LA_SIZE;
- if (in & ATTR_BLOCKS)
- out |= LA_BLOCKS;
-
- if (in & ATTR_FROM_OPEN)
- rr->rr_flags |= MRF_SETATTR_LOCKED;
-
- if (in & ATTR_ATIME_SET)
- out |= LA_ATIME;
-
- if (in & ATTR_CTIME_SET)
- out |= LA_CTIME;
-
- if (in & ATTR_MTIME_SET)
- out |= LA_MTIME;
-
- if (in & ATTR_ATTR_FLAG)
- out |= LA_FLAGS;
-
- if (in & MDS_OPEN_OWNEROVERRIDE)
- ma->ma_attr_flags |= MDS_OPEN_OWNEROVERRIDE;
-
- if (in & (ATTR_KILL_SUID|ATTR_KILL_SGID))
- ma->ma_attr_flags |= MDS_PERM_BYPASS;
-
- /*XXX need ATTR_RAW?*/
- in &= ~(ATTR_MODE|ATTR_UID|ATTR_GID|ATTR_SIZE|ATTR_BLOCKS|
- ATTR_ATIME|ATTR_MTIME|ATTR_CTIME|ATTR_FROM_OPEN|
- ATTR_ATIME_SET|ATTR_CTIME_SET|ATTR_MTIME_SET|
- ATTR_ATTR_FLAG|ATTR_RAW|MDS_OPEN_OWNEROVERRIDE|
- ATTR_FORCE|ATTR_KILL_SUID|ATTR_KILL_SGID);
- if (in != 0)
- CERROR("Unknown attr bits: "LPX64"\n", in);
- return out;
+ __u64 out;
+
+ out = 0;
+ if (in & MDS_ATTR_MODE)
+ out |= LA_MODE;
+ if (in & MDS_ATTR_UID)
+ out |= LA_UID;
+ if (in & MDS_ATTR_GID)
+ out |= LA_GID;
+ if (in & MDS_ATTR_SIZE)
+ out |= LA_SIZE;
+ if (in & MDS_ATTR_BLOCKS)
+ out |= LA_BLOCKS;
+ if (in & MDS_ATTR_ATIME_SET)
+ out |= LA_ATIME;
+ if (in & MDS_ATTR_CTIME_SET)
+ out |= LA_CTIME;
+ if (in & MDS_ATTR_MTIME_SET)
+ out |= LA_MTIME;
+ if (in & MDS_ATTR_ATTR_FLAG)
+ out |= LA_FLAGS;
+ if (in & MDS_ATTR_KILL_SUID)
+ out |= LA_KILL_SUID;
+ if (in & MDS_ATTR_KILL_SGID)
+ out |= LA_KILL_SGID;
+
+ if (in & MDS_ATTR_FROM_OPEN)
+ rr->rr_flags |= MRF_OPEN_TRUNC;
+ if (in & MDS_OPEN_OWNEROVERRIDE)
+ ma->ma_attr_flags |= MDS_OWNEROVERRIDE;
+ if (in & MDS_ATTR_FORCE)
+ ma->ma_attr_flags |= MDS_PERM_BYPASS;
+
+ in &= ~(MDS_ATTR_MODE | MDS_ATTR_UID | MDS_ATTR_GID |
+ MDS_ATTR_ATIME | MDS_ATTR_MTIME | MDS_ATTR_CTIME |
+ MDS_ATTR_ATIME_SET | MDS_ATTR_CTIME_SET | MDS_ATTR_MTIME_SET |
+ MDS_ATTR_SIZE | MDS_ATTR_BLOCKS | MDS_ATTR_ATTR_FLAG |
+ MDS_ATTR_FORCE | MDS_ATTR_KILL_SUID | MDS_ATTR_KILL_SGID |
+ MDS_ATTR_FROM_OPEN | MDS_OPEN_OWNEROVERRIDE);
+ if (in != 0)
+ CERROR("Unknown attr bits: "LPX64"\n", in);
+ return out;
+}
+
+void mdt_set_capainfo(struct mdt_thread_info *info, int offset,
+ const struct lu_fid *fid, struct lustre_capa *capa)
+{
+ struct lu_capainfo *lci;
+
+ LASSERT(offset >= 0 && offset < LU_CAPAINFO_MAX);
+ if (!info->mti_mdt->mdt_lut.lut_mds_capa ||
+ !(exp_connect_flags(info->mti_exp) & OBD_CONNECT_MDS_CAPA))
+ return;
+
+ lci = lu_capainfo_get(info->mti_env);
+ LASSERT(lci);
+ lci->lci_fid[offset] = *fid;
+ lci->lci_capa[offset] = capa;
+}
+
+#ifdef DEBUG_CAPA
+void mdt_dump_capainfo(struct mdt_thread_info *info)
+{
+ struct lu_capainfo *lci = lu_capainfo_get(info->mti_env);
+ int i;
+
+ if (lci == NULL)
+ return;
+
+ for (i = 0; i < LU_CAPAINFO_MAX; i++) {
+ if (lci->lci_capa[i] == NULL) {
+ CERROR("no capa for index %d "DFID"\n",
+ i, PFID(&lci->lci_fid[i]));
+ continue;
+ }
+ if (lci->lci_capa[i] == BYPASS_CAPA) {
+ CERROR("bypass for index %d "DFID"\n",
+ i, PFID(&lci->lci_fid[i]));
+ continue;
+ }
+ DEBUG_CAPA(D_ERROR, lci->lci_capa[i], "index %d", i);
+ }