+ if (it != NULL && (it->it_op == IT_GETATTR || it->it_op == IT_LOOKUP ||
+ it->it_op == IT_LAYOUT || it->it_op == IT_READDIR))
+ goto out;
+
+ if (lck->rpcl_it == MDC_FAKE_RPCL_IT) { /* OBD_FAIL_MDC_RPCS_SEM */
+ mutex_lock(&lck->rpcl_mutex);
+
+ LASSERTF(lck->rpcl_fakes > 0, "%d\n", lck->rpcl_fakes);
+ lck->rpcl_fakes--;
+
+ if (lck->rpcl_fakes == 0)
+ lck->rpcl_it = NULL;
+
+ } else {
+ LASSERTF(it == lck->rpcl_it, "%p != %p\n", it, lck->rpcl_it);
+ lck->rpcl_it = NULL;
+ }
+
+ mutex_unlock(&lck->rpcl_mutex);
+ out:
+ EXIT;
+}
+
+/* Update the maximum observed easize and cookiesize. The default easize
+ * and cookiesize is initialized to the minimum value but allowed to grow
+ * up to a single page in size if required to handle the common case.
+ */
+static inline void mdc_update_max_ea_from_body(struct obd_export *exp,
+ struct mdt_body *body)
+{
+ if (body->mbo_valid & OBD_MD_FLMODEASIZE) {
+ struct client_obd *cli = &exp->exp_obd->u.cli;
+
+ if (cli->cl_max_mds_easize < body->mbo_max_mdsize) {
+ cli->cl_max_mds_easize = body->mbo_max_mdsize;
+ cli->cl_default_mds_easize =
+ min_t(__u32, body->mbo_max_mdsize,
+ PAGE_CACHE_SIZE);
+ }
+ if (cli->cl_max_mds_cookiesize < body->mbo_max_cookiesize) {
+ cli->cl_max_mds_cookiesize = body->mbo_max_cookiesize;
+ cli->cl_default_mds_cookiesize =
+ min_t(__u32, body->mbo_max_cookiesize,
+ PAGE_CACHE_SIZE);
+ }
+ }