X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;f=lustre%2Fobdclass%2Fidmap.c;h=f2d77ba65fcac7a8b674219ac54815a2168cd2b1;hb=a4f049b96562fd502b1948fb082767351e040a1c;hp=72edb60c1a6d4a128b2a17adc9f2b4f211407886;hpb=72057a3af19ee02d9a686bd7e7d074917e381310;p=fs%2Flustre-release.git diff --git a/lustre/obdclass/idmap.c b/lustre/obdclass/idmap.c index 72edb60..f2d77ba 100644 --- a/lustre/obdclass/idmap.c +++ b/lustre/obdclass/idmap.c @@ -23,7 +23,7 @@ * Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved. * Use is subject to license terms. * - * Copyright (c) 2012, 2014, Intel Corporation. + * Copyright (c) 2012, 2017, Intel Corporation. */ /* * This file is part of Lustre, http://www.lustre.org/ @@ -39,23 +39,13 @@ #define DEBUG_SUBSYSTEM S_SEC #include -#ifdef HAVE_UIDGID_HEADER -# include -#endif +#include + #include #include #include #include -#define lustre_get_group_info(group_info) do { \ - atomic_inc(&(group_info)->usage); \ -} while (0) - -#define lustre_put_group_info(group_info) do { \ - if (atomic_dec_and_test(&(group_info)->usage)) \ - groups_free(group_info); \ -} while (0) - /* * groups_search() is copied from linux kernel! * A simple bsearch. @@ -87,6 +77,9 @@ static int lustre_groups_search(struct group_info *group_info, void lustre_groups_from_list(struct group_info *ginfo, gid_t *glist) { +#ifdef HAVE_GROUP_INFO_GID + memcpy(ginfo->gid, glist, ginfo->ngroups * sizeof(__u32)); +#else int i; int count = ginfo->ngroups; @@ -99,6 +92,7 @@ void lustre_groups_from_list(struct group_info *ginfo, gid_t *glist) memcpy(ginfo->blocks[i], glist + off, len); count -= cp_count; } +#endif } EXPORT_SYMBOL(lustre_groups_from_list); @@ -106,12 +100,12 @@ EXPORT_SYMBOL(lustre_groups_from_list); /* a simple shell-metzner sort */ void lustre_groups_sort(struct group_info *group_info) { - int base, max, stride; - int gidsetsize = group_info->ngroups; + int base, max, stride; + int gidsetsize = group_info->ngroups; - for (stride = 1; stride < gidsetsize; stride = 3 * stride + 1) - ; /* nothing */ - stride /= 3; + for (stride = 1; stride < gidsetsize; stride = 3 * stride + 1) + ; /* nothing */ + stride /= 3; while (stride) { max = gidsetsize - stride; @@ -158,9 +152,10 @@ int lustre_in_group_p(struct lu_ucred *mu, gid_t grp) if (!group_info) return 0; - lustre_get_group_info(group_info); + atomic_inc(&group_info->usage); rc = lustre_groups_search(group_info, grp); - lustre_put_group_info(group_info); + if (atomic_dec_and_test(&group_info->usage)) + groups_free(group_info); } return rc; }