diff options
| author | Al Viro <viro@zeniv.linux.org.uk> | 2011-11-25 00:33:11 -0500 | 
|---|---|---|
| committer | Al Viro <viro@zeniv.linux.org.uk> | 2012-01-03 22:57:09 -0500 | 
| commit | 900148dcac6bc93ca688d64a7f9a9f8d706e0d1c (patch) | |
| tree | 69077133e37e105fc88873429f33469c67a840c6 | |
| parent | 95bc5f25c10fcdf02c53af1eda987f58d0bc377c (diff) | |
vfs: spread struct mount - mntput_no_expire
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
| -rw-r--r-- | fs/namespace.c | 13 | 
1 files changed, 7 insertions, 6 deletions
| diff --git a/fs/namespace.c b/fs/namespace.c index 6b5e0436acfd..3e95cc26dda6 100644 --- a/fs/namespace.c +++ b/fs/namespace.c @@ -763,9 +763,8 @@ static inline void mntfree(struct mount *mnt)  	deactivate_super(sb);  } -static void mntput_no_expire(struct vfsmount *m) +static void mntput_no_expire(struct mount *mnt)  { -	struct mount *mnt = real_mount(m);  put_again:  #ifdef CONFIG_SMP  	br_read_lock(vfsmount_lock); @@ -792,7 +791,7 @@ put_again:  		mnt_add_count(mnt, mnt->mnt.mnt_pinned + 1);  		mnt->mnt.mnt_pinned = 0;  		br_write_unlock(vfsmount_lock); -		acct_auto_close_mnt(m); +		acct_auto_close_mnt(&mnt->mnt);  		goto put_again;  	}  	br_write_unlock(vfsmount_lock); @@ -805,7 +804,7 @@ void mntput(struct vfsmount *mnt)  		/* avoid cacheline pingpong, hope gcc doesn't get "smart" */  		if (unlikely(mnt->mnt_expiry_mark))  			mnt->mnt_expiry_mark = 0; -		mntput_no_expire(mnt); +		mntput_no_expire(real_mount(mnt));  	}  }  EXPORT_SYMBOL(mntput); @@ -1351,6 +1350,7 @@ static int do_umount(struct mount *mnt, int flags)  SYSCALL_DEFINE2(umount, char __user *, name, int, flags)  {  	struct path path; +	struct mount *mnt;  	int retval;  	int lookup_flags = 0; @@ -1363,6 +1363,7 @@ SYSCALL_DEFINE2(umount, char __user *, name, int, flags)  	retval = user_path_at(AT_FDCWD, name, lookup_flags, &path);  	if (retval)  		goto out; +	mnt = real_mount(path.mnt);  	retval = -EINVAL;  	if (path.dentry != path.mnt->mnt_root)  		goto dput_and_out; @@ -1373,11 +1374,11 @@ SYSCALL_DEFINE2(umount, char __user *, name, int, flags)  	if (!capable(CAP_SYS_ADMIN))  		goto dput_and_out; -	retval = do_umount(real_mount(path.mnt), flags); +	retval = do_umount(mnt, flags);  dput_and_out:  	/* we mustn't call path_put() as that would clear mnt_expiry_mark */  	dput(path.dentry); -	mntput_no_expire(path.mnt); +	mntput_no_expire(mnt);  out:  	return retval;  } | 
