From: Miklos S. <mi...@sz...> - 2005-03-24 14:35:14
|
Has anyone experience running FUSE in a 64bit environment (e.g. AMD64)? More specifically I'm interested whether you can run filesystem and FUSE library compiled for 32bit environment and use it with a kernel compiled for 64bit. I know it's possible in theory but since I don't have the hardware I can't test this. Thanks, Miklos |
From: Franco B. <fr...@fu...> - 2005-03-29 01:55:07
|
On Thu, 2005-03-24 at 15:34 +0100, Miklos Szeredi wrote: > Has anyone experience running FUSE in a 64bit environment (e.g. AMD64)? > > More specifically I'm interested whether you can run filesystem and > FUSE library compiled for 32bit environment and use it with a kernel > compiled for 64bit. I know it's possible in theory but since I don't > have the hardware I can't test this. Short answer, no it doesn't work. Full 64 bit version looks OK. Filesystem 1K-blocks Used Available Use% Mounted on fusexmp 36353448 11289240 23217540 33% /home/franco/fuse-2.2.1/example/fred [franco@golf1]$ ls ls: .: Input/output error [franco@golf1]$ .libs/fusexmp -d fred unique: 2, opcode: INIT (26), nodeid: 0, insize: 48 INIT: 0.5 unique: 2, error: 0 (Success), outsize: 24 unique: 3, opcode: STATFS (17), nodeid: 0, insize: 40 unique: 3, error: 0 (Success), outsize: 64 unique: 4, opcode: GETATTR (3), nodeid: 1, insize: 40 unique: 4, error: 0 (Success), outsize: 112 unique: 5, opcode: LOOKUP (1), nodeid: 1, insize: 43 LOOKUP / NODEID: 2 unique: 5, error: 0 (Success), outsize: 136 unique: 6, opcode: GETATTR (3), nodeid: 1, insize: 40 unique: 6, error: 0 (Success), outsize: 112 unique: 7, opcode: OPENDIR (27), nodeid: 1, insize: 44 unique: 7, error: 0 (Success), outsize: 28 fuse: writing device: Invalid argument |
From: Franco B. <fr...@fu...> - 2005-03-29 02:09:14
|
On Tue, 2005-03-29 at 09:54 +0800, Franco Broi wrote: > On Thu, 2005-03-24 at 15:34 +0100, Miklos Szeredi wrote: > > Has anyone experience running FUSE in a 64bit environment (e.g. AMD64)? > > > > More specifically I'm interested whether you can run filesystem and > > FUSE library compiled for 32bit environment and use it with a kernel > > compiled for 64bit. I know it's possible in theory but since I don't > > have the hardware I can't test this. > > Short answer, no it doesn't work. Full 64 bit version looks OK. > Miklos, I forgot to add that I can give you access to the machine if you want it. |
From: Miklos S. <mi...@sz...> - 2005-03-29 10:18:53
|
> > Has anyone experience running FUSE in a 64bit environment (e.g. AMD64)? > > > > More specifically I'm interested whether you can run filesystem and > > FUSE library compiled for 32bit environment and use it with a kernel > > compiled for 64bit. I know it's possible in theory but since I don't > > have the hardware I can't test this. > > Short answer, no it doesn't work. Full 64 bit version looks OK. I think I know what's wrong. Can you please try the following patch? > Miklos, I forgot to add that I can give you access to the machine if you > want it. Thanks, but since I'd need root access for insmod/rmmod, I think it's better if I don't mess with your computer :) Thanks, Miklos Index: kernel/dev.c =================================================================== RCS file: /cvsroot/fuse/fuse/kernel/dev.c,v retrieving revision 1.66.2.6 diff -u -r1.66.2.6 dev.c --- kernel/dev.c 25 Mar 2005 11:56:38 -0000 1.66.2.6 +++ kernel/dev.c 29 Mar 2005 10:11:09 -0000 @@ -765,18 +765,20 @@ { unsigned reqsize = sizeof(struct fuse_out_header); - if (out->h.error) + if (out->h.error || !out->numargs) return nbytes != reqsize ? -EINVAL : 0; reqsize += len_args(out->numargs, out->args); - if (reqsize < nbytes || (reqsize > nbytes && !out->argvar)) + if (reqsize < nbytes) return -EINVAL; else if (reqsize > nbytes) { struct fuse_arg *lastarg = &out->args[out->numargs-1]; unsigned diffsize = reqsize - nbytes; if (diffsize > lastarg->size) return -EINVAL; + if (!out->argvar) + memset(lastarg->value, 0, lastarg->size); lastarg->size -= diffsize; } return fuse_copy_args(cs, out->numargs, out->argpages, out->args, |
From: Franco B. <fr...@cl...> - 2005-03-29 11:59:40
|
On Tue, 2005-03-29 at 12:18 +0200, Miklos Szeredi wrote: > > > Has anyone experience running FUSE in a 64bit environment (e.g. AMD64)? > > > > > > More specifically I'm interested whether you can run filesystem and > > > FUSE library compiled for 32bit environment and use it with a kernel > > > compiled for 64bit. I know it's possible in theory but since I don't > > > have the hardware I can't test this. > > > > Short answer, no it doesn't work. Full 64 bit version looks OK. > > I think I know what's wrong. Can you please try the following patch? > > > Miklos, I forgot to add that I can give you access to the machine if you > > want it. > > Thanks, but since I'd need root access for insmod/rmmod, I think it's > better if I don't mess with your computer :) It is a stand-alone test box and is there if you need it. I can set it up for you tomorrow. I patched the code by hand, I'm using 2.2.1 and not the latest CVS code, at least that why I think the patch failed. I've included the copy_out_args routine below so you can check if I made a mistake. [franco@golf1]$ ls fred ls: reading directory fred: Software caused connection abort unique: 3, opcode: STATFS (17), nodeid: 0, insize: 40 unique: 3, error: 0 (Success), outsize: 64 unique: 4, opcode: GETATTR (3), nodeid: 1, insize: 40 unique: 4, error: 0 (Success), outsize: 112 unique: 5, opcode: GETXATTR (22), nodeid: 1, insize: 68 unique: 5, error: -34 (Numerical result out of range), outsize: 16 ls: fred: Numerical result out of range unique: 6, opcode: GETATTR (3), nodeid: 1, insize: 40 unique: 6, error: 0 (Success), outsize: 112 unique: 7, opcode: OPENDIR (27), nodeid: 1, insize: 44 unique: 7, error: 0 (Success), outsize: 28 unique: 8, opcode: GETATTR (3), nodeid: 1, insize: 40 unique: 8, error: 0 (Success), outsize: 112 unique: 9, opcode: READDIR (28), nodeid: 1, insize: 64 Segmentation fault .libs/fusexmp -d fred (core dumped) #0 do_readdir (f=0x804a088, in=0x80658e0, arg=0x8065904) at fuse.c:1584 #1 0x5557fedf in fuse_process_cmd (f=0x804a088, cmd=0x804a018) at fuse.c:1766 #2 0x555807d2 in do_work (data=0x80658a8) at fuse_mt.c:85 #3 0x55580b3e in fuse_loop_mt_proc (f=0x804a088, proc=0, data=0x0) at fuse_mt.c:179 #4 0x55580bfc in fuse_loop_mt (f=0x1c) at fuse_mt.c:196 #5 0x5558152f in fuse_main_common (argc=3, argv=0xffffd4b4, op=0x8049020, op_size=100, compat=0) at helper.c:379 #6 0x55581579 in fuse_main_real (argc=3, argv=0xffffd4b4, op=0x8049020, op_size=100) at helper.c:393 #7 0x08048e93 in main (argc=3, argv=0xffffd4b4) at fusexmp.c:345 1584 if (!dh->filled) { static int copy_out_args(struct fuse_copy_state *cs, struct fuse_out *out, unsigned nbytes) { unsigned reqsize = sizeof(struct fuse_out_header); if (out->h.error || !out->numargs) return nbytes != reqsize ? -EINVAL : 0; reqsize += len_args(out->numargs, out->args); if (reqsize < nbytes) return -EINVAL; else if (reqsize > nbytes) { struct fuse_arg *lastarg = &out->args[out->numargs-1]; unsigned diffsize = reqsize - nbytes; if (diffsize > lastarg->size) return -EINVAL; if (!out->argvar) memset(lastarg->value, 0, lastarg->size); lastarg->size -= diffsize; } return fuse_copy_args(cs, out->numargs, out->argpages, out- >args, out->page_zeroing); } |
From: Miklos S. <mi...@sz...> - 2005-03-29 12:31:32
|
> It is a stand-alone test box and is there if you need it. I can set it > up for you tomorrow. Great, thanks. > I patched the code by hand, I'm using 2.2.1 and not the latest CVS code, > at least that why I think the patch failed. I've included the > copy_out_args routine below so you can check if I made a mistake. Your hand patching seems fine. Patch shouldn't have failed though... > [franco@golf1]$ ls fred > ls: reading directory fred: Software caused connection abort Again I think I have the solution, but I'll leave it for tomorrow. Thanks, Miklos |