From: Herbert Poetzl <herbert@13thfloor.at>
To: Trond Myklebust <trond.myklebust@fys.uio.no>
Cc: Andrew Morton <akpm@osdl.org>,
Al Viro <viro@parcelfarce.linux.theplanet.co.uk>,
Linux Kernel ML <linux-kernel@vger.kernel.org>
Subject: Re: [Patch 4/6] Bind Mount Extensions 0.06
Date: Wed, 23 Feb 2005 23:48:01 +0100 [thread overview]
Message-ID: <20050223224801.GB10778@mail.13thfloor.at> (raw)
In-Reply-To: <1109083537.9839.18.camel@lade.trondhjem.org>
On Tue, Feb 22, 2005 at 09:45:37AM -0500, Trond Myklebust wrote:
> ty den 22.02.2005 Klokka 13:12 (+0100) skreiv Herbert Poetzl:
>
> > diff -NurpP --minimal linux-2.6.11-rc4-bme0.06-bm0.01-at0.01-cc0.01/fs/namei.c linux-2.6.11-rc4-bme0.06-bm0.01-at0.01-cc0.01-co0.01/fs/namei.c
> > --- linux-2.6.11-rc4-bme0.06-bm0.01-at0.01-cc0.01/fs/namei.c 2005-02-13 17:16:55 +0100
> > +++ linux-2.6.11-rc4-bme0.06-bm0.01-at0.01-cc0.01-co0.01/fs/namei.c 2005-02-19 06:31:50 +0100
> > @@ -1168,6 +1168,24 @@ static inline int may_create(struct inod
> > return permission(dir,MAY_WRITE | MAY_EXEC, nd);
> > }
> >
> > +static inline int mnt_may_create(struct vfsmount *mnt, struct inode *dir, struct dentry *child) {
> > + if (child->d_inode)
> > + return -EEXIST;
> > + if (IS_DEADDIR(dir))
> > + return -ENOENT;
> > + if (MNT_IS_RDONLY(mnt))
> > + return -EROFS;
> > + return 0;
> > +}
> > +
> > +static inline int mnt_may_unlink(struct vfsmount *mnt, struct inode *dir, struct dentry *child) {
> > + if (!child->d_inode)
> > + return -ENOENT;
> > + if (MNT_IS_RDONLY(mnt))
> > + return -EROFS;
> > + return 0;
> > +}
>
> Most of these checks are redundant, since they are already being done
> elsewhere in the code.
> child->d_inode is, for instance checked in may_delete() and in
> may_create.
well, but mnt_may_create() for example is called from
lookup_create() which in turn is (for example) called
from sys_mknod() which doesn't call may_delete() or
may_create() ... did I miss something?
> IS_DEADDIR is also checked in may_create.
ditto ...
> > /*
> > * Special case: O_CREAT|O_EXCL implies O_NOFOLLOW for security
> > * reasons.
> > @@ -1518,23 +1536,28 @@ do_link:
> > struct dentry *lookup_create(struct nameidata *nd, int is_dir)
> > {
> > struct dentry *dentry;
> > + int error;
> >
> > down(&nd->dentry->d_inode->i_sem);
> > - dentry = ERR_PTR(-EEXIST);
> > + error = -EEXIST;
> > if (nd->last_type != LAST_NORM)
> > - goto fail;
> > + goto out;
> > nd->flags &= ~LOOKUP_PARENT;
> > dentry = lookup_hash(&nd->last, nd->dentry);
> > if (IS_ERR(dentry))
> > + goto ret;
> > + error = mnt_may_create(nd->mnt, nd->dentry->d_inode, dentry);
> > + if (error)
> > goto fail;
> > + error = -ENOENT;
> > if (!is_dir && nd->last.name[nd->last.len] && !dentry->d_inode)
> > - goto enoent;
> > + goto fail;
> > +ret:
> > return dentry;
> > -enoent:
> > - dput(dentry);
> > - dentry = ERR_PTR(-ENOENT);
> > fail:
> > - return dentry;
> > + dput(dentry);
> > +out:
> > + return ERR_PTR(error);
> > }
>
> What is the value of adding "error"?
> The current code is more efficient, and just as readable.
hmm, a compile test resulted in almost
identical code, but maybe I did miss some
aspect of the efficiency ...
anyway, thanks for the feedback,
Herbert
> Cheers,
> Trond
>
> --
> Trond Myklebust <trond.myklebust@fys.uio.no>
next prev parent reply other threads:[~2005-02-23 22:51 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2005-02-22 12:12 [Patch 4/6] Bind Mount Extensions 0.06 Herbert Poetzl
2005-02-22 14:45 ` Trond Myklebust
2005-02-23 22:48 ` Herbert Poetzl [this message]
2005-02-26 18:38 ` Herbert Poetzl
2005-02-23 0:29 ` Ingo Oeser
2005-02-24 21:22 ` Herbert Poetzl
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=20050223224801.GB10778@mail.13thfloor.at \
--to=herbert@13thfloor.at \
--cc=akpm@osdl.org \
--cc=linux-kernel@vger.kernel.org \
--cc=trond.myklebust@fys.uio.no \
--cc=viro@parcelfarce.linux.theplanet.co.uk \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox