All of lore.kernel.org
 help / color / mirror / Atom feed
From: Hans Reiser <reiser@namesys.com>
To: Perry Kundert <perry@kundert.ca>
Cc: reiserfs-list@namesys.com
Subject: Re: Reiser4 changes meaning of ENOENT/EACCES, breaking gcc?
Date: Fri, 30 Jul 2004 11:57:35 -0700	[thread overview]
Message-ID: <410A9A1F.1090406@namesys.com> (raw)
In-Reply-To: <41098E4C.9070007@kundert.ca>

Perry Kundert wrote:

> Hello;
>
>    I am running 2.6.5 patched wtih Debian package 
> "kernel-patch-2.6-reiser4", varsion 20040326-2.  So far, my uptime is 
> 65 days, running a quite active Apache/NFS/WiFi/Shorewall server.  
> Some known problems with corruption of Mozilla's configuration and 
> mail files when it accesses them over NFS (and corruption of files 
> written by the "tee" program, oddly enough), but everything else seems 
> to work fine.  Until now...
>
>    I am attempting to build openzaurus.  Along the way it builds 
> glibc, which fails due to the following problem (see below).
>
>    Question:  has reiser4 changed the semantics of accessing 
> directories and files in such a way that we should expect similar 
> failures in other programs that use error codes to distinguish between 
> files and directories?

Well, we made files act as directories for their metafiles, so, yes.

> Is this a known/expected issue

no, I didn't know that there were many programs that did this.  It is a 
little bit too be expected though.   Is the testing code by any chance 
written by David Woodhouse?

> that is not expected to cause too many problems?
>
>    By the way, his suggested workaround was effective...

Can you talk the glibc guys into adopting it?  That would be best.

>
> -- 
>    -pjk
>
>
>
>> Situation: reiser4 filesystem, wd contains an ordinary file mode 0644 
>> named
>> 'nss'. (This is important).
>>
>> Cause: in gcc/cppfiles.c,
>> _cpp_find_file() calls find_file_in_dir() on . for nss/nsswitch.h
>> find_file_in_dir() calls open_file() on ./nss/nsswitch.h
>> open_file() calls open() on ./nss/nsswitch.h
>> Instead of failing ENOTDIR, open() fails EACCES. This is because 
>> under reiser4
>> all files are directories so ENOTDIR is unused as an error code; 
>> instead it
>> tries to read 'nss' as a directory but as 'nss' is 0644 its 
>> "directory contents"
>> are not accessible.
>> On any normal file system, open() fails ENOTDIR, open_file() returns 
>> false
>> converting ENOTDIR to ENOENT, find_file_in_dir() returns false, and
>> _cpp_find_file() continues to the next node in the include list, 
>> eventually
>> finding nss/nsswitch.h in -I..
>> On reiser4, open() fails EACCES, open_file() returns false, 
>> find_file_in_dir()
>> calls open_file_failed() and returns true, everything falls apart.
>>
>> The workaround I suggest for glibc is to make 'nss' 0755 thus causing 
>> open() to
>> fail ENOENT which causes _cpp_find_file_in_dir() to continue to the 
>> next node in
>> the include list.
>>
>> The fix I suggest for gcc is to make EACCES non-fatal: gcc should 
>> instead of
>> failing print a warning message and continue searching for an include 
>> file it
>> can access.
>> The patch is obvious and I will attach it as soon as I have tested it 
>> properly.
>>
>> -- 
>>           Summary: "Permission denied" compiling glibc 2.3.3 on reiser4:
>>                    EACCES fatal to #include
>>           Product: gcc
>>           Version: 3.4.0
>>            Status: UNCONFIRMED
>>          Severity: normal
>>          Priority: P2
>>         Component: c
>>        AssignedTo: unassigned at gcc dot gnu dot org
>>        ReportedBy: ed at catmur dot co dot uk
>>                CC: gcc-bugs at gcc dot gnu dot org
>>
>>
>> http://gcc.gnu.org/bugzilla/show_bug.cgi?id=15772
>>
>
>


  reply	other threads:[~2004-07-30 18:57 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2004-07-29 23:54 Reiser4 changes meaning of ENOENT/EACCES, breaking gcc? Perry Kundert
2004-07-30 18:57 ` Hans Reiser [this message]
2004-07-30 20:57   ` Valdis.Kletnieks
2004-07-31  5:22     ` Hans Reiser

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=410A9A1F.1090406@namesys.com \
    --to=reiser@namesys.com \
    --cc=perry@kundert.ca \
    --cc=reiserfs-list@namesys.com \
    /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.