On Tue, 2005-03-22 at 19:10 -0800, Andrew Morton wrote:
 There's a patch for you over on linux-mm. 
Looks sane; added to the BK tree. Thanks.
 Is there an audit mailing list? 
There is. linux-audit(a)redhat.com
 Begin forwarded message:
 
 Date: Tue, 22 Mar 2005 19:15:02 -0800
 From: pmeda(a)akamai.com
 To: akpm(a)osdl.org
 Cc: linux-mm(a)kvack.org
 Subject: [PATCH] namei: add audit_inode to all branches in path_lookup
 
 
 
 Main change is in path_lookup: added a goto to do audit_inode
 instead of return statement, when emul_lookup_dentry for root
 is successful.  The existing code does audit_inode only when
 lookup is done in normal root or cwd.
 
 Other changes: Some lookup routines are returning zero on success,
 and some are returning zero on failure. I documented the related
 function signatures in this code path, so that one can glance over
 abstract functions without understanding the entire code.
 
 Signed-off-by: Prasanna Meda <pmeda(a)akamai.com>
 
 
 --- linux/fs/namei.c	Tue Mar 22 01:29:37 2005
 +++ Linux/fs/namei.c	Tue Mar 22 01:48:24 2005
 @@ -675,11 +675,11 @@
  
  /*
   * Name resolution.
 + * This is the basic name resolution function, turning a pathname into
 + * the final dentry. We expect 'base' to be positive and a directory.
   *
 - * This is the basic name resolution function, turning a pathname
 - * into the final dentry.
 - *
 - * We expect 'base' to be positive and a directory.
 + * Returns 0 and nd will have valid dentry and mnt on success.
 + * Returns error and drops reference to input namei data on failure.
   */
  int fastcall link_path_walk(const char * name, struct nameidata *nd)
  {
 @@ -887,8 +887,10 @@
  	return link_path_walk(name, nd);
  }
  
 -/* SMP-safe */
 -/* returns 1 if everything is done */
 +/* 
 + * SMP-safe: Returns 1 and nd will have valid dentry and mnt, if
 + * everything is done. Returns 0 and drops input nd, if lookup failed;
 + */
  static int __emul_lookup_dentry(const char *name, struct nameidata *nd)
  {
  	if (path_walk(name, nd))
 @@ -952,9 +954,10 @@
  	}
  }
  
 +/* Returns 0 and nd will be valid on success; Retuns error, otherwise. */
  int fastcall path_lookup(const char *name, unsigned int flags, struct nameidata *nd)
  {
 -	int retval;
 +	int retval = 0;
  
  	nd->last_type = LAST_ROOT; /* if there are only slashes... */
  	nd->flags = flags;
 @@ -967,7 +970,7 @@
  			nd->dentry = dget(current->fs->altroot);
  			read_unlock(¤t->fs->lock);
  			if (__emul_lookup_dentry(name,nd))
 -				return 0;
 +				goto out; /* found in altroot */
  			read_lock(¤t->fs->lock);
  		}
  		nd->mnt = mntget(current->fs->rootmnt);
 @@ -979,6 +982,7 @@
  	read_unlock(¤t->fs->lock);
  	current->total_link_count = 0;
  	retval = link_path_walk(name, nd);
 +out:
  	if (unlikely(current->audit_context
  		     && nd && nd->dentry && nd->dentry->d_inode))
  		audit_inode(name, 
-- 
dwmw2