Re: [patch 07/28] fs: change d_compare for rcu-walk

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Wed 17 Nov at 01:09:07 +1100 npiggin@xxxxxxxxx said:

> Index: linux-2.6/include/linux/dcache.h
> ===================================================================
> --- linux-2.6.orig/include/linux/dcache.h	2010-11-17 00:52:37.000000000 +1100
> +++ linux-2.6/include/linux/dcache.h	2010-11-17 01:05:48.000000000 +1100
> @@ -134,7 +134,9 @@ enum dentry_d_lock_class
>  struct dentry_operations {
>  	int (*d_revalidate)(struct dentry *, struct nameidata *);
>  	int (*d_hash)(struct dentry *, struct qstr *);
> -	int (*d_compare)(struct dentry *, struct qstr *, struct qstr *);
> +	int (*d_compare)(const struct dentry *,
> +			const struct dentry *, const struct inode *,
> +			unsigned int, const char *, const struct qstr *);
>  	int (*d_delete)(const struct dentry *);
>  	void (*d_release)(struct dentry *);
>  	void (*d_iput)(struct dentry *, struct inode *);

The white space change I'd previously noted may as well happen here
if you're wanting it...just keeps the revision history cleaner for
future eyes.

> Index: linux-2.6/Documentation/filesystems/vfs.txt
> ===================================================================
> --- linux-2.6.orig/Documentation/filesystems/vfs.txt	2010-11-17 00:52:37.000000000 +1100
> +++ linux-2.6/Documentation/filesystems/vfs.txt	2010-11-17 01:05:49.000000000 +1100
> @@ -842,7 +842,9 @@ the VFS uses a default. As of kernel 2.6
>  struct dentry_operations {
>  	int (*d_revalidate)(struct dentry *, struct nameidata *);
>  	int (*d_hash)(struct dentry *, struct qstr *);
> -	int (*d_compare)(struct dentry *, struct qstr *, struct qstr *);
> +	int (*d_compare)(const struct dentry *,
> +			const struct dentry *, const struct inode *,
> +			unsigned int, const char *, const struct qstr *);
>  	int (*d_delete)(const struct dentry *);
>  	void (*d_release)(struct dentry *);
>  	void (*d_iput)(struct dentry *, struct inode *);

Ditto.

> @@ -854,9 +856,26 @@ struct dentry_operations {
>  	dcache. Most filesystems leave this as NULL, because all their
>  	dentries in the dcache are valid
> 
> -  d_hash: called when the VFS adds a dentry to the hash table
> +  d_hash: called when the VFS adds a dentry to the hash table. The first
> +	dentry passed to d_hash is the parent directory that the name is
> + 	to be hashed into.

Similarly it'd be cleaner if this was in the next patch which is changing
d_hash().  Same for the d_hash() prototype white space changes.

> 
> -  d_compare: called when a dentry should be compared with another
> +  d_compare: called to compare a dentry name with a given name. The first
> +	dentry is the parent of the dentry to be compared, the second is
> +	the dentry itself. inode, len, and name string are properties of
> +	the dentry to be compared. qstr is the name to compare it with.
> +
> +	Must be constant and idempotent, and should not take locks if
> +	possible, and should not or store into the dentry or inodes.
                           ^^^^^^^^^^^^^^^^
Verb missing?  Or extra conjunction?

> +	Should not dereference pointers outside the dentry or inodes without
> +	lots of care (eg.  d_parent, d_inode shouldn't be used).
> +
> +	However, our vfsmount is pinned, and RCU held, so the dentries and
> +	inodes won't disappear, neither will our sb or filesystem module.
> +	->i_sb and ->d_sb may be used.
> +
> +	It is a tricky calling convention because it needs to be called under
> +	"rcu-walk", ie. without any locks or references on things.
> 
>    d_delete: called when the last reference to a dentry is dropped and the
>  	dcache is deciding whether or not to cache it. Return 1 to delete

-- 
Tim Pepper  <lnxninja@xxxxxxxxxxxxxxxxxx>
IBM Linux Technology Center
--
To unsubscribe from this list: send the line "unsubscribe linux-fsdevel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux Ext4 Filesystem]     [Union Filesystem]     [Filesystem Testing]     [Ceph Users]     [Ecryptfs]     [AutoFS]     [Kernel Newbies]     [Share Photos]     [Security]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux Cachefs]     [Reiser Filesystem]     [Linux RAID]     [Samba]     [Device Mapper]     [CEPH Development]
  Powered by Linux