int lustre_in_group_p(struct lu_ucred *mu, gid_t grp) { int rc = 1; if (grp != mu->uc_fsgid) { struct group_info *group_info = NULL; if (mu->uc_ginfo || !mu->uc_identity || mu->uc_valid == UCRED_OLD) if (grp == mu->uc_suppgids[0] || grp == mu->uc_suppgids[1]) return 1; if (mu->uc_ginfo) group_info = mu->uc_ginfo; else if (mu->uc_identity) group_info = mu->uc_identity->mi_ginfo; if (!group_info) return 0; lustre_get_group_info(group_info); rc = lustre_groups_search(group_info, grp); lustre_put_group_info(group_info); } return rc; }
int lustre_in_group_p(struct lu_ucred *mu, gid_t grp) { int rc = 1; if (grp != mu->uc_fsgid) { struct group_info *group_info = NULL; if (mu->uc_ginfo || !mu->uc_identity || mu->uc_valid == UCRED_OLD) if (grp == mu->uc_suppgids[0] || grp == mu->uc_suppgids[1]) return 1; if (mu->uc_ginfo) group_info = mu->uc_ginfo; else if (mu->uc_identity) group_info = mu->uc_identity->mi_ginfo; if (!group_info) return 0; atomic_inc(&group_info->usage); rc = lustre_groups_search(group_info, grp); if (atomic_dec_and_test(&group_info->usage)) groups_free(group_info); } return rc; }