(Illustration by Gaich Muramatsu)
On Tue, Aug 03, 2004 at 04:59:44PM +0200, Michael Tautschnig wrote: > As I took a closer look into the sources, I got pretty sure, that my > problem lies in the different pointer-sizes when having a 32-bit userland > and a 64-bit kernel. Could somebody confirm that? > > The structs ViceIoctl and PioctlData both contain pointers - but what > would be a good solution for that problem? I don't like the passing of pointers and it looks like Greg's suggestion is really the easiest way to do work around this right now. There is some messing around with the cmd field of the ioctl. Userspace (cfs/hoard) passes a path to an object and a blob of data and seems to add in the size of the char* as well as the integer follow flag, the kernel then subtracts these again before passing the data on to venus. This is kind of weird because the original data passed to the ioctl was struct PioctlData and not the struct ViceIoctl which is forwarded to venus. Although struct coda_ioctl_in, coda_ioctl_out and coda_readlink_out have char*/caddr_t values as well, these are not actually pointers that are passed on to venus but it looks like they contain the offset from the start of the struct and the actual data is packed similar to how a dirent is packed by readdir. JanReceived on 2004-08-06 14:15:01