mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 10:40:15 +02:00 
			
		
		
		
	helper for reading ->d_count
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
This commit is contained in:
		
							parent
							
								
									74b9272bbe
								
							
						
					
					
						commit
						84d08fa888
					
				
					 12 changed files with 22 additions and 17 deletions
				
			
		| 
						 | 
				
			
			@ -60,7 +60,7 @@ truncate_complete_page(struct address_space *mapping, struct page *page)
 | 
			
		|||
	ll_delete_from_page_cache(page);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#  define d_refcount(d)		 ((d)->d_count)
 | 
			
		||||
#  define d_refcount(d)		 d_count(d)
 | 
			
		||||
 | 
			
		||||
#ifdef ATTR_OPEN
 | 
			
		||||
# define ATTR_FROM_OPEN ATTR_OPEN
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -109,7 +109,7 @@ static struct dentry *get_next_positive_subdir(struct dentry *prev,
 | 
			
		|||
 | 
			
		||||
	spin_lock_nested(&q->d_lock, DENTRY_D_LOCK_NESTED);
 | 
			
		||||
	/* Already gone or negative dentry (under construction) - try next */
 | 
			
		||||
	if (q->d_count == 0 || !simple_positive(q)) {
 | 
			
		||||
	if (!d_count(q) || !simple_positive(q)) {
 | 
			
		||||
		spin_unlock(&q->d_lock);
 | 
			
		||||
		next = q->d_u.d_child.next;
 | 
			
		||||
		goto cont;
 | 
			
		||||
| 
						 | 
				
			
			@ -267,7 +267,7 @@ static int autofs4_tree_busy(struct vfsmount *mnt,
 | 
			
		|||
			else
 | 
			
		||||
				ino_count++;
 | 
			
		||||
 | 
			
		||||
			if (p->d_count > ino_count) {
 | 
			
		||||
			if (d_count(p) > ino_count) {
 | 
			
		||||
				top_ino->last_used = jiffies;
 | 
			
		||||
				dput(p);
 | 
			
		||||
				return 1;
 | 
			
		||||
| 
						 | 
				
			
			@ -409,7 +409,7 @@ struct dentry *autofs4_expire_indirect(struct super_block *sb,
 | 
			
		|||
		if (!exp_leaves) {
 | 
			
		||||
			/* Path walk currently on this dentry? */
 | 
			
		||||
			ino_count = atomic_read(&ino->count) + 1;
 | 
			
		||||
			if (dentry->d_count > ino_count)
 | 
			
		||||
			if (d_count(dentry) > ino_count)
 | 
			
		||||
				goto next;
 | 
			
		||||
 | 
			
		||||
			if (!autofs4_tree_busy(mnt, dentry, timeout, do_now)) {
 | 
			
		||||
| 
						 | 
				
			
			@ -423,7 +423,7 @@ struct dentry *autofs4_expire_indirect(struct super_block *sb,
 | 
			
		|||
		} else {
 | 
			
		||||
			/* Path walk currently on this dentry? */
 | 
			
		||||
			ino_count = atomic_read(&ino->count) + 1;
 | 
			
		||||
			if (dentry->d_count > ino_count)
 | 
			
		||||
			if (d_count(dentry) > ino_count)
 | 
			
		||||
				goto next;
 | 
			
		||||
 | 
			
		||||
			expired = autofs4_check_leaves(mnt, dentry, timeout, do_now);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -179,7 +179,7 @@ static struct dentry *autofs4_lookup_active(struct dentry *dentry)
 | 
			
		|||
		spin_lock(&active->d_lock);
 | 
			
		||||
 | 
			
		||||
		/* Already gone? */
 | 
			
		||||
		if (active->d_count == 0)
 | 
			
		||||
		if (!d_count(active))
 | 
			
		||||
			goto next;
 | 
			
		||||
 | 
			
		||||
		qstr = &active->d_name;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -903,8 +903,8 @@ static struct dentry *splice_dentry(struct dentry *dn, struct inode *in,
 | 
			
		|||
	} else if (realdn) {
 | 
			
		||||
		dout("dn %p (%d) spliced with %p (%d) "
 | 
			
		||||
		     "inode %p ino %llx.%llx\n",
 | 
			
		||||
		     dn, dn->d_count,
 | 
			
		||||
		     realdn, realdn->d_count,
 | 
			
		||||
		     dn, d_count(dn),
 | 
			
		||||
		     realdn, d_count(realdn),
 | 
			
		||||
		     realdn->d_inode, ceph_vinop(realdn->d_inode));
 | 
			
		||||
		dput(dn);
 | 
			
		||||
		dn = realdn;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1553,7 +1553,7 @@ char *ceph_mdsc_build_path(struct dentry *dentry, int *plen, u64 *base,
 | 
			
		|||
	*base = ceph_ino(temp->d_inode);
 | 
			
		||||
	*plen = len;
 | 
			
		||||
	dout("build_path on %p %d built %llx '%.*s'\n",
 | 
			
		||||
	     dentry, dentry->d_count, *base, len, path);
 | 
			
		||||
	     dentry, d_count(dentry), *base, len, path);
 | 
			
		||||
	return path;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -526,7 +526,7 @@ static int coda_dentry_revalidate(struct dentry *de, unsigned int flags)
 | 
			
		|||
	if (cii->c_flags & C_FLUSH) 
 | 
			
		||||
		coda_flag_inode_children(inode, C_FLUSH);
 | 
			
		||||
 | 
			
		||||
	if (de->d_count > 1)
 | 
			
		||||
	if (d_count(de) > 1)
 | 
			
		||||
		/* pretend it's valid, but don't change the flags */
 | 
			
		||||
		goto out;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -358,7 +358,7 @@ static int ecryptfs_lookup_interpose(struct dentry *dentry,
 | 
			
		|||
 | 
			
		||||
	lower_mnt = mntget(ecryptfs_dentry_to_lower_mnt(dentry->d_parent));
 | 
			
		||||
	fsstack_copy_attr_atime(dir_inode, lower_dentry->d_parent->d_inode);
 | 
			
		||||
	BUG_ON(!lower_dentry->d_count);
 | 
			
		||||
	BUG_ON(!d_count(lower_dentry));
 | 
			
		||||
 | 
			
		||||
	ecryptfs_set_dentry_private(dentry, dentry_info);
 | 
			
		||||
	ecryptfs_set_dentry_lower(dentry, lower_dentry);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1454,7 +1454,7 @@ static int generic_add_lease(struct file *filp, long arg, struct file_lock **flp
 | 
			
		|||
	if ((arg == F_RDLCK) && (atomic_read(&inode->i_writecount) > 0))
 | 
			
		||||
		goto out;
 | 
			
		||||
	if ((arg == F_WRLCK)
 | 
			
		||||
	    && ((dentry->d_count > 1)
 | 
			
		||||
	    && ((d_count(dentry) > 1)
 | 
			
		||||
		|| (atomic_read(&inode->i_count) > 1)))
 | 
			
		||||
		goto out;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1721,7 +1721,7 @@ int nfs_unlink(struct inode *dir, struct dentry *dentry)
 | 
			
		|||
		dir->i_ino, dentry->d_name.name);
 | 
			
		||||
 | 
			
		||||
	spin_lock(&dentry->d_lock);
 | 
			
		||||
	if (dentry->d_count > 1) {
 | 
			
		||||
	if (d_count(dentry) > 1) {
 | 
			
		||||
		spin_unlock(&dentry->d_lock);
 | 
			
		||||
		/* Start asynchronous writeout of the inode */
 | 
			
		||||
		write_inode_now(dentry->d_inode, 0);
 | 
			
		||||
| 
						 | 
				
			
			@ -1866,7 +1866,7 @@ int nfs_rename(struct inode *old_dir, struct dentry *old_dentry,
 | 
			
		|||
	dfprintk(VFS, "NFS: rename(%s/%s -> %s/%s, ct=%d)\n",
 | 
			
		||||
		 old_dentry->d_parent->d_name.name, old_dentry->d_name.name,
 | 
			
		||||
		 new_dentry->d_parent->d_name.name, new_dentry->d_name.name,
 | 
			
		||||
		 new_dentry->d_count);
 | 
			
		||||
		 d_count(new_dentry));
 | 
			
		||||
 | 
			
		||||
	/*
 | 
			
		||||
	 * For non-directories, check whether the target is busy and if so,
 | 
			
		||||
| 
						 | 
				
			
			@ -1884,7 +1884,7 @@ int nfs_rename(struct inode *old_dir, struct dentry *old_dentry,
 | 
			
		|||
			rehash = new_dentry;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		if (new_dentry->d_count > 2) {
 | 
			
		||||
		if (d_count(new_dentry) > 2) {
 | 
			
		||||
			int err;
 | 
			
		||||
 | 
			
		||||
			/* copy the target dentry's name */
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -479,7 +479,7 @@ nfs_sillyrename(struct inode *dir, struct dentry *dentry)
 | 
			
		|||
 | 
			
		||||
	dfprintk(VFS, "NFS: silly-rename(%s/%s, ct=%d)\n",
 | 
			
		||||
		dentry->d_parent->d_name.name, dentry->d_name.name,
 | 
			
		||||
		dentry->d_count);
 | 
			
		||||
		d_count(dentry));
 | 
			
		||||
	nfs_inc_stats(dir, NFSIOS_SILLYRENAME);
 | 
			
		||||
 | 
			
		||||
	/*
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -996,7 +996,7 @@ static int nilfs_attach_snapshot(struct super_block *s, __u64 cno,
 | 
			
		|||
 | 
			
		||||
static int nilfs_tree_was_touched(struct dentry *root_dentry)
 | 
			
		||||
{
 | 
			
		||||
	return root_dentry->d_count > 1;
 | 
			
		||||
	return d_count(root_dentry) > 1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -324,6 +324,11 @@ static inline int __d_rcu_to_refcount(struct dentry *dentry, unsigned seq)
 | 
			
		|||
	return ret;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static inline unsigned d_count(struct dentry *dentry)
 | 
			
		||||
{
 | 
			
		||||
	return dentry->d_count;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* validate "insecure" dentry pointer */
 | 
			
		||||
extern int d_validate(struct dentry *, struct dentry *);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in a new issue