public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Andreas Gruenbacher <agruen@suse.de>
To: linux-kernel@vger.kernel.org
Cc: John Johansen <jjohansen@suse.de>, Jan Blunck <jblunck@suse.de>,
	Erez Zadok <ezk@cs.sunysb.edu>,
	"Josef 'Jeff' Sipek" <jsipek@cs.sunysb.edu>
Subject: [RFC 00/10] Split up struct nameidata (take 3)
Date: Wed, 08 Aug 2007 19:16:22 +0200	[thread overview]
Message-ID: <20070808171622.632749741@suse.de> (raw)

In several places where no nameidata object is available, we are
currently passing NULL instead of constructing a temporary nameidata
object.  This is because struct nameidata is big, and constructing
temporary nameidata objects is not efficient.  Here is another shot at
splitting up struct nameidata: struct vfs_lookup is similar to struct
nameidata but leaves out the fields required only while walking an
actual pathname.  It fits in 24 bytes as opposed to 80 on x86.

This allows to construct temporary vfs_lookup objects where needed
instead of the NULL passing, which gets rid of the associated NULL
checking, and ensures that struct vfsmnt and the lookup intent are
passed down consistently.

In addition, the dentry and vfsmnt in struct vfs_lookup (before: struct
nameidata) are put inside a struct path. This allows to use
path{get,put} instead of mnt{get,put} plus d{get,put}, resulting in more
consistent code. The path{get,put} functions seemingly were suggested by
Erez Zadok / Josef 'Jeff' Sipek; Jan Blunck has been working on this
recently as well.


This proposal consists of the following patches:

nameidata-split.diff

	Introduce struct vfs_lookup and change struct nameidata to
	embed a struct vfs_lookup.  (Requires the next patch to build.)

nameidata-split-2.diff

	Update all nameidata users.

permission-args.diff

	Switch from struct nameidata to struct vfs_lookup in the
	permission inode operation and related functions.

file_permission.diff

	Create a temporary vfs_lookup object in file_permission().

sys_fchdir.diff
do_path_lookup.diff

	Use vfs_permission() instead of file_permission().

create-args.diff

	Switch from struct nameidata to struct vfs_lookup in the
	create inode operation and related functions.

vfs_create-nameidata.diff

	Fix all users of vfs_create() to never pass it a NULL
	vfs_lookup.  Get rid of the NULL checks.

d_revalidate-args.diff

	Switch from struct nameidata to struct vfs_lookup in the
	d_revalidate dentry operation and related functions.

lookup-args.diff

	Switch from struct nameidata to struct vfs_lookup in the
	lookup inode operation and related functions.


Ultimately, it would be nice to get rid of all the NULL nameidata /
vfs_lookup passing, particularly to the permission inode operation. At
that point, permission() could be replaced entirely by vfs_permission().
Other vfs functions like vfs_create() can be cleaned up in a similar
way.


Andreas


             reply	other threads:[~2007-08-08 17:19 UTC|newest]

Thread overview: 35+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-08-08 17:16 Andreas Gruenbacher [this message]
2007-08-08 17:16 ` [RFC 01/10] Split up struct nameidata Andreas Gruenbacher
2007-08-08 19:32   ` Christoph Hellwig
2007-08-09  8:26     ` atomic open (was Re: [RFC 01/10] Split up struct nameidata) Miklos Szeredi
2007-08-10 14:42     ` [RFC 01/10] Split up struct nameidata Andreas Gruenbacher
2007-08-10 14:22       ` [patch 1/4] Introduce pathput Andreas Gruenbacher
2007-08-29 19:07         ` Christoph Hellwig
2007-09-14 16:36           ` Christoph Hellwig
2007-08-10 14:22       ` [patch 2/4] Use pathput in a few more places Andreas Gruenbacher
2007-08-29 19:08         ` Christoph Hellwig
2007-08-30 15:01           ` [FIX] mntput called before dput in afs Andreas Gruenbacher
2007-08-30 15:15             ` David Howells
2007-08-30 15:56             ` David Howells
2007-08-10 14:22       ` [patch 3/4] Introduce pathget Andreas Gruenbacher
2007-08-29 19:09         ` Christoph Hellwig
2007-08-10 14:22       ` [patch 4/4] Switch to struct path in fs_struct Andreas Gruenbacher
2007-08-29 19:12         ` Christoph Hellwig
2007-08-08 17:16 ` [RFC 02/10] Switch from nd->{mnt,dentry} to nd->lookup.path.{mnt,dentry} Andreas Gruenbacher
2007-08-08 17:16 ` [RFC 03/10] Pass no unnecessary information to iop->permission Andreas Gruenbacher
2007-08-08 17:16 ` [RFC 04/10] Temporary struct vfs_lookup in file_permission Andreas Gruenbacher
2007-08-08 17:58   ` Josef Sipek
2007-08-08 18:56     ` Andreas Gruenbacher
2007-08-08 19:25   ` Christoph Hellwig
2007-08-08 21:41     ` Andreas Gruenbacher
2007-08-08 23:24       ` Christoph Hellwig
2007-08-09 17:23         ` Andreas Gruenbacher
2007-08-08 17:16 ` [RFC 05/10] Use vfs_permission instead of file_permission in sys_fchdir Andreas Gruenbacher
2007-08-08 19:26   ` Christoph Hellwig
2007-08-08 17:16 ` [RFC 06/10] Use vfs_permission instead of file_permission in do_path_lookup Andreas Gruenbacher
2007-08-08 19:27   ` Christoph Hellwig
2007-08-08 17:16 ` [RFC 07/10] Pass no unnecessary information to iop->create Andreas Gruenbacher
2007-08-08 17:16 ` [RFC 08/10] Pass no NULL vfs_lookup to vfs_create Andreas Gruenbacher
2007-08-08 19:36   ` Christoph Hellwig
2007-08-08 17:16 ` [RFC 09/10] Pass no unnecessary information to dop->d_revalidate Andreas Gruenbacher
2007-08-08 17:16 ` [RFC 10/10] Pass no unnecessary information to iop->lookup Andreas Gruenbacher

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=20070808171622.632749741@suse.de \
    --to=agruen@suse.de \
    --cc=ezk@cs.sunysb.edu \
    --cc=jblunck@suse.de \
    --cc=jjohansen@suse.de \
    --cc=jsipek@cs.sunysb.edu \
    --cc=linux-kernel@vger.kernel.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox