-/* -*- mode: c; c-basic-offset: 8; indent-tabs-mode: nil; -*-
- * vim:expandtab:shiftwidth=8:tabstop=8:
- *
+/*
* GPL HEADER START
*
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
/*
* Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved.
* Use is subject to license terms.
+ *
+ * Copyright (c) 2012, Intel Corporation.
*/
/*
* This file is part of Lustre, http://www.lustre.org/
* Author: Fan Yong <fanyong@clusterfs.com>
*/
-#ifndef EXPORT_SYMTAB
-# define EXPORT_SYMTAB
-#endif
-
#define DEBUG_SUBSYSTEM S_SEC
#include <lustre_idmap.h>
+#include <md_object.h>
#include <obd_support.h>
#define lustre_get_group_info(group_info) do { \
}
EXPORT_SYMBOL(lustre_groups_sort);
-int lustre_in_group_p(struct md_ucred *mu, gid_t grp)
+int lustre_in_group_p(struct lu_ucred *mu, gid_t grp)
{
- int rc = 1;
-
- if (grp != mu->mu_fsgid) {
- cfs_group_info_t *group_info = NULL;
-
- if (mu->mu_ginfo || !mu->mu_identity ||
- mu->mu_valid == UCRED_OLD)
- if (grp == mu->mu_suppgids[0] ||
- grp == mu->mu_suppgids[1])
- return 1;
-
- if (mu->mu_ginfo)
- group_info = mu->mu_ginfo;
- else if (mu->mu_identity)
- group_info = mu->mu_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 rc = 1;
+
+ if (grp != mu->uc_fsgid) {
+ cfs_group_info_t *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;
}
EXPORT_SYMBOL(lustre_in_group_p);
}
int lustre_idmap_add(struct lustre_idmap_table *t,
- uid_t ruid, uid_t luid,
- gid_t rgid, gid_t lgid)
+ uid_t ruid, uid_t luid,
+ gid_t rgid, gid_t lgid)
{
- struct lustre_idmap_entry *e0, *e1;
+ struct lustre_idmap_entry *e0, *e1;
- LASSERT(t);
+ LASSERT(t);
- cfs_spin_lock(&t->lit_lock);
- e0 = idmap_search_entry(t, ruid, luid, rgid, lgid);
- cfs_spin_unlock(&t->lit_lock);
- if (!e0) {
- e0 = idmap_entry_alloc(ruid, luid, rgid, lgid);
- if (!e0)
- return -ENOMEM;
+ spin_lock(&t->lit_lock);
+ e0 = idmap_search_entry(t, ruid, luid, rgid, lgid);
+ spin_unlock(&t->lit_lock);
+ if (!e0) {
+ e0 = idmap_entry_alloc(ruid, luid, rgid, lgid);
+ if (!e0)
+ return -ENOMEM;
- cfs_spin_lock(&t->lit_lock);
+ spin_lock(&t->lit_lock);
e1 = idmap_search_entry(t, ruid, luid, rgid, lgid);
if (e1 == NULL) {
cfs_list_add_tail(&e0->lie_rmt_uid_hash,
&t->lit_idmaps[LCL_GIDMAP_IDX]
[lustre_idmap_hashfunc(lgid)]);
}
- cfs_spin_unlock(&t->lit_lock);
+ spin_unlock(&t->lit_lock);
if (e1 != NULL) {
idmap_entry_free(e0);
if (IS_ERR(e1))
uid_t ruid, uid_t luid,
gid_t rgid, gid_t lgid)
{
- struct lustre_idmap_entry *e;
- int rc = 0;
+ struct lustre_idmap_entry *e;
+ int rc = 0;
- LASSERT(t);
+ LASSERT(t);
- cfs_spin_lock(&t->lit_lock);
- e = idmap_search_entry(t, ruid, luid, rgid, lgid);
- if (IS_ERR(e))
- rc = PTR_ERR(e);
- else if (e)
- idmap_entry_free(e);
- cfs_spin_unlock(&t->lit_lock);
+ spin_lock(&t->lit_lock);
+ e = idmap_search_entry(t, ruid, luid, rgid, lgid);
+ if (IS_ERR(e))
+ rc = PTR_ERR(e);
+ else if (e)
+ idmap_entry_free(e);
+ spin_unlock(&t->lit_lock);
- return rc;
+ return rc;
}
EXPORT_SYMBOL(lustre_idmap_del);
-int lustre_idmap_lookup_uid(struct md_ucred *mu,
- struct lustre_idmap_table *t,
- int reverse, uid_t uid)
+int lustre_idmap_lookup_uid(struct lu_ucred *mu,
+ struct lustre_idmap_table *t,
+ int reverse, uid_t uid)
{
- cfs_list_t *hash;
-
- if (mu && (mu->mu_valid == UCRED_OLD || mu->mu_valid == UCRED_NEW)) {
- if (!reverse) {
- if (uid == mu->mu_o_uid)
- return mu->mu_uid;
- else if (uid == mu->mu_o_fsuid)
- return mu->mu_fsuid;
- } else {
- if (uid == mu->mu_uid)
- return mu->mu_o_uid;
- else if (uid == mu->mu_fsuid)
- return mu->mu_o_fsuid;
- }
- }
+ cfs_list_t *hash;
+
+ if (mu && (mu->uc_valid == UCRED_OLD || mu->uc_valid == UCRED_NEW)) {
+ if (!reverse) {
+ if (uid == mu->uc_o_uid)
+ return mu->uc_uid;
+ else if (uid == mu->uc_o_fsuid)
+ return mu->uc_fsuid;
+ } else {
+ if (uid == mu->uc_uid)
+ return mu->uc_o_uid;
+ else if (uid == mu->uc_fsuid)
+ return mu->uc_o_fsuid;
+ }
+ }
if (t == NULL)
return CFS_IDMAP_NOTFOUND;
hash = t->lit_idmaps[reverse ? LCL_UIDMAP_IDX : RMT_UIDMAP_IDX];
- cfs_spin_lock(&t->lit_lock);
- uid = idmap_lookup_uid(hash, reverse, uid);
- cfs_spin_unlock(&t->lit_lock);
+ spin_lock(&t->lit_lock);
+ uid = idmap_lookup_uid(hash, reverse, uid);
+ spin_unlock(&t->lit_lock);
- return uid;
+ return uid;
}
EXPORT_SYMBOL(lustre_idmap_lookup_uid);
-int lustre_idmap_lookup_gid(struct md_ucred *mu, struct lustre_idmap_table *t,
- int reverse, gid_t gid)
+int lustre_idmap_lookup_gid(struct lu_ucred *mu, struct lustre_idmap_table *t,
+ int reverse, gid_t gid)
{
- cfs_list_t *hash;
-
- if (mu && (mu->mu_valid == UCRED_OLD || mu->mu_valid == UCRED_NEW)) {
- if (!reverse) {
- if (gid == mu->mu_o_gid)
- return mu->mu_gid;
- else if (gid == mu->mu_o_fsgid)
- return mu->mu_fsgid;
- } else {
- if (gid == mu->mu_gid)
- return mu->mu_o_gid;
- else if (gid == mu->mu_fsgid)
- return mu->mu_o_fsgid;
- }
- }
+ cfs_list_t *hash;
+
+ if (mu && (mu->uc_valid == UCRED_OLD || mu->uc_valid == UCRED_NEW)) {
+ if (!reverse) {
+ if (gid == mu->uc_o_gid)
+ return mu->uc_gid;
+ else if (gid == mu->uc_o_fsgid)
+ return mu->uc_fsgid;
+ } else {
+ if (gid == mu->uc_gid)
+ return mu->uc_o_gid;
+ else if (gid == mu->uc_fsgid)
+ return mu->uc_o_fsgid;
+ }
+ }
if (t == NULL)
return CFS_IDMAP_NOTFOUND;
hash = t->lit_idmaps[reverse ? LCL_GIDMAP_IDX : RMT_GIDMAP_IDX];
- cfs_spin_lock(&t->lit_lock);
- gid = idmap_lookup_gid(hash, reverse, gid);
- cfs_spin_unlock(&t->lit_lock);
+ spin_lock(&t->lit_lock);
+ gid = idmap_lookup_gid(hash, reverse, gid);
+ spin_unlock(&t->lit_lock);
- return gid;
+ return gid;
}
EXPORT_SYMBOL(lustre_idmap_lookup_gid);
if(unlikely(t == NULL))
return (ERR_PTR(-ENOMEM));
- cfs_spin_lock_init(&t->lit_lock);
- for (i = 0; i < ARRAY_SIZE(t->lit_idmaps); i++)
- for (j = 0; j < ARRAY_SIZE(t->lit_idmaps[i]); j++)
- CFS_INIT_LIST_HEAD(&t->lit_idmaps[i][j]);
+ spin_lock_init(&t->lit_lock);
+ for (i = 0; i < ARRAY_SIZE(t->lit_idmaps); i++)
+ for (j = 0; j < ARRAY_SIZE(t->lit_idmaps[i]); j++)
+ CFS_INIT_LIST_HEAD(&t->lit_idmaps[i][j]);
- return t;
+ return t;
}
EXPORT_SYMBOL(lustre_idmap_init);
LASSERT(t);
list = t->lit_idmaps[RMT_UIDMAP_IDX];
- cfs_spin_lock(&t->lit_lock);
- for (i = 0; i < CFS_IDMAP_HASHSIZE; i++)
- while (!cfs_list_empty(&list[i])) {
- e = cfs_list_entry(list[i].next,
- struct lustre_idmap_entry,
- lie_rmt_uid_hash);
- idmap_entry_free(e);
- }
- cfs_spin_unlock(&t->lit_lock);
-
- OBD_FREE_PTR(t);
+ spin_lock(&t->lit_lock);
+ for (i = 0; i < CFS_IDMAP_HASHSIZE; i++)
+ while (!cfs_list_empty(&list[i])) {
+ e = cfs_list_entry(list[i].next,
+ struct lustre_idmap_entry,
+ lie_rmt_uid_hash);
+ idmap_entry_free(e);
+ }
+ spin_unlock(&t->lit_lock);
+
+ OBD_FREE_PTR(t);
}
EXPORT_SYMBOL(lustre_idmap_fini);