linux-fsdevel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* vfs-scale, keep the errno
@ 2011-01-14  3:38 J. R. Okajima
  2011-01-14  4:01 ` Nick Piggin
  0 siblings, 1 reply; 5+ messages in thread
From: J. R. Okajima @ 2011-01-14  3:38 UTC (permalink / raw)
  To: Nick Piggin; +Cc: linux-fsdevel, linux-kernel


When open(2) without O_DIRECTORY opens an existing dir, it should return
EISDIR. In do_last(), the variable 'error' is initialized EISDIR, but it
is changed by d_revalidate() which returns any positive to represent
'the target dir is valid.'
Should we keep and return the initialized 'error' in this case.


J. R. Okajima

diff --git a/fs/namei.c b/fs/namei.c
index 5bb7588..26fa823 100644
--- a/fs/namei.c
+++ b/fs/namei.c
@@ -2102,17 +2118,20 @@ static struct file *do_last(struct nameidata *nd, struct path *path,
 	struct file *filp;
 	int error = -EISDIR;
 
 	switch (nd->last_type) {
 	case LAST_DOTDOT:
 		follow_dotdot(nd);
 		dir = nd->path.dentry;
 	case LAST_DOT:
 		if (need_reval_dot(dir)) {
-			error = d_revalidate(nd->path.dentry, nd);
-			if (!error)
+			int e;
+			e = d_revalidate(nd->path.dentry, nd);
+			if (!e)
 				error = -ESTALE;
-			if (error < 0)
+			if (e < 0) {
+				error = e;
 				goto exit;
+			}
 		}
 		/* fallthrough */
 	case LAST_ROOT:

^ permalink raw reply related	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2011-01-14 15:26 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2011-01-14  3:38 vfs-scale, keep the errno J. R. Okajima
2011-01-14  4:01 ` Nick Piggin
2011-01-14  4:47   ` J. R. Okajima
2011-01-14 13:17   ` Hans-Peter Jansen
2011-01-14 15:26     ` Nick Piggin

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).