diff options
| author | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2013-03-26 09:19:02 -0700 | 
|---|---|---|
| committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2013-03-26 09:19:02 -0700 | 
| commit | e58b9a25eeb89ab2ee05cd093f6d7bc2f34acb21 (patch) | |
| tree | 40162c796bc60f00d062b37718dc62adc970ac07 /fs/cifs/cifsfs.c | |
| parent | a6025a2a861845447adeb7a11c3043039959d3a1 (diff) | |
| parent | df8c3dbee9e6f19ddb0ae8e05cdf76eb2d3b7f00 (diff) | |
| download | olio-linux-3.10-e58b9a25eeb89ab2ee05cd093f6d7bc2f34acb21.tar.xz olio-linux-3.10-e58b9a25eeb89ab2ee05cd093f6d7bc2f34acb21.zip | |
Merge tag 'arizona-extcon-asoc' of git://git.kernel.org/pub/scm/linux/kernel/git/broonie/misc into char-misc-next
Mark writes:
	ASoC/extcon: arizona: Fix interaction between HPDET and headphone outputs
	This patch series covers both ASoC and extcon subsystems and fixes an
	interaction between the HPDET function and the headphone outputs - we
	really shouldn't run HPDET while the headphone is active.  The first
	patch is a refactoring to make the extcon side easier.
Diffstat (limited to 'fs/cifs/cifsfs.c')
| -rw-r--r-- | fs/cifs/cifsfs.c | 25 | 
1 files changed, 25 insertions, 0 deletions
| diff --git a/fs/cifs/cifsfs.c b/fs/cifs/cifsfs.c index 1a052c0eee8..345fc89c428 100644 --- a/fs/cifs/cifsfs.c +++ b/fs/cifs/cifsfs.c @@ -91,6 +91,30 @@ struct workqueue_struct	*cifsiod_wq;  __u8 cifs_client_guid[SMB2_CLIENT_GUID_SIZE];  #endif +/* + * Bumps refcount for cifs super block. + * Note that it should be only called if a referece to VFS super block is + * already held, e.g. in open-type syscalls context. Otherwise it can race with + * atomic_dec_and_test in deactivate_locked_super. + */ +void +cifs_sb_active(struct super_block *sb) +{ +	struct cifs_sb_info *server = CIFS_SB(sb); + +	if (atomic_inc_return(&server->active) == 1) +		atomic_inc(&sb->s_active); +} + +void +cifs_sb_deactive(struct super_block *sb) +{ +	struct cifs_sb_info *server = CIFS_SB(sb); + +	if (atomic_dec_and_test(&server->active)) +		deactivate_super(sb); +} +  static int  cifs_read_super(struct super_block *sb)  { @@ -777,6 +801,7 @@ struct file_system_type cifs_fs_type = {  	.kill_sb = cifs_kill_sb,  	/*  .fs_flags */  }; +MODULE_ALIAS_FS("cifs");  const struct inode_operations cifs_dir_inode_ops = {  	.create = cifs_create,  	.atomic_open = cifs_atomic_open, |