All of lore.kernel.org
 help / color / mirror / Atom feed
From: Al Viro <viro@ZenIV.linux.org.uk>
To: Boaz Harrosh <bharrosh@panasas.com>
Cc: Benny Halevy <bhalevy@panasas.com>,
	linux-fsdevel <linux-fsdevel@vger.kernel.org>,
	"J. Bruce Fields" <bfields@citi.umich.edu>,
	pNFS Mailing List <pnfs@linux-nfs.org>,
	linux-kernel <linux-kernel@vger.kernel.org>,
	Doug Nazar <nazard.lkml@gmail.com>
Subject: Re: [pnfs] [GIT BISECT] first bad commit: 1f36f774 Switch !O_CREAT case to use of do_last()
Date: Thu, 25 Mar 2010 14:04:57 +0000	[thread overview]
Message-ID: <20100325140457.GB30031@ZenIV.linux.org.uk> (raw)
In-Reply-To: <4BAB6911.5020009@panasas.com>

On Thu, Mar 25, 2010 at 03:45:53PM +0200, Boaz Harrosh wrote:
> > Does open() of directory _without_ O_DIRECTORY work in e.g. vanilla 2.6.33?
> > It certainly does for local filesystems and it does for NFSv3; does it work
> > for NFSv4?
> 
> In my tests. Every thing is the same safe the client with the above change.
> 
> So I guess NFSv4 does something different when asked for directory lookup
> as opposed to files lookup. I guess there is something added/removed to
> the compound depending on that flag. But I wouldn't know, I am not familiar 
> with this code. NFSv4 someone?

OK, what happens if you do the following:

mount the same fs from two clients
on one client:
mkdir /mnt/weird_name_69
on another:
echo 'main() {open("/mnt/weird_name_69", 0);}' >/tmp/a.c
gcc /tmp/a.c
strace ./a.out
ls -l /mnt/weird_name_69
strace ./a.out

Will the first strace show EISDIR and the second succeed?

>From my reading of that code (2.6.33, before all that stuff got merged),
we have different behaviour depending on which codepath do we hit.
If we go through ->d_revalidate(), it sees that it's not S_ISREG() and
doesn't try to play with atomic open.  If we go through ->lookup(), we
tell the server to open it, and when it tells us to bugger off (it's a
directory, NFSv4 doesn't support atomic open for those), -EISDIR is
passed to caller.  Which leads to open() failing.

It definitely looks like a bug.  Masked by O_DIRECTORY in 2.6.33.  Bug
in fs/namei.c patch has exposed that crap both for O_DIRECTORY and !O_DIRECTORY
cases.

So immediate fix will need to be along the lines of "add LOOKUP_DIRECTORY
even on the last step if we have *want_dir" (and I'd probably get rid of
want_dir then and just abuse nd->flags), but there's a real NFS bug as
well.

  reply	other threads:[~2010-03-25 14:05 UTC|newest]

Thread overview: 51+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-03-24 15:49 [GIT BISECT] first bad commit: 1f36f774 Switch !O_CREAT case to use of do_last() Boaz Harrosh
2010-03-24 15:49 ` Boaz Harrosh
2010-03-24 16:00 ` Al Viro
2010-03-24 16:04   ` Boaz Harrosh
2010-03-24 16:07     ` Al Viro
2010-03-24 16:10       ` Boaz Harrosh
2010-03-24 16:39         ` Al Viro
2010-03-24 17:15           ` Boaz Harrosh
2010-03-24 17:32             ` [pnfs] " Boaz Harrosh
2010-03-24 17:47               ` Boaz Harrosh
2010-03-24 17:58                 ` Boaz Harrosh
2010-03-24 18:06                   ` Al Viro
2010-03-24 18:26                     ` Doug Nazar
2010-03-24 18:56                       ` Al Viro
2010-03-25  9:39                         ` Boaz Harrosh
2010-03-25 10:12                           ` Al Viro
2010-03-25 10:22                             ` Benny Halevy
2010-03-25 10:31                               ` Benny Halevy
2010-03-25 10:49                               ` Al Viro
2010-03-25 10:56                                 ` Benny Halevy
2010-03-25 11:00                                   ` Al Viro
2010-03-25 11:12                                     ` Benny Halevy
2010-03-25 11:13                                       ` Benny Halevy
2010-03-25 11:55                                 ` Al Viro
2010-03-25 13:00                                   ` Boaz Harrosh
2010-03-25 13:11                                     ` Boaz Harrosh
2010-03-25 10:54                             ` Al Viro
2010-03-25 11:19                               ` Benny Halevy
2010-03-25 12:07                               ` Benny Halevy
2010-03-25 12:18                                 ` Benny Halevy
2010-03-25 13:06                                   ` Al Viro
2010-03-25 13:30                                     ` Boaz Harrosh
2010-03-25 13:37                                       ` Al Viro
2010-03-25 13:45                                         ` Boaz Harrosh
2010-03-25 14:04                                           ` Al Viro [this message]
2010-03-25 14:27                                             ` Boaz Harrosh
2010-03-25 15:25                                               ` Al Viro
2010-03-25 17:28                                                 ` Boaz Harrosh
2010-03-25 17:59                                                   ` Trond Myklebust
2010-03-25 18:06                                                     ` Boaz Harrosh
2010-03-25 18:18                                                       ` Trond Myklebust
2010-03-25 18:33                                                         ` Boaz Harrosh
2010-03-25 13:52                                         ` Benny Halevy
2010-03-25 14:06                                           ` Al Viro
2010-03-25 14:07                                             ` Benny Halevy
2010-03-25 14:36                                               ` Benny Halevy
2010-03-24 18:02                 ` Trond Myklebust
2010-03-24 18:10                   ` Trond Myklebust
2010-03-25  9:13                     ` Boaz Harrosh
2010-03-25 15:44                       ` Trond Myklebust
2010-03-25 10:11                     ` Benny Halevy

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=20100325140457.GB30031@ZenIV.linux.org.uk \
    --to=viro@zeniv.linux.org.uk \
    --cc=bfields@citi.umich.edu \
    --cc=bhalevy@panasas.com \
    --cc=bharrosh@panasas.com \
    --cc=linux-fsdevel@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=nazard.lkml@gmail.com \
    --cc=pnfs@linux-nfs.org \
    /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.