large file problem in rh7.1

Derek Atkins warlord at MIT.EDU
Sun Mar 3 12:25:29 EST 2002


Ken Gosier <ken at kg293.net> writes:

> write(4, "\23.\tN\n\16!\6\253\270T\262\30\241\325]\363\362\307\f"...,
> 4096) = 4096
> read(3, 0xbfffe420, 4096)               = -1 EIO (Input/output error)
> open("/usr/share/locale/en_US/LC_MESSAGES/fileutils.mo", O_RDONLY) = -1
> ENOENT (No such file or directory)
> open("/usr/share/locale/en/LC_MESSAGES/fileutils.mo", O_RDONLY) = -1
> ENOENT (No such file or directory)
> write(2, "cp: ", 4cp: )                     = 4
> write(2, "reading `ali.mp3\'", 17reading `ali.mp3')      = 17
> open("/usr/share/locale/en_US/LC_MESSAGES/libc.mo", O_RDONLY) = -1 ENOENT
> (No such file or directory)
> open("/usr/share/locale/en/LC_MESSAGES/libc.mo", O_RDONLY) = -1 ENOENT (No
> such file or directory)
> write(2, ": Input/output error", 20: Input/output error)    = 20
> write(2, "\n", 1
> )                       = 1
> close(4)                                = 0
> close(3)                                = 0
> _exit(1)                                = ?
> 
> (Preceded by many more read/write statements.) The sysadmin seemed to
> think that some char was somehow sending a message to open the file
> /usr/share/locale/en_US/LC_MESSAGES/fileutils.mo. I don't have this file,
> so things were getting confused.

No, that's not the core problem.  The read already failed with EIO, so
'cp' (er, libc) is trying to find the printable error message that
maps to EIO.  It does this by trying to look in the locale-specific
files (fileutils.mo) first.  If that doesn't exist (which it does not
on your system) it will try a few other locations until it gives up
and uses the internal string reprentation, "Input/output error".

> So like I said, I've been able to get out all the stuff I need from this
> file, so it's mostly academic interest at this point. Just kind of
> curious. Many thanks to everyone for all the help and expertise--

Well, the error is coming from mm/filemap.c:do_generic_file_read(),
in particular this code block:

			if (Page_Uptodate(page))
				goto page_ok;

			/* Again, try some read-ahead while waiting for the page to finish.. */
			generic_file_readahead(reada_ok, filp, inode, page);
			wait_on_page(page);
			if (Page_Uptodate(page))
				goto page_ok;
			error = -EIO;

(this code is from RedHat's 2.4.9-21 kernel, YMMV).  Basically what's
going on is that it tries to see if the page is up to date.  If it's
not, then it performs some readahead and waits on the papge.  If the
page isn't ready when it gets woken up, it returns an I/O Error.

So, that's what you are seeing.  A better question is: why?  I don't
know.

-derek

-- 
       Derek Atkins, SB '93 MIT EE, SM '95 MIT Media Laboratory
       Member, MIT Student Information Processing Board  (SIPB)
       URL: http://web.mit.edu/warlord/    PP-ASEL-IA     N1NWH
       warlord at MIT.EDU                        PGP key available



More information about the Discuss mailing list