X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;f=lustre%2Fliblustre%2Flutil.c;h=63c4d216583dba2c0feaa2dbd428877ad06a2b43;hb=76772699e9276b0445ded4c24f17b5b687a38b63;hp=db203f37678210720e6f8068ae7626f5bd8ae38d;hpb=eff6881041de867dd4abd76bb65db3178e50204d;p=fs%2Flustre-release.git diff --git a/lustre/liblustre/lutil.c b/lustre/liblustre/lutil.c index db203f3..63c4d21 100644 --- a/lustre/liblustre/lutil.c +++ b/lustre/liblustre/lutil.c @@ -1,22 +1,37 @@ -/* -*- 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) 2004 Cluster File Systems, Inc. + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 only, + * as published by the Free Software Foundation. * - * This file is part of Lustre, http://www.lustre.org. + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License version 2 for more details (a copy is included + * in the LICENSE file that accompanied this code). * - * Lustre is free software; you can redistribute it and/or - * modify it under the terms of version 2 of the GNU General Public - * License as published by the Free Software Foundation. + * 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 * - * Lustre is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. + * 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. * - * You should have received a copy of the GNU General Public License - * along with Lustre; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + * GPL HEADER END + */ +/* + * Copyright (c) 2004, 2010, Oracle and/or its affiliates. All rights reserved. + * Use is subject to license terms. + * + * Copyright (c) 2011, Intel Corporation. + */ +/* + * This file is part of Lustre, http://www.lustre.org/ + * Lustre is a trademark of Sun Microsystems, Inc. */ #include @@ -32,7 +47,7 @@ #ifdef _AIX #include "syscall_AIX.h" #else -#include +#include #endif #include #ifdef HAVE_NETINET_IN_H @@ -42,15 +57,10 @@ #ifdef HAVE_ARPA_INET_H #include #endif -#ifdef HAVE_CATAMOUNT_DATA_H -#include -#endif #include "lutil.h" -unsigned int libcfs_subsystem_debug = ~0 - (S_LNET | S_LND); -unsigned int libcfs_debug = 0; struct task_struct *current; @@ -62,14 +72,6 @@ void *inter_module_get(char *arg) return ldlm_namespace_cleanup; else if (!strcmp(arg, "ldlm_replay_locks")) return ldlm_replay_locks; -#ifdef HAVE_QUOTA_SUPPORT - else if (!strcmp(arg, "osc_quota_interface")) - return &osc_quota_interface; - else if (!strcmp(arg, "mdc_quota_interface")) - return &mdc_quota_interface; - else if (!strcmp(arg, "lov_quota_interface")) - return &lov_quota_interface; -#endif else return NULL; } @@ -113,7 +115,8 @@ void liblustre_init_random() if (_rand_dev_fd >= 0) { if (syscall(SYS_read, _rand_dev_fd, &seed, sizeof(seed)) == sizeof(seed)) { - ll_srand(seed[0], seed[1]); + cfs_srand(seed[0], seed[1]); + syscall(SYS_close, _rand_dev_fd); return; } syscall(SYS_close, _rand_dev_fd); @@ -126,36 +129,10 @@ void liblustre_init_random() seed[0] = _my_pnid; #endif gettimeofday(&tv, NULL); - ll_srand(tv.tv_sec ^ __swab32(seed[0]), tv.tv_usec ^__swab32(getpid())); + cfs_srand(tv.tv_sec ^ __swab32(seed[0]), tv.tv_usec ^__swab32(getpid())); } -void get_random_bytes(void *buf, int size) -{ - int *p = buf; - int rem; - LASSERT(size >= 0); - - rem = min((unsigned long)buf & (sizeof(int) - 1), size); - if (rem) { - int val = ll_rand(); - memcpy(buf, &val, rem); - p = buf + rem; - size -= rem; - } - - while (size >= sizeof(int)) { - *p = ll_rand(); - size -= sizeof(int); - p++; - } - buf = p; - if (size) { - int val = ll_rand(); - memcpy(buf, &val, size); - } -} - -static void init_capability(int *res) +static void init_capability(__u32 *res) { #ifdef HAVE_LIBCAP cap_t syscap; @@ -192,7 +169,7 @@ static void init_capability(int *res) #endif } -int in_group_p(gid_t gid) +int cfs_curproc_is_in_groups(gid_t gid) { int i; @@ -217,6 +194,7 @@ int liblustre_init_current(char *comm) strncpy(current->comm, comm, sizeof(current->comm)); current->pid = getpid(); + current->gid = getgid(); current->fsuid = geteuid(); current->fsgid = getegid(); memset(¤t->pending, 0, sizeof(current->pending)); @@ -238,9 +216,32 @@ int liblustre_init_current(char *comm) return 0; } -void generate_random_uuid(unsigned char uuid_out[16]) +void cfs_cap_raise(cfs_cap_t cap) +{ + current->cap_effective |= (1 << cap); +} + +void cfs_cap_lower(cfs_cap_t cap) +{ + current->cap_effective &= ~(1 << cap); +} + +int cfs_cap_raised(cfs_cap_t cap) +{ + return current->cap_effective & (1 << cap); +} + +cfs_cap_t cfs_curproc_cap_pack(void) { + return cfs_current()->cap_effective; +} + +void cfs_curproc_cap_unpack(cfs_cap_t cap) { + cfs_current()->cap_effective = cap; +} + +int cfs_capable(cfs_cap_t cap) { - get_random_bytes(uuid_out, sizeof(uuid_out)); + return cfs_cap_raised(cap); } int init_lib_portals()