X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;f=lustre%2Fptlrpc%2Fgss%2Fgss_rawobj.c;h=bb37c1a705fd903216af9d9f1393344d23ef37c3;hb=f625f670afbe954030ff81f0f8522137d6cdd335;hp=847cb4d38205ddb7e4c21b2d7be727d61cfb40c1;hpb=d2d56f38da01001c92a09afc6b52b5acbd9bc13c;p=fs%2Flustre-release.git diff --git a/lustre/ptlrpc/gss/gss_rawobj.c b/lustre/ptlrpc/gss/gss_rawobj.c index 847cb4d..bb37c1a 100644 --- a/lustre/ptlrpc/gss/gss_rawobj.c +++ b/lustre/ptlrpc/gss/gss_rawobj.c @@ -1,29 +1,47 @@ -/* -*- mode: c; c-basic-offset: 8; indent-tabs-mode: nil; -*- - * vim:expandtab:shiftwidth=8:tabstop=8: +/* + * GPL HEADER START * - * Copyright (C) 2004 Cluster File Systems, Inc. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * This file is part of Lustre, http://www.lustre.org. + * 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. * - * 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. + * 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 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. + * 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 * - * 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. + * 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. + * + * GPL HEADER END + */ +/* + * Copyright (c) 2007, 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. + * + * lustre/ptlrpc/gss/gss_rawobj.c + * + * Author: Eric Mei */ -#ifndef EXPORT_SYMTAB -# define EXPORT_SYMTAB -#endif #define DEBUG_SUBSYSTEM S_SEC +#include + #include #include #include @@ -31,6 +49,12 @@ #include "gss_internal.h" +int rawobj_empty(rawobj_t *obj) +{ + LASSERT(equi(obj->len, obj->data)); + return (obj->len == 0); +} + int rawobj_alloc(rawobj_t *obj, char *buf, int len) { LASSERT(obj); @@ -38,7 +62,7 @@ int rawobj_alloc(rawobj_t *obj, char *buf, int len) obj->len = len; if (len) { - OBD_ALLOC(obj->data, len); + OBD_ALLOC_LARGE(obj->data, len); if (!obj->data) { obj->len = 0; RETURN(-ENOMEM); @@ -55,7 +79,7 @@ void rawobj_free(rawobj_t *obj) if (obj->len) { LASSERT(obj->data); - OBD_FREE(obj->data, obj->len); + OBD_FREE_LARGE(obj->data, obj->len); obj->len = 0; obj->data = NULL; } else @@ -76,7 +100,7 @@ int rawobj_dup(rawobj_t *dest, rawobj_t *src) dest->len = src->len; if (dest->len) { - OBD_ALLOC(dest->data, dest->len); + OBD_ALLOC_LARGE(dest->data, dest->len); if (!dest->data) { dest->len = 0; return -ENOMEM; @@ -95,7 +119,7 @@ int rawobj_serialize(rawobj_t *obj, __u32 **buf, __u32 *buflen) LASSERT(buf); LASSERT(buflen); - len = size_round4(obj->len); + len = cfs_size_round4(obj->len); if (*buflen < 4 + len) { CERROR("buflen %u < %u\n", *buflen, 4 + len); @@ -130,7 +154,7 @@ static int __rawobj_extract(rawobj_t *obj, __u32 **buf, __u32 *buflen, return 0; } - len = local ? obj->len : size_round4(obj->len); + len = local ? obj->len : cfs_size_round4(obj->len); if (*buflen < len) { CERROR("buflen %u < %u\n", *buflen, len); obj->len = 0; @@ -140,7 +164,7 @@ static int __rawobj_extract(rawobj_t *obj, __u32 **buf, __u32 *buflen, if (!alloc) obj->data = (__u8 *) *buf; else { - OBD_ALLOC(obj->data, obj->len); + OBD_ALLOC_LARGE(obj->data, obj->len); if (!obj->data) { CERROR("fail to alloc %u bytes\n", obj->len); obj->len = 0; @@ -170,6 +194,11 @@ int rawobj_extract_local(rawobj_t *obj, __u32 **buf, __u32 *buflen) return __rawobj_extract(obj, buf, buflen, 0, 1); } +int rawobj_extract_local_alloc(rawobj_t *obj, __u32 **buf, __u32 *buflen) +{ + return __rawobj_extract(obj, buf, buflen, 1, 1); +} + int rawobj_from_netobj(rawobj_t *rawobj, netobj_t *netobj) { rawobj->len = netobj->len; @@ -185,7 +214,7 @@ int rawobj_from_netobj_alloc(rawobj_t *rawobj, netobj_t *netobj) if (netobj->len == 0) return 0; - OBD_ALLOC(rawobj->data, netobj->len); + OBD_ALLOC_LARGE(rawobj->data, netobj->len); if (rawobj->data == NULL) return -ENOMEM; @@ -193,3 +222,21 @@ int rawobj_from_netobj_alloc(rawobj_t *rawobj, netobj_t *netobj) memcpy(rawobj->data, netobj->data, netobj->len); return 0; } + +/**************************************** + * misc more * + ****************************************/ + +int buffer_extract_bytes(const void **buf, __u32 *buflen, + void *res, __u32 reslen) +{ + if (*buflen < reslen) { + CERROR("buflen %u < %u\n", *buflen, reslen); + return -EINVAL; + } + + memcpy(res, *buf, reslen); + *buf += reslen; + *buflen -= reslen; + return 0; +}