ENTRY;
+intent:
rc = md_intent_lock(exp, op_data, it, reqp, cb_blocking,
extra_lock_flags);
+ CDEBUG(D_VFSTRACE,
+ "intent lock %d on i1 "DFID" suppgids %d %d: rc %d\n",
+ it->it_op, PFID(&op_data->op_fid1),
+ op_data->op_suppgids[0], op_data->op_suppgids[1], rc);
if (rc == -EACCES && tryagain && it->it_op & IT_OPEN &&
it_disposition(it, DISP_OPEN_DENY) && *reqp) {
struct mdt_body *body;
body = req_capsule_server_get(&(*reqp)->rq_pill, &RMF_MDT_BODY);
new_suppgid = body->mbo_gid;
+ CDEBUG(D_SEC, "new suppgid from body: %d\n", new_suppgid);
if (op_data->op_suppgids[0] == body->mbo_gid ||
op_data->op_suppgids[1] == body->mbo_gid ||
!in_group_p(make_kgid(&init_user_ns, body->mbo_gid))) {
new_suppgid = get_uc_group_from_acl(acl, accmode);
posix_acl_release(acl);
+ CDEBUG(D_SEC, "new suppgid from acl: %d\n",
+ new_suppgid);
if (new_suppgid == (__u32)__kgid_val(INVALID_GID))
GOTO(out, rc = -EACCES);
ptlrpc_req_finished(*reqp);
*reqp = NULL;
ll_intent_release(it);
- rc = md_intent_lock(exp, op_data, it, reqp, cb_blocking,
- extra_lock_flags);
+ tryagain = false;
+ goto intent;
}
out:
spin_unlock(&cache->uc_lock);
put_entry(cache, entry);
+ CDEBUG(D_OTHER,
+ "%s: INTERNAL refreshed entry for '%llu' with %d groups\n",
+ cache->uc_name, entry->ue_key, ngroups);
return 0;
}
* groups and all other groups already in cache
*/
if (!supp_in_ginfo[0] || !supp_in_ginfo[1]) {
+ CDEBUG(D_OTHER,
+ "%s: INTERNAL might add suppgids %d,%d for entry '%llu'\n",
+ cache->uc_name, uc->uc_suppgids[0],
+ uc->uc_suppgids[1], entry->ue_key);
+
ngroups += !supp_in_ginfo[0] + !supp_in_ginfo[1];
CFS_ALLOC_PTR_ARRAY(grouplist, ngroups);
if (grouplist == NULL)