/usr/src/kernel-patches/lustre/patches/bitops_ext2_find_next_le_bit-2.6.patch is in linux-patch-lustre 1.8.5+dfsg-3ubuntu1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 | Index: linux-2.6.9/include/asm-i386/bitops.h
===================================================================
--- linux-2.6.9.orig/include/asm-i386/bitops.h 2004-10-19 05:54:37.000000000 +0800
+++ linux-2.6.9/include/asm-i386/bitops.h 2006-09-01 14:04:19.000000000 +0800
@@ -448,6 +448,8 @@
find_first_zero_bit((unsigned long*)addr, size)
#define ext2_find_next_zero_bit(addr, size, off) \
find_next_zero_bit((unsigned long*)addr, size, off)
+#define ext2_find_next_le_bit(addr, size, off) \
+ find_next_bit((unsigned long*)(addr), (size), (off))
/* Bitmap functions for the minix filesystem. */
#define minix_test_and_set_bit(nr,addr) __test_and_set_bit(nr,(void*)addr)
Index: linux-2.6.9/include/asm-x86_64/bitops.h
===================================================================
--- linux-2.6.9.orig/include/asm-x86_64/bitops.h 2004-10-19 05:53:51.000000000 +0800
+++ linux-2.6.9/include/asm-x86_64/bitops.h 2006-09-01 14:04:19.000000000 +0800
@@ -399,6 +399,8 @@
find_first_zero_bit((unsigned long*)addr, size)
#define ext2_find_next_zero_bit(addr, size, off) \
find_next_zero_bit((unsigned long*)addr, size, off)
+#define ext2_find_next_le_bit(addr, size, off) \
+ find_next_bit((unsigned long*)(addr), (size), (off))
/* Bitmap functions for the minix filesystem. */
#define minix_test_and_set_bit(nr,addr) __test_and_set_bit(nr,(void*)addr)
Index: linux-2.6.9/include/asm-ia64/bitops.h
===================================================================
--- linux-2.6.9.orig/include/asm-ia64/bitops.h 2004-10-19 05:55:07.000000000 +0800
+++ linux-2.6.9/include/asm-ia64/bitops.h 2006-09-01 14:04:19.000000000 +0800
@@ -387,6 +387,8 @@
#define ext2_test_bit test_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_le_bit(addr, size, off) \
+ __find_next_bit((addr), (size), (off))
/* Bitmap functions for the minix filesystem. */
#define minix_test_and_set_bit(nr,addr) test_and_set_bit(nr,addr)
Index: linux-2.6.9/include/asm-ppc/bitops.h
===================================================================
--- linux-2.6.9.orig/include/asm-ppc/bitops.h 2004-10-19 05:54:08.000000000 +0800
+++ linux-2.6.9/include/asm-ppc/bitops.h 2006-09-01 14:04:35.000000000 +0800
@@ -449,6 +449,47 @@
return result + ffz(tmp);
}
+#define ext2_find_next_le_bit(addr, size, off) \
+ generic_find_next_le_bit((addr), (size), (off))
+
+static __inline__ unsigned long generic_find_next_le_bit(const void *addr,
+ unsigned long size, unsigned long offset)
+{
+ unsigned int *p = ((unsigned int*) addr) + (offset >> 5);
+ unsigned int result = offset & ~31UL;
+ unsigned int tmp;
+
+ if (offset >= size)
+ return size;
+ size -= result;
+ offset &= 31UL;
+ if (offset) {
+ tmp = cpu_to_le32p(p++);
+ tmp &= ~0UL << offset;
+ if (size < 32)
+ goto found_first;
+ if (tmp)
+ goto found_middle;
+ size -= 32;
+ result += 32;
+ }
+ while (size >= 32) {
+ if ((tmp = cpu_to_le32p(p++)))
+ goto found_middle;
+ result += 32;
+ size -= 32;
+ }
+ if (!size)
+ return result;
+ tmp = cpu_to_le32p(p);
+found_first:
+ tmp &= ~0U >> (32 - size);
+ if (tmp == 0UL) /* Are any bits set? */
+ return result + size; /* Nope. */
+found_middle:
+ return result + __ffs(tmp);
+}
+
/* Bitmap functions for the minix filesystem. */
#define minix_test_and_set_bit(nr,addr) ext2_set_bit(nr,addr)
#define minix_set_bit(nr,addr) ((void)ext2_set_bit(nr,addr))
Index: linux-2.6.9/include/asm-ppc64/bitops.h
===================================================================
--- linux-2.6.9.orig/include/asm-ppc64/bitops.h 2004-10-19 05:55:43.000000000 +0800
+++ linux-2.6.9/include/asm-ppc64/bitops.h 2006-09-01 14:05:00.000000000 +0800
@@ -349,6 +349,9 @@
find_first_zero_le_bit((unsigned long*)addr, size)
#define ext2_find_next_zero_bit(addr, size, off) \
find_next_zero_le_bit((unsigned long*)addr, size, off)
+#define ext2_find_next_le_bit(addr, size, off) \
+ generic_find_next_le_bit((unsigned long*)(addr), (size), (off))
+extern unsigned long generic_find_next_le_bit(const unsigned long *addr, unsigned long size, unsigned long offset);
#define minix_test_and_set_bit(nr,addr) test_and_set_bit(nr,addr)
#define minix_set_bit(nr,addr) set_bit(nr,addr)
Index: linux-2.6.9/arch/ppc64/kernel/bitops.c
===================================================================
--- linux-2.6.9.orig/arch/ppc64/kernel/bitops.c 2004-10-19 05:54:37.000000000 +0800
+++ linux-2.6.9/arch/ppc64/kernel/bitops.c 2006-09-01 14:05:25.000000000 +0800
@@ -145,3 +145,43 @@
}
EXPORT_SYMBOL(find_next_zero_le_bit);
+
+unsigned long generic_find_next_le_bit(const unsigned long *addr, unsigned long size,
+ unsigned long offset)
+{
+ const unsigned long *p = addr + offset / BITS_PER_LONG;
+ unsigned long result = offset & ~(BITS_PER_LONG - 1);
+ unsigned long tmp;
+
+ if (offset >= size)
+ return size;
+ size -= result;
+ offset %= BITS_PER_LONG;
+ if (offset) {
+ tmp = __swab64p(p++);
+ tmp &= (~0UL << offset);
+ if (size < BITS_PER_LONG)
+ goto found_first;
+ if (tmp)
+ goto found_middle;
+ size -= BITS_PER_LONG;
+ result += BITS_PER_LONG;
+ }
+ while (size & ~(BITS_PER_LONG - 1)) {
+ if ((tmp = __swab64p(p++)))
+ goto found_middle;
+ result += BITS_PER_LONG;
+ size -= BITS_PER_LONG;
+ }
+ if (!size)
+ return result;
+ tmp = __swab64p(p);
+found_first:
+ tmp &= ~0UL >> (BITS_PER_LONG - size);
+ if (tmp == 0UL)
+ return result + size;
+found_middle:
+ return result + __ffs(tmp);
+}
+
+EXPORT_SYMBOL(generic_find_next_le_bit);
|