]> git.kernelconcepts.de Git - karo-tx-linux.git/blobdiff - sound/sound_core.c
soundcore_open: Reduce the area BKL coverage
[karo-tx-linux.git] / sound / sound_core.c
index 7c2d677a2df529d1055d3727f3158f2cbda8e73b..c8627fcd49007a8285fc6e506db54564ee35f29d 100644 (file)
@@ -576,8 +576,6 @@ static int soundcore_open(struct inode *inode, struct file *file)
        struct sound_unit *s;
        const struct file_operations *new_fops = NULL;
 
-       lock_kernel ();
-
        chain=unit&0x0F;
        if(chain==4 || chain==5)        /* dsp/audio/dsp16 */
        {
@@ -630,18 +628,23 @@ static int soundcore_open(struct inode *inode, struct file *file)
                const struct file_operations *old_fops = file->f_op;
                file->f_op = new_fops;
                spin_unlock(&sound_loader_lock);
-               if(file->f_op->open)
+
+               if (file->f_op->open) {
+                       /* TODO: push down BKL into indivial open functions */
+                       lock_kernel();
                        err = file->f_op->open(inode,file);
+                       unlock_kernel();
+               }
+
                if (err) {
                        fops_put(file->f_op);
                        file->f_op = fops_get(old_fops);
                }
+
                fops_put(old_fops);
-               unlock_kernel();
                return err;
        }
        spin_unlock(&sound_loader_lock);
-       unlock_kernel();
        return -ENODEV;
 }