Re: [pnfs] [GIT BISECT] first bad commit: 1f36f774 Switch !O_CREAT case to use of do_last()

Benny Halevy
2010-03-25T11:12:41Z

On Mar. 25, 2010, 13:00 +0200, Al Viro <viro@ZenIV.linux.org.uk> wrote:
> On Thu, Mar 25, 2010 at 12:56:40PM +0200, Benny Halevy wrote:
>> - if (*want_dir && !path->dentry->d_inode->i_op->lookup)
>> + if (*want_dir && !path->dentry->d_inode->i_op->lookup) {
>> + WARN_ON(1);
>> goto exit_dput;
>> + }
>> path_to_nameidata(path, nd);
>> audit_inode(pathname, nd->path.dentry);
>> goto ok;
>>
>> but it is NOT tripping for this scenario.
>>
>> (for some reason I saw it tripping when building the kernel over nfs
>> but it's benign)
>
> It's ENOTDIR, not EISDIR, anyway. Happens if you ask to open foo/ or
> foo with O_DIRECTORY when foo is not a directory.

Hmm, not according to my strace (or am I blind today? :)

> > open(".git/objects/pack", O_RDONLY|O_NONBLOCK|O_DIRECTORY|0x80000) = -1 EISDIR (Is a directory)

The odd thing is the app incorrectly gets EISDIR despite
the fact that it is opening a directory with O_DIRECTORY.