Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753813Ab0ALJBc (ORCPT ); Tue, 12 Jan 2010 04:01:32 -0500 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1753533Ab0ALJBb (ORCPT ); Tue, 12 Jan 2010 04:01:31 -0500 Received: from cantor2.suse.de ([195.135.220.15]:51764 "EHLO mx2.suse.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750948Ab0ALJBa (ORCPT ); Tue, 12 Jan 2010 04:01:30 -0500 Date: Tue, 12 Jan 2010 10:01:29 +0100 Message-ID: From: Takashi Iwai To: Alan Cox Cc: linux-kernel@vger.kernel.org Subject: Re: [PATCH] sound_oss: remove use of old BKL ioctl path In-Reply-To: <20100104162249.16949.95784.stgit@localhost.localdomain> References: <20100104162249.16949.95784.stgit@localhost.localdomain> User-Agent: Wanderlust/2.15.6 (Almost Unreal) SEMI/1.14.6 (Maruoka) FLIM/1.14.9 (=?UTF-8?B?R29qxY0=?=) APEL/10.7 Emacs/23.1 (x86_64-suse-linux-gnu) MULE/6.0 (HANACHIRUSATO) MIME-Version: 1.0 (generated by SEMI 1.14.6 - "Maruoka") Content-Type: text/plain; charset=US-ASCII Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 3391 Lines: 111 At Mon, 04 Jan 2010 16:22:59 +0000, Alan Cox wrote: > > Signed-off-by: Alan Cox Thanks, applied. Now we really need to hunt down whether BKL is still needed in that path and fix it eventually... Takashi > --- > > sound/oss/soundcard.c | 35 ++++++++++++++++++++++------------- > 1 files changed, 22 insertions(+), 13 deletions(-) > > > diff --git a/sound/oss/soundcard.c b/sound/oss/soundcard.c > index 61aaeda..6c3267b 100644 > --- a/sound/oss/soundcard.c > +++ b/sound/oss/soundcard.c > @@ -328,11 +328,11 @@ static int sound_mixer_ioctl(int mixdev, unsigned int cmd, void __user *arg) > return mixer_devs[mixdev]->ioctl(mixdev, cmd, arg); > } > > -static int sound_ioctl(struct inode *inode, struct file *file, > - unsigned int cmd, unsigned long arg) > +static long sound_ioctl(struct file *file, unsigned int cmd, unsigned long arg) > { > int len = 0, dtype; > - int dev = iminor(inode); > + int dev = iminor(file->f_dentry->d_inode); > + long ret = -EINVAL; > void __user *p = (void __user *)arg; > > if (_SIOC_DIR(cmd) != _SIOC_NONE && _SIOC_DIR(cmd) != 0) { > @@ -353,6 +353,7 @@ static int sound_ioctl(struct inode *inode, struct file *file, > if (cmd == OSS_GETVERSION) > return __put_user(SOUND_VERSION, (int __user *)p); > > + lock_kernel(); > if (_IOC_TYPE(cmd) == 'M' && num_mixers > 0 && /* Mixer ioctl */ > (dev & 0x0f) != SND_DEV_CTL) { > dtype = dev & 0x0f; > @@ -360,24 +361,31 @@ static int sound_ioctl(struct inode *inode, struct file *file, > case SND_DEV_DSP: > case SND_DEV_DSP16: > case SND_DEV_AUDIO: > - return sound_mixer_ioctl(audio_devs[dev >> 4]->mixer_dev, > + ret = sound_mixer_ioctl(audio_devs[dev >> 4]->mixer_dev, > cmd, p); > - > + break; > default: > - return sound_mixer_ioctl(dev >> 4, cmd, p); > + ret = sound_mixer_ioctl(dev >> 4, cmd, p); > + break; > } > + unlock_kernel(); > + return ret; > } > + > switch (dev & 0x0f) { > case SND_DEV_CTL: > if (cmd == SOUND_MIXER_GETLEVELS) > - return get_mixer_levels(p); > - if (cmd == SOUND_MIXER_SETLEVELS) > - return set_mixer_levels(p); > - return sound_mixer_ioctl(dev >> 4, cmd, p); > + ret = get_mixer_levels(p); > + else if (cmd == SOUND_MIXER_SETLEVELS) > + ret = set_mixer_levels(p); > + else > + ret = sound_mixer_ioctl(dev >> 4, cmd, p); > + break; > > case SND_DEV_SEQ: > case SND_DEV_SEQ2: > - return sequencer_ioctl(dev, file, cmd, p); > + ret = sequencer_ioctl(dev, file, cmd, p); > + break; > > case SND_DEV_DSP: > case SND_DEV_DSP16: > @@ -390,7 +398,8 @@ static int sound_ioctl(struct inode *inode, struct file *file, > break; > > } > - return -EINVAL; > + unlock_kernel(); > + return ret; > } > > static unsigned int sound_poll(struct file *file, poll_table * wait) > @@ -490,7 +499,7 @@ const struct file_operations oss_sound_fops = { > .read = sound_read, > .write = sound_write, > .poll = sound_poll, > - .ioctl = sound_ioctl, > + .unlocked_ioctl = sound_ioctl, > .mmap = sound_mmap, > .open = sound_open, > .release = sound_release, > -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/