 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)

_
