From: Bernd Schubert <bernd-schubert@web.de>
To: Andi Kleen <ak@muc.de>
Cc: Linux Kernel Mailing List <linux-kernel@vger.kernel.org>,
nfs@lists.sourceforge.net
Subject: Re: x86_64: 32bit emulation problems
Date: Tue, 1 Mar 2005 23:30:41 +0100 [thread overview]
Message-ID: <200503012330.42154.bernd-schubert@web.de> (raw)
In-Reply-To: <20050301214832.GA44624@muc.de>
> strace didn't say so, and normally it doesn't lie about things like t=
his.
Well, I show you the updated source code and strace output and if you s=
till=20
don't believe me, ask me for a login to our system ;)
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <stdio.h>
#include <errno.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, char **argv)
{
char *dir;
struct stat *buf;
int err;
dir =3D argv[1];
buf =3D malloc(sizeof(struct stat));
errno =3D 0;
err =3D stat(dir, buf);
if ( err ) {
fprintf(stderr, "err =3D %i\n", err);
fprintf(stderr, "stat for %s failed \n", dir);
fprintf(stderr, "ernno: %i (%s)\n", errno, strerror(err=
no));
} else
fprintf(stderr, "stat() works fine.\n");
return (0);
}
>
> > > bernd@hitchcock tests>./test_stat32 /mnt/test/yp
> > > stat for /mnt/test/yp failed
> > > ernno: 75 (Value too large for defined data type)
>
> errno is undefined unless a system call returned -1 before or
> you set it to 0 before.
See above.
>
> > > But why does stat64() on a 64-bit kernel tries to fill in larger =
data
> > > than
>
> A 64bit kernel has no stat64(). All stats are 64bit.
bernd@hitchcock tests>strace32 ./test_stat32 /mnt/test/yp
execve("./test_stat32", ["./test_stat32", "/mnt/test/yp"], [/* 43 vars =
*/]) =3D=20
0
uname({sys=3D"Linux", node=3D"hitchcock", ...}) =3D 0
brk(0) =3D 0x80ad000
brk(0x80ce000) =3D 0x80ce000
stat64("/mnt/test/yp", {st_mode=3DS_IFDIR|0755, st_size=3D2704, ...}) =3D=
0
write(2, "err =3D -1\n", 9err =3D -1
) =3D 9
write(2, "stat for /mnt/test/yp failed \n", 30stat for /mnt/test/yp fai=
led
) =3D 30
write(2, "ernno: 75 (Value too large for d"..., 50ernno: 75 (Value too =
large=20
for defined data type)
) =3D 50
exit_group(0) =3D ?
You certainly know much better than me, but I think strace shows that i=
ts=20
calling stat64.
>
> > > on a 32-bit kernel and larger data also only for nfs-mount points=
? Hmm,
> > > I will tomorrow compare the tcp-packges sent by the server.
> >
> > So I still think thats a kernel bug.
>
> Your data so far doesn't support this assertion.
I have to admit that knfsd-mount moints are not affected, but on the ot=
her=20
hand, I really cant't see anything in the ethereal captures. If someone=
=20
should be interested, I have uploaded them:
http://www.pci.uni-heidelberg.de/tc/usr/bernd/downloads/nfs-stat/
Cheers,
Bernd
--=20
Bernd Schubert
Physikalisch Chemisches Institut / Theoretische Chemie
Universit=E4t Heidelberg
INF 229
69120 Heidelberg
e-mail: bernd.schubert@pci.uni-heidelberg.de
WARNING: multiple messages have this Message-ID (diff)
From: Bernd Schubert <bernd-schubert@web.de>
To: Andi Kleen <ak@muc.de>
Cc: Linux Kernel Mailing List <linux-kernel@vger.kernel.org>,
nfs@lists.sourceforge.net
Subject: Re: x86_64: 32bit emulation problems
Date: Tue, 1 Mar 2005 23:30:41 +0100 [thread overview]
Message-ID: <200503012330.42154.bernd-schubert@web.de> (raw)
In-Reply-To: <20050301214832.GA44624@muc.de>
> strace didn't say so, and normally it doesn't lie about things like this.
Well, I show you the updated source code and strace output and if you still
don't believe me, ask me for a login to our system ;)
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <stdio.h>
#include <errno.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, char **argv)
{
char *dir;
struct stat *buf;
int err;
dir = argv[1];
buf = malloc(sizeof(struct stat));
errno = 0;
err = stat(dir, buf);
if ( err ) {
fprintf(stderr, "err = %i\n", err);
fprintf(stderr, "stat for %s failed \n", dir);
fprintf(stderr, "ernno: %i (%s)\n", errno, strerror(errno));
} else
fprintf(stderr, "stat() works fine.\n");
return (0);
}
>
> > > bernd@hitchcock tests>./test_stat32 /mnt/test/yp
> > > stat for /mnt/test/yp failed
> > > ernno: 75 (Value too large for defined data type)
>
> errno is undefined unless a system call returned -1 before or
> you set it to 0 before.
See above.
>
> > > But why does stat64() on a 64-bit kernel tries to fill in larger data
> > > than
>
> A 64bit kernel has no stat64(). All stats are 64bit.
bernd@hitchcock tests>strace32 ./test_stat32 /mnt/test/yp
execve("./test_stat32", ["./test_stat32", "/mnt/test/yp"], [/* 43 vars */]) =
0
uname({sys="Linux", node="hitchcock", ...}) = 0
brk(0) = 0x80ad000
brk(0x80ce000) = 0x80ce000
stat64("/mnt/test/yp", {st_mode=S_IFDIR|0755, st_size=2704, ...}) = 0
write(2, "err = -1\n", 9err = -1
) = 9
write(2, "stat for /mnt/test/yp failed \n", 30stat for /mnt/test/yp failed
) = 30
write(2, "ernno: 75 (Value too large for d"..., 50ernno: 75 (Value too large
for defined data type)
) = 50
exit_group(0) = ?
You certainly know much better than me, but I think strace shows that its
calling stat64.
>
> > > on a 32-bit kernel and larger data also only for nfs-mount points? Hmm,
> > > I will tomorrow compare the tcp-packges sent by the server.
> >
> > So I still think thats a kernel bug.
>
> Your data so far doesn't support this assertion.
I have to admit that knfsd-mount moints are not affected, but on the other
hand, I really cant't see anything in the ethereal captures. If someone
should be interested, I have uploaded them:
http://www.pci.uni-heidelberg.de/tc/usr/bernd/downloads/nfs-stat/
Cheers,
Bernd
--
Bernd Schubert
Physikalisch Chemisches Institut / Theoretische Chemie
Universität Heidelberg
INF 229
69120 Heidelberg
e-mail: bernd.schubert@pci.uni-heidelberg.de
next prev parent reply other threads:[~2005-03-01 22:30 UTC|newest]
Thread overview: 36+ messages / expand[flat|nested] mbox.gz Atom feed top
2005-02-28 20:54 x86_64: 32bit emulation problems Bernd Schubert
2005-02-28 21:00 ` Bernd Schubert
2005-03-01 20:24 ` Andi Kleen
2005-03-01 21:07 ` Bernd Schubert
2005-03-01 21:07 ` Bernd Schubert
2005-03-01 21:48 ` Andi Kleen
2005-03-01 22:30 ` Bernd Schubert [this message]
2005-03-01 22:30 ` Bernd Schubert
2005-03-01 23:07 ` Andi Kleen
2005-03-01 22:10 ` Andreas Schwab
2005-03-01 22:10 ` Andreas Schwab
2005-03-01 22:19 ` Andi Kleen
2005-03-01 23:22 ` Andreas Schwab
2005-03-01 23:22 ` Andreas Schwab
2005-03-01 23:19 ` Bernd Schubert
2005-03-01 23:39 ` Andreas Schwab
2005-03-01 23:39 ` Andreas Schwab
2005-03-01 23:46 ` Andreas Schwab
2005-03-01 23:46 ` Andreas Schwab
2005-03-02 8:18 ` Andi Kleen
2005-03-02 9:13 ` Trond Myklebust
2005-03-02 11:33 ` Bernd Schubert
2005-03-02 16:53 ` Trond Myklebust
2005-03-02 18:14 ` Bernd Schubert
2005-03-03 9:19 ` Andi Kleen
2005-03-03 21:16 ` Bernd Schubert
2005-03-03 21:32 ` Andi Kleen
2005-03-03 21:37 ` Trond Myklebust
2005-03-03 21:46 ` Andi Kleen
2005-03-03 22:21 ` Trond Myklebust
2005-03-03 9:12 ` Andi Kleen
-- strict thread matches above, loose matches on Subject: below --
2005-02-28 21:08 Bernd Schubert
2005-02-28 22:26 ` Trond Myklebust
2005-02-28 23:14 ` Bernd Schubert
2005-02-28 23:43 ` Bernd Schubert
2005-03-01 0:47 ` Dan Stromberg
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=200503012330.42154.bernd-schubert@web.de \
--to=bernd-schubert@web.de \
--cc=ak@muc.de \
--cc=linux-kernel@vger.kernel.org \
--cc=nfs@lists.sourceforge.net \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.