X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;f=libcfs%2Finclude%2Flibcfs%2Fbitmap.h;h=1763da296244d225bfac5f0e6dbe90c0457dfe7b;hb=1658ae30a0e97e7f4018d8cba67e459078470d1a;hp=940e3be491873c2fb11e4b041e32aa50f0636c0d;hpb=e3a7c58aebafce40323db54bf6056029e5af4a70;p=fs%2Flustre-release.git diff --git a/libcfs/include/libcfs/bitmap.h b/libcfs/include/libcfs/bitmap.h index 940e3be..1763da2 100644 --- a/libcfs/include/libcfs/bitmap.h +++ b/libcfs/include/libcfs/bitmap.h @@ -15,17 +15,15 @@ * * 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/ @@ -34,65 +32,89 @@ #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)) + (((nbits / BITS_PER_LONG) + 1) * 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) { - cfs_set_bit(nbit, bitmap->data); + 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) { - cfs_test_and_clear_bit(nbit, bitmap->data); + 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 cfs_test_bit(nbit, bitmap->data); + 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 cfs_test_and_clear_bit(nbit, bitmap->data); + 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 cfs_find_first_bit(bitmap->data, bitmap->size) == bitmap->size; + return find_first_bit(bitmap->data, bitmap->size) == bitmap->size; +} + +static inline +void cfs_bitmap_copy(struct cfs_bitmap *new, struct cfs_bitmap *old) +{ + size_t newsize; + + LASSERT(new->size >= old->size); + newsize = new->size; + memcpy(new, old, CFS_BITMAP_SIZE(old->size)); + new->size = newsize; } -#define cfs_foreach_bit(bitmap, pos) \ - for((pos)=cfs_find_first_bit((bitmap)->data, bitmap->size); \ - (pos) < (bitmap)->size; \ - (pos) = cfs_find_next_bit((bitmap)->data, (bitmap)->size, (pos))) +#define cfs_foreach_bit(bitmap, pos) \ + for ((pos) = find_first_bit((bitmap)->data, bitmap->size); \ + (pos) < (bitmap)->size; \ + (pos) = find_next_bit((bitmap)->data, (bitmap)->size, (pos) + 1)) #endif