include/asm-ppc64/bitops.h | 23 +++++++++++++++++++---- 1 files changed, 19 insertions(+), 4 deletions(-) diff -puN include/asm-ppc64/bitops.h~ext2-no-lock_super-fix-1 include/asm-ppc64/bitops.h --- 25-power4/include/asm-ppc64/bitops.h~ext2-no-lock_super-fix-1 2003-03-13 18:17:00.000000000 -0800 +++ 25-power4-akpm/include/asm-ppc64/bitops.h 2003-03-13 18:25:17.000000000 -0800 @@ -336,12 +336,27 @@ static __inline__ int __test_and_clear_l #define ext2_set_bit(nr,addr) \ __test_and_set_le_bit((nr),(unsigned long*)addr) -#define ext2_set_bit_atomic(lock, nr,addr) \ - test_and_set_le_bit((nr),(unsigned long*)addr) #define ext2_clear_bit(nr, addr) \ __test_and_clear_le_bit((nr),(unsigned long*)addr) -#define ext2_clear_bit_atomic(lock, nr, addr) \ - test_and_clear_le_bit((nr),(unsigned long*)addr) + +#define ext2_set_bit_atomic(lock, nr, addr) \ + ({ \ + int ret; \ + spin_lock(lock); \ + ret = ext2_set_bit((nr), (addr)); \ + spin_unlock(lock); \ + ret; \ + }) + +#define ext2_clear_bit_atomic(lock, nr, addr) \ + ({ \ + int ret; \ + spin_lock(lock); \ + ret = ext2_clear_bit((nr), (addr)); \ + spin_unlock(lock); \ + ret; \ + }) + #define ext2_test_bit(nr, addr) test_le_bit((nr),(unsigned long*)addr) #define ext2_find_first_zero_bit(addr, size) \ find_first_zero_le_bit((unsigned long*)addr, size) _