diff options
Diffstat (limited to 'fs/autofs/root.c')
| -rw-r--r-- | fs/autofs/root.c | 44 | 
1 files changed, 12 insertions, 32 deletions
diff --git a/fs/autofs/root.c b/fs/autofs/root.c index e646569c75ed..29abafc0ce31 100644 --- a/fs/autofs/root.c +++ b/fs/autofs/root.c @@ -60,38 +60,15 @@ const struct dentry_operations autofs_dentry_operations = {  	.d_release	= autofs_dentry_release,  }; -static void autofs_add_active(struct dentry *dentry) -{ -	struct autofs_sb_info *sbi = autofs_sbi(dentry->d_sb); -	struct autofs_info *ino; - -	ino = autofs_dentry_ino(dentry); -	if (ino) { -		spin_lock(&sbi->lookup_lock); -		if (!ino->active_count) { -			if (list_empty(&ino->active)) -				list_add(&ino->active, &sbi->active_list); -		} -		ino->active_count++; -		spin_unlock(&sbi->lookup_lock); -	} -} -  static void autofs_del_active(struct dentry *dentry)  {  	struct autofs_sb_info *sbi = autofs_sbi(dentry->d_sb);  	struct autofs_info *ino;  	ino = autofs_dentry_ino(dentry); -	if (ino) { -		spin_lock(&sbi->lookup_lock); -		ino->active_count--; -		if (!ino->active_count) { -			if (!list_empty(&ino->active)) -				list_del_init(&ino->active); -		} -		spin_unlock(&sbi->lookup_lock); -	} +	spin_lock(&sbi->lookup_lock); +	list_del_init(&ino->active); +	spin_unlock(&sbi->lookup_lock);  }  static int autofs_dir_open(struct inode *inode, struct file *file) @@ -527,19 +504,22 @@ static struct dentry *autofs_lookup(struct inode *dir,  		if (!autofs_oz_mode(sbi) && !IS_ROOT(dentry->d_parent))  			return ERR_PTR(-ENOENT); -		/* Mark entries in the root as mount triggers */ -		if (IS_ROOT(dentry->d_parent) && -		    autofs_type_indirect(sbi->type)) -			__managed_dentry_set_managed(dentry); -  		ino = autofs_new_ino(sbi);  		if (!ino)  			return ERR_PTR(-ENOMEM); +		spin_lock(&sbi->lookup_lock); +		spin_lock(&dentry->d_lock); +		/* Mark entries in the root as mount triggers */ +		if (IS_ROOT(dentry->d_parent) && +		    autofs_type_indirect(sbi->type)) +			__managed_dentry_set_managed(dentry);  		dentry->d_fsdata = ino;  		ino->dentry = dentry; -		autofs_add_active(dentry); +		list_add(&ino->active, &sbi->active_list); +		spin_unlock(&sbi->lookup_lock); +		spin_unlock(&dentry->d_lock);  	}  	return NULL;  }  |