Whamcloud - gitweb
git://git.whamcloud.com
/
fs
/
lustre-release.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
LU-12691 ldlm: obd_max_recoverable_clients is not atomic
[fs/lustre-release.git]
/
lustre
/
obdclass
/
idmap.c
diff --git
a/lustre/obdclass/idmap.c
b/lustre/obdclass/idmap.c
index
6652f89
..
1fcbb2a
100644
(file)
--- a/
lustre/obdclass/idmap.c
+++ b/
lustre/obdclass/idmap.c
@@
-15,11
+15,7
@@
*
* You should have received a copy of the GNU General Public License
* version 2 along with this program; If not, see
*
* You should have received a copy of the GNU General Public License
* version 2 along with this program; If not, see
- * http://www.sun.com/software/products/lustre/docs/GPLv2.pdf
- *
- * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
- * CA 95054 USA or visit www.sun.com if you need additional information or
- * have any questions.
+ * http://www.gnu.org/licenses/gpl-2.0.html
*
* GPL HEADER END
*/
*
* GPL HEADER END
*/
@@
-27,7
+23,7
@@
* Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved.
* Use is subject to license terms.
*
* Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved.
* Use is subject to license terms.
*
- * Copyright (c) 2012, 201
4
, Intel Corporation.
+ * Copyright (c) 2012, 201
7
, Intel Corporation.
*/
/*
* This file is part of Lustre, http://www.lustre.org/
*/
/*
* This file is part of Lustre, http://www.lustre.org/
@@
-51,15
+47,6
@@
#include <md_object.h>
#include <obd_support.h>
#include <md_object.h>
#include <obd_support.h>
-#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.
/*
* groups_search() is copied from linux kernel!
* A simple bsearch.
@@
-91,6
+78,9
@@
static int lustre_groups_search(struct group_info *group_info,
void lustre_groups_from_list(struct group_info *ginfo, gid_t *glist)
{
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;
int i;
int count = ginfo->ngroups;
@@
-103,6
+93,7
@@
void lustre_groups_from_list(struct group_info *ginfo, gid_t *glist)
memcpy(ginfo->blocks[i], glist + off, len);
count -= cp_count;
}
memcpy(ginfo->blocks[i], glist + off, len);
count -= cp_count;
}
+#endif
}
EXPORT_SYMBOL(lustre_groups_from_list);
}
EXPORT_SYMBOL(lustre_groups_from_list);
@@
-110,12
+101,12
@@
EXPORT_SYMBOL(lustre_groups_from_list);
/* a simple shell-metzner sort */
void lustre_groups_sort(struct group_info *group_info)
{
/* 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;
while (stride) {
max = gidsetsize - stride;
@@
-162,9
+153,10
@@
int lustre_in_group_p(struct lu_ucred *mu, gid_t grp)
if (!group_info)
return 0;
if (!group_info)
return 0;
-
lustre_get_group_info(group_info
);
+
atomic_inc(&group_info->usage
);
rc = lustre_groups_search(group_info, grp);
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;
}
}
return rc;
}