X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;ds=sidebyside;f=libcfs%2Finclude%2Flibcfs%2Fbitmap.h;h=b2bd5991632c750cef3725d6cf5551ed0d95dc72;hb=6621439c371e37268195d05fb3d6747c98c07bc5;hp=5991ccd14e7be1fac0f007152e95eb42ec7a97ad;hpb=9fb46705ae86aa2c0ac29427f0ff24f923560eb7;p=fs%2Flustre-release.git diff --git a/libcfs/include/libcfs/bitmap.h b/libcfs/include/libcfs/bitmap.h index 5991ccd..b2bd599 100644 --- a/libcfs/include/libcfs/bitmap.h +++ b/libcfs/include/libcfs/bitmap.h @@ -15,85 +15,94 @@ * * 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 */ /* * Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved. * Use is subject to license terms. + * + * Copyright (c) 2012, 2014, Intel Corporation. */ /* * This file is part of Lustre, http://www.lustre.org/ - * Lustre is a trademark of Sun Microsystems, Inc. */ #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;