Hello

On Tue, 2004-09-07 at 12:05, Oliver Korpilla wrote:
> Hello Vladimir,
> 
> I guess not.
> 
> Both my clients are embedded systems, and both didn't work.
> 
> Client/Target one is a Motorola MVME2100 board with an MPC8240 PowerPC CPU @ 200
> MHz.
> 
> Client/Target two is a Motorola MVME5500 board with an MPC7455 PowerPC CPU @ 1GHz.
> 
> Both failed to mount their root filesystem via NFS from a Reiser4 on the
> server/host, but worked fine with an ext3 over NFS.
> 
> Either this is a NFSv3/Reiser4/2.6.8.1 server vs. NFSv3/2.4.21 client problem,
> or it has something to do with endianness (PowerPC is big-endian, Intel P4 box
> is little-endian). I know ext* has absolutely no issues with endianness, neither
> as RAM disk nor over NFS, but perhaps Reiser4 has?
> 
Yes, that could be a problem.
Would you please try to patch reiser4/vfs_ops.c with the attached patch
and let us know whether it makes any effect?


> Do both your client and your server have kernel 2.6.x? Are both Reiser4 patched?
> 
> Maybe Linux 2.6.x has new LOOKUP operation semantics in order to support Reiser4
> that Linux 2.4.2x hasn't?
> 
> On a side note:
> 
> It would be nice if we could reproduce the error, since I like Reiser4. I did a
> large egrep over the whole /usr subtree, and didn't hear a sound from my hard
> drive because accesses seemed to be well-ordered (no superfluous head
> movements). I first thought the operation failed. ;)
> 
> With kind regards,
> Oliver Korpilla
> 
> Vladimir Saveliev wrote:
> > I have no problems with exporting reiser4 via NFS. Could it be that you
> > have problem because your client is embedded?
> 
> 
===== vfs_ops.c 1.732 vs edited =====
--- 1.732/vfs_ops.c     2004-08-30 17:05:53 +04:00
+++ edited/vfs_ops.c    2004-09-07 15:38:55 +04:00
@@ -1564,12 +1564,16 @@
        addr = (char *)data;
 
        need = encode_inode_size(inode);
-       if (need < 0)
+       if (need < 0) {
+               printk("reiser4_encode_fh-1: need=%d\n", need);
                return NFSERROR;
+       }
        if (need_parent) {
                delta = encode_inode_size(parent);
-               if (delta < 0)
+               if (delta < 0) {
+                       printk("reiser4_encode_fh-2: delta=%d\n", delta);
                        return NFSERROR;
+               }
                need += delta;
        }
 
@@ -1584,9 +1588,11 @@
                 * handle. */
                *lenp = (need + sizeof(__u32) - 1) >> 2;
                result = need_parent ? FH_WITH_PARENT : FH_WITHOUT_PARENT;
-       } else
+       } else {
                /* no enough space in file handle */
+               printk("reiser4_encode_fh-3: need=%d, lenp=%d\n", need, *lenp);
                result = NFSERROR;
+       }
        reiser4_exit_context(&context);
        return result;
 }

Reply via email to