mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Trond Myklebust <trond.myklebust@fys.uio.no>
To: Herbert Poetzl <herbert@13thfloor.at>
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: Tue, 22 Feb 2005 09:45:37 -0500	[thread overview]
Message-ID: <1109083537.9839.18.camel@lade.trondhjem.org> (raw)
In-Reply-To: <20050222121233.GE3682@mail.13thfloor.at>

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.
IS_DEADDIR is also checked in may_create.

>  /* 
>   * 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.

Cheers,
  Trond

-- 
Trond Myklebust <trond.myklebust@fys.uio.no>


  reply	other threads:[~2005-02-22 14:48 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2005-02-22 12:12 Herbert Poetzl
2005-02-22 14:45 ` Trond Myklebust [this message]
2005-02-23 22:48   ` Herbert Poetzl
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=1109083537.9839.18.camel@lade.trondhjem.org \
    --to=trond.myklebust@fys.uio.no \
    --cc=akpm@osdl.org \
    --cc=herbert@13thfloor.at \
    --cc=linux-kernel@vger.kernel.org \
    --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

all inboxes | Powered by JetHome®