linux-um archives
 help / color / mirror / Atom feed
From: "wang lianwei" <lianwei.wang@gmail.com>
To: Blaisorblade <blaisorblade@yahoo.it>
Cc: user-mode-linux-devel@lists.sourceforge.net
Subject: Re: [uml-devel] UML hostfs bugs
Date: Mon, 14 Aug 2006 19:07:08 +0800	[thread overview]
Message-ID: <39134b110608140407n718d0cf5rfed71f8295ea43e0@mail.gmail.com> (raw)
In-Reply-To: <200608122022.42389.blaisorblade@yahoo.it>


[-- Attachment #1.1: Type: text/plain, Size: 4022 bytes --]

Answers:

1. I test it on ext3 filesystem.

2. You are right. Sometimes the pos telldir returned is not the next entry
offset. just as your point out:
      position 0 -> readdir "." -> you call telldir -> it _again_ says
you're at 0.

3. I also try to resolve it by remove the seekdir(only use the
sequence readdir call), It is also worked.

--- linux-2.6.x/fs/hostfs/hostfs_kern.c 2006-04-12 15:12:51.000000000 +0800
+++ linux-2.6.10-src/fs/hostfs/hostfs_kern.c      2006-08-14 18:25:
13.772237744 +0800
@@ -338,6 +338,7 @@
        kfree(name);
        if(dir == NULL) return(-error);
        next = file->f_pos;
+       seekdir(dir,next);
        while((name = read_dir(dir, &next, &ino, &len)) != NULL){
                error = (*filldir)(ent, name, len, file->f_pos,
                                   ino, DT_UNKNOWN);


--- linux-2.6.x/fs/hostfs/hostfs_user.c 2006-04-12 15:12:52.000000000 +0800
+++ linux-2.6.10-src/fs/hostfs/hostfs_user.c      2006-08-14 18:36:
24.276305632 +0800
@@ -122,7 +122,6 @@
        DIR *dir = stream;
        struct dirent *ent;

-       seekdir(dir, *pos);
        ent = readdir(dir);
        if(ent == NULL) return(NULL);
        *len_out = strlen(ent->d_name);




2006/8/13, Blaisorblade <blaisorblade@yahoo.it>:
>
> On Thursday 10 August 2006 17:42, wang lianwei wrote:
> > Hi all,
> >
> > There is a bug with UML kernel, some host directory can not be read, for
>
> > example "ls /mnt/host/usr/lib", this command is dead until you press
> > CTRL+c. I test it with Redhat Enterprise Linux 4.
>
> Yes, this has been reported various times but difficult to reproduce, so
> we're
> very happy somebody diagnosed it, and I'd be interested in understanding
> it
> better.
>
> On which filesystem (ext3, reiserfs, what else) lays /usr/lib on the host?
>
> This is because the UML read host directory through opendir, seekdir,
> > readdir and telldir. When get the dir stream offset through telldir, it
> > always return 0 on some directory, for example".",
>
> Can you elaborate on this? (And if possible post some details, like a
> strace)
>
> What I've understood is:
>
> position 0 -> you read "." -> you call telldir -> it _again_ says you're
> at 0?
>
> I can maybe understand why it could happen. I'd be more interested in
> checking
> if a simple sequence of readdir() calls (without seekdir()) would work
> (probably write a standalone test program, it will be easier to use and
> debug) and why read_dir needs to do seekdir (I think it's done to handle
> calls to seekdir by the underlying process, but there should be different
> ways to do it).
>
> > I don't know why? But
> > we can fix it as follows although the next dir entry offset is not
> exact:
>
> > Modify the fs/hostfs/hostfs_user.c file, update the read_dir function,
> >
> > char *read_dir(void *stream, unsigned long long *pos,
> >                unsigned long long *ino_out, int *len_out)
> > {
> >         DIR *dir = stream;
> >         struct dirent *ent;
> >         unsigned long long oldpos;
> >
> >         oldpos = *pos;
> >
> >         seekdir(dir, *pos);
> >         ent = readdir(dir);
> >         if(ent == NULL)
> >         {
> >                 return(NULL);
> >         }
> >         *len_out = strlen(ent->d_name);
> >         *ino_out = ent->d_ino;
> >         *pos = telldir(dir);
> >
> >         /* Fix the telldir return 0 error */
> >         if (*pos == 0)
> >                 *pos = oldpos + *len_out;
> >
> >         return(ent->d_name);
> > }
> >
> > although the next offset is not exact, but the readdir can get the next
> > entry correct.
>
> This probably depends heavily on the underlying filesystem...
>
> > Can anyone give a better solution?
>
> I can't yet, but maybe with your help we'll be able.
> --
> Inform me of my mistakes, so I can keep imitating Homer Simpson's "Doh!".
> Paolo Giarrusso, aka Blaisorblade
> http://www.user-mode-linux.org/~blaisorblade
> Chiacchiera con i tuoi amici in tempo reale!
> http://it.yahoo.com/mail_it/foot/*http://it.messenger.yahoo.com
>
>

[-- Attachment #1.2: Type: text/html, Size: 6873 bytes --]

[-- Attachment #2: Type: text/plain, Size: 373 bytes --]

-------------------------------------------------------------------------
Using Tomcat but need to do more? Need to support web services, security?
Get stuff done quickly with pre-integrated technology to make your job easier
Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642

[-- Attachment #3: Type: text/plain, Size: 194 bytes --]

_______________________________________________
User-mode-linux-devel mailing list
User-mode-linux-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/user-mode-linux-devel

  parent reply	other threads:[~2006-08-14 11:07 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2006-08-10 15:42 [uml-devel] UML hostfs bugs wang lianwei
2006-08-12 18:22 ` Blaisorblade
2006-08-12 20:10   ` Blaisorblade
2006-08-14 11:07   ` wang lianwei [this message]
2006-08-15 17:47     ` Blaisorblade
2006-08-16 10:19       ` wang lianwei

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=39134b110608140407n718d0cf5rfed71f8295ea43e0@mail.gmail.com \
    --to=lianwei.wang@gmail.com \
    --cc=blaisorblade@yahoo.it \
    --cc=user-mode-linux-devel@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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox