From 39f495a3e8390060af4793e2eb579490ddf3fdbf Mon Sep 17 00:00:00 2001 From: shadow Date: Tue, 8 Sep 2009 08:02:30 +0000 Subject: [PATCH] resolve race with saving updates into lov_objid file. Branch b1_8 b=20464 i=adilger i=green --- lnet/include/libcfs/bitmap.h | 8 +++++++- lnet/include/libcfs/user-bitops.h | 4 +++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/lnet/include/libcfs/bitmap.h b/lnet/include/libcfs/bitmap.h index 1d795de..a017b54 100644 --- a/lnet/include/libcfs/bitmap.h +++ b/lnet/include/libcfs/bitmap.h @@ -70,7 +70,7 @@ void cfs_bitmap_set(bitmap_t *bitmap, int nbit) static inline void cfs_bitmap_clear(bitmap_t *bitmap, int nbit) { - clear_bit(nbit, bitmap->data); + test_and_clear_bit(nbit, bitmap->data); } static inline @@ -79,6 +79,12 @@ int cfs_bitmap_check(bitmap_t *bitmap, int nbit) return test_bit(nbit, bitmap->data); } +static inline +int cfs_bitmap_test_and_clear(bitmap_t *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(bitmap_t *bitmap) diff --git a/lnet/include/libcfs/user-bitops.h b/lnet/include/libcfs/user-bitops.h index be248ab..641eb67 100644 --- a/lnet/include/libcfs/user-bitops.h +++ b/lnet/include/libcfs/user-bitops.h @@ -56,7 +56,7 @@ static __inline__ int set_bit(int nr, unsigned long *addr) } /* clear bit nr in bitmap addr; returns previous value of bit nr*/ -static __inline__ int clear_bit(int nr, unsigned long *addr) +static __inline__ int test_and_clear_bit(int nr, unsigned long *addr) { unsigned long mask; @@ -67,6 +67,8 @@ static __inline__ int clear_bit(int nr, unsigned long *addr) return nr; } +#define clear_bit(n, a) test_and_clear_bit(n, a) + static __inline__ int test_bit(int nr, const unsigned long *addr) { return ((1UL << (nr & (BITS_PER_LONG - 1))) & -- 1.8.3.1