X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;f=libcfs%2Finclude%2Flibcfs%2Fbitmap.h;h=b4782c4b51094391df55b7fa91df46cdf8a0444c;hb=9013eb2bb5492b1e8321d0ed534bee566f19627b;hp=4c86e8cbf2c0421209e44ef26661b52ddf0fccc0;hpb=08aa217ce49aba1ded52e0f7adb8a607035123fd;p=fs%2Flustre-release.git diff --git a/libcfs/include/libcfs/bitmap.h b/libcfs/include/libcfs/bitmap.h index 4c86e8c..b4782c4 100644 --- a/libcfs/include/libcfs/bitmap.h +++ b/libcfs/include/libcfs/bitmap.h @@ -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 - * 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 */ @@ -27,7 +23,7 @@ * Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved. * Use is subject to license terms. * - * Copyright (c) 2012, Intel Corporation. + * Copyright (c) 2012, 2014, Intel Corporation. */ /* * This file is part of Lustre, http://www.lustre.org/ @@ -36,66 +32,78 @@ #ifndef _LIBCFS_BITMAP_H_ #define _LIBCFS_BITMAP_H_ +#include +#include -typedef struct { - int size; - unsigned long data[0]; -} cfs_bitmap_t; +struct cfs_bitmap { + unsigned int size; + unsigned long data[0]; +}; #define CFS_BITMAP_SIZE(nbits) \ - (((nbits/BITS_PER_LONG)+1)*sizeof(long)+sizeof(cfs_bitmap_t)) + (BITS_TO_LONGS(nbits) * sizeof(long) + sizeof(struct cfs_bitmap)) static inline -cfs_bitmap_t *CFS_ALLOCATE_BITMAP(int size) +struct cfs_bitmap *CFS_ALLOCATE_BITMAP(int size) { - cfs_bitmap_t *ptr; + struct cfs_bitmap *ptr; + + LIBCFS_ALLOC(ptr, CFS_BITMAP_SIZE(size)); + if (ptr == NULL) + RETURN(ptr); - OBD_ALLOC(ptr, CFS_BITMAP_SIZE(size)); - if (ptr == NULL) - RETURN(ptr); + ptr->size = size; - ptr->size = size; + RETURN(ptr); +} + +static inline void CFS_RESET_BITMAP(struct cfs_bitmap *bitmap) +{ + if (bitmap->size > 0) { + int nbits = bitmap->size; - RETURN (ptr); + memset(bitmap, 0, CFS_BITMAP_SIZE(nbits)); + bitmap->size = nbits; + } } -#define CFS_FREE_BITMAP(ptr) OBD_FREE(ptr, CFS_BITMAP_SIZE(ptr->size)) +#define CFS_FREE_BITMAP(ptr) LIBCFS_FREE(ptr, CFS_BITMAP_SIZE(ptr->size)) static inline -void cfs_bitmap_set(cfs_bitmap_t *bitmap, int nbit) +void cfs_bitmap_set(struct cfs_bitmap *bitmap, int nbit) { set_bit(nbit, bitmap->data); } static inline -void cfs_bitmap_clear(cfs_bitmap_t *bitmap, int nbit) +void cfs_bitmap_clear(struct cfs_bitmap *bitmap, int nbit) { test_and_clear_bit(nbit, bitmap->data); } static inline -int cfs_bitmap_check(cfs_bitmap_t *bitmap, int nbit) +int cfs_bitmap_check(struct cfs_bitmap *bitmap, int nbit) { return test_bit(nbit, bitmap->data); } static inline -int cfs_bitmap_test_and_clear(cfs_bitmap_t *bitmap, int nbit) +int cfs_bitmap_test_and_clear(struct cfs_bitmap *bitmap, int nbit) { return test_and_clear_bit(nbit, bitmap->data); } /* return 0 is bitmap has none set bits */ static inline -int cfs_bitmap_check_empty(cfs_bitmap_t *bitmap) +int cfs_bitmap_check_empty(struct cfs_bitmap *bitmap) { return find_first_bit(bitmap->data, bitmap->size) == bitmap->size; } static inline -void cfs_bitmap_copy(cfs_bitmap_t *new, cfs_bitmap_t *old) +void cfs_bitmap_copy(struct cfs_bitmap *new, struct cfs_bitmap *old) { - int newsize; + size_t newsize; LASSERT(new->size >= old->size); newsize = new->size;