All of lore.kernel.org
 help / color / mirror / Atom feed
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

  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.