linux-um archives
 help / color / mirror / Atom feed
From: Blaisorblade <blaisorblade@yahoo.it>
To: user-mode-linux-devel@lists.sourceforge.net
Cc: wang lianwei <lianwei.wang@gmail.com>
Subject: Re: [uml-devel] UML hostfs bugs
Date: Sat, 12 Aug 2006 20:22:42 +0200	[thread overview]
Message-ID: <200608122022.42389.blaisorblade@yahoo.it> (raw)
In-Reply-To: <39134b110608100842p5acdf798o807b48801ea9a706@mail.gmail.com>

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 


-------------------------------------------------------------------------
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
_______________________________________________
User-mode-linux-devel mailing list
User-mode-linux-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/user-mode-linux-devel

  reply	other threads:[~2006-08-12 18:22 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 [this message]
2006-08-12 20:10   ` Blaisorblade
2006-08-14 11:07   ` wang lianwei
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=200608122022.42389.blaisorblade@yahoo.it \
    --to=blaisorblade@yahoo.it \
    --cc=lianwei.wang@gmail.com \
    --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