Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 67b0ad57 authored by Akinobu Mita's avatar Akinobu Mita Committed by Linus Torvalds
Browse files

[PATCH] bitops: use non atomic operations for minix_*_bit() and ext2_*_bit()



Bitmap functions for the minix filesystem and the ext2 filesystem except
ext2_set_bit_atomic() and ext2_clear_bit_atomic() do not require the atomic
guarantees.

But these are defined by using atomic bit operations on several architectures.
 (cris, frv, h8300, ia64, m32r, m68k, m68knommu, mips, s390, sh, sh64, sparc,
sparc64, v850, and xtensa)

This patch switches to non atomic bit operation.

Signed-off-by: default avatarAkinobu Mita <mita@miraclelinux.com>
Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent 72b61a3c
Loading
Loading
Loading
Loading
+4 −4
Original line number Original line Diff line number Diff line
@@ -352,17 +352,17 @@ static __inline__ int find_next_bit(const unsigned long *addr, int size, int off
#define find_first_bit(addr, size) \
#define find_first_bit(addr, size) \
        find_next_bit((addr), (size), 0)
        find_next_bit((addr), (size), 0)


#define ext2_set_bit                 test_and_set_bit
#define ext2_set_bit                 __test_and_set_bit
#define ext2_set_bit_atomic(l,n,a)   test_and_set_bit(n,a)
#define ext2_set_bit_atomic(l,n,a)   test_and_set_bit(n,a)
#define ext2_clear_bit               test_and_clear_bit
#define ext2_clear_bit               __test_and_clear_bit
#define ext2_clear_bit_atomic(l,n,a) test_and_clear_bit(n,a)
#define ext2_clear_bit_atomic(l,n,a) test_and_clear_bit(n,a)
#define ext2_test_bit                test_bit
#define ext2_test_bit                test_bit
#define ext2_find_first_zero_bit     find_first_zero_bit
#define ext2_find_first_zero_bit     find_first_zero_bit
#define ext2_find_next_zero_bit      find_next_zero_bit
#define ext2_find_next_zero_bit      find_next_zero_bit


/* Bitmap functions for the minix filesystem.  */
/* Bitmap functions for the minix filesystem.  */
#define minix_set_bit(nr,addr) test_and_set_bit(nr,addr)
#define minix_set_bit(nr,addr) __test_and_set_bit(nr,addr)
#define minix_clear_bit(nr,addr) test_and_clear_bit(nr,addr)
#define minix_clear_bit(nr,addr) __test_and_clear_bit(nr,addr)
#define minix_test_bit(nr,addr) test_bit(nr,addr)
#define minix_test_bit(nr,addr) test_bit(nr,addr)
#define minix_find_first_zero_bit(addr,size) find_first_zero_bit(addr,size)
#define minix_find_first_zero_bit(addr,size) find_first_zero_bit(addr,size)


+7 −7
Original line number Original line Diff line number Diff line
@@ -259,11 +259,11 @@ static inline int sched_find_first_bit(const unsigned long *b)
#define hweight16(x) generic_hweight16(x)
#define hweight16(x) generic_hweight16(x)
#define hweight8(x) generic_hweight8(x)
#define hweight8(x) generic_hweight8(x)


#define ext2_set_bit(nr, addr)		test_and_set_bit  ((nr) ^ 0x18, (addr))
#define ext2_set_bit(nr, addr)		__test_and_set_bit  ((nr) ^ 0x18, (addr))
#define ext2_clear_bit(nr, addr)	test_and_clear_bit((nr) ^ 0x18, (addr))
#define ext2_clear_bit(nr, addr)	__test_and_clear_bit((nr) ^ 0x18, (addr))


#define ext2_set_bit_atomic(lock,nr,addr)	ext2_set_bit((nr), addr)
#define ext2_set_bit_atomic(lock,nr,addr)	test_and_set_bit  ((nr) ^ 0x18, (addr))
#define ext2_clear_bit_atomic(lock,nr,addr)	ext2_clear_bit((nr), addr)
#define ext2_clear_bit_atomic(lock,nr,addr)	test_and_clear_bit((nr) ^ 0x18, (addr))


static inline int ext2_test_bit(int nr, const volatile void * addr)
static inline int ext2_test_bit(int nr, const volatile void * addr)
{
{
@@ -331,9 +331,9 @@ static inline unsigned long ext2_find_next_zero_bit(const void *addr,
}
}


/* Bitmap functions for the minix filesystem.  */
/* Bitmap functions for the minix filesystem.  */
#define minix_test_and_set_bit(nr,addr)		ext2_set_bit(nr,addr)
#define minix_test_and_set_bit(nr,addr)		__test_and_set_bit  ((nr) ^ 0x18, (addr))
#define minix_set_bit(nr,addr)			ext2_set_bit(nr,addr)
#define minix_set_bit(nr,addr)			__set_bit((nr) ^ 0x18, (addr))
#define minix_test_and_clear_bit(nr,addr)	ext2_clear_bit(nr,addr)
#define minix_test_and_clear_bit(nr,addr)	__test_and_clear_bit((nr) ^ 0x18, (addr))
#define minix_test_bit(nr,addr)			ext2_test_bit(nr,addr)
#define minix_test_bit(nr,addr)			ext2_test_bit(nr,addr)
#define minix_find_first_zero_bit(addr,size)	ext2_find_first_zero_bit(addr,size)
#define minix_find_first_zero_bit(addr,size)	ext2_find_first_zero_bit(addr,size)


+3 −3
Original line number Original line Diff line number Diff line
@@ -397,9 +397,9 @@ static __inline__ unsigned long ext2_find_next_zero_bit(void *addr, unsigned lon
}
}


/* Bitmap functions for the minix filesystem.  */
/* Bitmap functions for the minix filesystem.  */
#define minix_test_and_set_bit(nr,addr) test_and_set_bit(nr,addr)
#define minix_test_and_set_bit(nr,addr) __test_and_set_bit(nr,addr)
#define minix_set_bit(nr,addr) set_bit(nr,addr)
#define minix_set_bit(nr,addr) __set_bit(nr,addr)
#define minix_test_and_clear_bit(nr,addr) test_and_clear_bit(nr,addr)
#define minix_test_and_clear_bit(nr,addr) __test_and_clear_bit(nr,addr)
#define minix_test_bit(nr,addr) test_bit(nr,addr)
#define minix_test_bit(nr,addr) test_bit(nr,addr)
#define minix_find_first_zero_bit(addr,size) find_first_zero_bit(addr,size)
#define minix_find_first_zero_bit(addr,size) find_first_zero_bit(addr,size)


+5 −5
Original line number Original line Diff line number Diff line
@@ -394,18 +394,18 @@ extern int __find_next_bit(const void *addr, unsigned long size,


#define __clear_bit(nr, addr)		clear_bit(nr, addr)
#define __clear_bit(nr, addr)		clear_bit(nr, addr)


#define ext2_set_bit			test_and_set_bit
#define ext2_set_bit			__test_and_set_bit
#define ext2_set_bit_atomic(l,n,a)	test_and_set_bit(n,a)
#define ext2_set_bit_atomic(l,n,a)	test_and_set_bit(n,a)
#define ext2_clear_bit			test_and_clear_bit
#define ext2_clear_bit			__test_and_clear_bit
#define ext2_clear_bit_atomic(l,n,a)	test_and_clear_bit(n,a)
#define ext2_clear_bit_atomic(l,n,a)	test_and_clear_bit(n,a)
#define ext2_test_bit			test_bit
#define ext2_test_bit			test_bit
#define ext2_find_first_zero_bit	find_first_zero_bit
#define ext2_find_first_zero_bit	find_first_zero_bit
#define ext2_find_next_zero_bit		find_next_zero_bit
#define ext2_find_next_zero_bit		find_next_zero_bit


/* Bitmap functions for the minix filesystem.  */
/* Bitmap functions for the minix filesystem.  */
#define minix_test_and_set_bit(nr,addr)		test_and_set_bit(nr,addr)
#define minix_test_and_set_bit(nr,addr)		__test_and_set_bit(nr,addr)
#define minix_set_bit(nr,addr)			set_bit(nr,addr)
#define minix_set_bit(nr,addr)			__set_bit(nr,addr)
#define minix_test_and_clear_bit(nr,addr)	test_and_clear_bit(nr,addr)
#define minix_test_and_clear_bit(nr,addr)	__test_and_clear_bit(nr,addr)
#define minix_test_bit(nr,addr)			test_bit(nr,addr)
#define minix_test_bit(nr,addr)			test_bit(nr,addr)
#define minix_find_first_zero_bit(addr,size)	find_first_zero_bit(addr,size)
#define minix_find_first_zero_bit(addr,size)	find_first_zero_bit(addr,size)


+1 −1
Original line number Original line Diff line number Diff line
@@ -575,7 +575,7 @@ static inline unsigned long find_next_bit(const unsigned long *addr,
 */
 */


#ifdef __LITTLE_ENDIAN__
#ifdef __LITTLE_ENDIAN__
#define ext2_set_bit			test_and_set_bit
#define ext2_set_bit			__test_and_set_bit
#define ext2_clear_bit			__test_and_clear_bit
#define ext2_clear_bit			__test_and_clear_bit
#define ext2_test_bit			test_bit
#define ext2_test_bit			test_bit
#define ext2_find_first_zero_bit	find_first_zero_bit
#define ext2_find_first_zero_bit	find_first_zero_bit
Loading