On Wed, Feb 16, 2005 at 02:17:49PM +0100, [EMAIL PROTECTED] wrote:
> Hi,
> i just wondered about reiser4fs working on SPARC64? I use Gentoo Sparc64
> and it is working fine with kernel 2.4.28. But is the Reiser4 code
> SPARC64 ready?
It would be nice if you try it :) we have no reiser4/sparc64 reports yet.
Reiser4 code is included into AKPM's -mm kernels. mkfs and other utils are in
the ftp://ftp.namesys.com/pub/reiser4progs/
At least 3 additional patches are needed for running reiser4 on sparc64. They
not yet
included into -mm kernels. I am attaching them to this e-mail.
> Thanks for your help
>
> Florian Engelmann
--
Alex.
===== plugin/space/bitmap.c 1.186 vs edited =====
--- 1.186/plugin/space/bitmap.c Wed Jan 19 18:52:52 2005
+++ edited/plugin/space/bitmap.c Mon Feb 7 16:18:37 2005
@@ -165,7 +165,7 @@
static int
find_next_zero_bit_in_word(ulong_t word, int start_bit)
{
- ulong_t mask = 1 << start_bit;
+ ulong_t mask = 1UL << start_bit;
int i = start_bit;
while ((word & mask) != 0) {
@@ -235,7 +235,7 @@
assert ("zam-965", start_bit < BITS_PER_LONG);
assert ("zam-966", start_bit >= 0);
- bit_mask = (1 << nr);
+ bit_mask = (1UL << nr);
while (bit_mask != 0) {
if (bit_mask & word)
===== plugin/space/bitmap.c 1.186 vs edited =====
--- 1.186/plugin/space/bitmap.c Wed Jan 19 18:52:52 2005
+++ edited/plugin/space/bitmap.c Sun Feb 6 19:23:01 2005
@@ -54,13 +54,15 @@
#define CHECKSUM_SIZE 4
+#define BYTES_PER_LONG (sizeof(long))
+
#if BITS_PER_LONG == 64
# define LONG_INT_SHIFT (6)
#else
# define LONG_INT_SHIFT (5)
#endif
-#define LONG_INT_MASK (BITS_PER_LONG - 1)
+#define LONG_INT_MASK (BITS_PER_LONG - 1UL)
typedef unsigned long ulong_t;
@@ -179,17 +181,46 @@
#include <asm/bitops.h>
+#if BITS_PER_LONG == 64
+
+#define OFF(addr) (((ulong_t)(addr) & (BYTES_PER_LONG - 1)) << 3)
+#define BASE(addr) ((ulong_t*) ((ulong_t)(addr) & ~(BYTES_PER_LONG - 1)))
+
+static inline void reiser4_set_bit(int nr, void * addr)
+{
+ ext2_set_bit(nr + OFF(addr), BASE(addr));
+}
+
+static inline void reiser4_clear_bit(int nr, void * addr)
+{
+ ext2_clear_bit(nr + OFF(addr), BASE(addr));
+}
+
+static inline int reiser4_test_bit(int nr, void * addr)
+{
+ return ext2_test_bit(nr + OFF(addr), BASE(addr));
+}
+static inline int reiser4_find_next_zero_bit(void * addr, int maxoffset, int
offset)
+{
+ int off = OFF(addr);
+
+ return ext2_find_next_zero_bit(BASE(addr), maxoffset + off, offset +
off) - off;
+}
+
+#else
+
#define reiser4_set_bit(nr, addr) ext2_set_bit(nr, addr)
#define reiser4_clear_bit(nr, addr) ext2_clear_bit(nr, addr)
#define reiser4_test_bit(nr, addr) ext2_test_bit(nr, addr)
#define reiser4_find_next_zero_bit(addr, maxoffset, offset) \
ext2_find_next_zero_bit(addr, maxoffset, offset)
+#endif
/* Search for a set bit in the bit array [EMAIL PROTECTED], @max_offset[,
offsets
* are counted from @addr, return the offset of the first bit if it is found,
* @maxoffset otherwise. */
-static bmap_off_t reiser4_find_next_set_bit(
+static bmap_off_t __reiser4_find_next_set_bit(
void *addr, bmap_off_t max_offset, bmap_off_t start_offset)
{
ulong_t *base = addr;
@@ -225,6 +256,21 @@
return max_offset;
}
+
+#if BITS_PER_LONG == 64
+
+static bmap_off_t reiser4_find_next_set_bit(
+ void *addr, bmap_off_t max_offset, bmap_off_t start_offset)
+{
+ bmap_off_t off = OFF(addr);
+
+ return __reiser4_find_next_set_bit(BASE(addr), max_offset + off,
start_offset + off) - off;
+}
+
+#else
+#define reiser4_find_next_set_bit(addr, max_offset, start_offset) \
+ __reiser4_find_next_set_bit(addr, max_offset, start_offset)
+#endif
/* search for the first set bit in single word. */
static int find_last_set_bit_in_word (ulong_t word, int start_bit)
# This is a BitKeeper generated diff -Nru style patch.
#
# ChangeSet
# 2005/02/12 18:55:16+03:00 [EMAIL PROTECTED]
# replace_extent: unaligned access fix.
#
# plugin/item/extent.c
# 2005/02/12 18:55:10+03:00 [EMAIL PROTECTED] +1 -1
# replace_extent: unaligned access fix.
#
diff -Nru a/plugin/item/extent.c b/plugin/item/extent.c
--- a/plugin/item/extent.c Tue Feb 15 21:25:22 2005
+++ b/plugin/item/extent.c Tue Feb 15 21:25:22 2005
@@ -135,7 +135,7 @@
assert("vs-987", znode_is_loaded(coord_after.node));
assert("vs-988", !memcmp(ext, &orig_ext, sizeof
(*ext)));
- *ext = *replace;
+ memcpy(ext, replace, sizeof(*ext));
znode_make_dirty(coord_after.node);
if (coord_after.node != orig_znode)