dect
/
linux-2.6
Archived
13
0
Fork 0

switch SNDRV_PCM_IOCTL_LINK to fget_light()

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
This commit is contained in:
Al Viro 2012-08-26 21:35:48 -04:00
parent 4109633f4c
commit bdbf69437a
1 changed files with 7 additions and 6 deletions

View File

@ -1563,25 +1563,25 @@ static int snd_pcm_drop(struct snd_pcm_substream *substream)
/* WARNING: Don't forget to fput back the file */ /* WARNING: Don't forget to fput back the file */
static struct file *snd_pcm_file_fd(int fd) static struct file *snd_pcm_file_fd(int fd, int *fput_needed)
{ {
struct file *file; struct file *file;
struct inode *inode; struct inode *inode;
unsigned int minor; unsigned int minor;
file = fget(fd); file = fget_light(fd, fput_needed);
if (!file) if (!file)
return NULL; return NULL;
inode = file->f_path.dentry->d_inode; inode = file->f_path.dentry->d_inode;
if (!S_ISCHR(inode->i_mode) || if (!S_ISCHR(inode->i_mode) ||
imajor(inode) != snd_major) { imajor(inode) != snd_major) {
fput(file); fput_light(file, *fput_needed);
return NULL; return NULL;
} }
minor = iminor(inode); minor = iminor(inode);
if (!snd_lookup_minor_data(minor, SNDRV_DEVICE_TYPE_PCM_PLAYBACK) && if (!snd_lookup_minor_data(minor, SNDRV_DEVICE_TYPE_PCM_PLAYBACK) &&
!snd_lookup_minor_data(minor, SNDRV_DEVICE_TYPE_PCM_CAPTURE)) { !snd_lookup_minor_data(minor, SNDRV_DEVICE_TYPE_PCM_CAPTURE)) {
fput(file); fput_light(file, *fput_needed);
return NULL; return NULL;
} }
return file; return file;
@ -1597,8 +1597,9 @@ static int snd_pcm_link(struct snd_pcm_substream *substream, int fd)
struct snd_pcm_file *pcm_file; struct snd_pcm_file *pcm_file;
struct snd_pcm_substream *substream1; struct snd_pcm_substream *substream1;
struct snd_pcm_group *group; struct snd_pcm_group *group;
int fput_needed;
file = snd_pcm_file_fd(fd); file = snd_pcm_file_fd(fd, &fput_needed);
if (!file) if (!file)
return -EBADFD; return -EBADFD;
pcm_file = file->private_data; pcm_file = file->private_data;
@ -1633,7 +1634,7 @@ static int snd_pcm_link(struct snd_pcm_substream *substream, int fd)
write_unlock_irq(&snd_pcm_link_rwlock); write_unlock_irq(&snd_pcm_link_rwlock);
up_write(&snd_pcm_link_rwsem); up_write(&snd_pcm_link_rwsem);
_nolock: _nolock:
fput(file); fput_light(file, fput_needed);
if (res < 0) if (res < 0)
kfree(group); kfree(group);
return res; return res;