ALSA: us122l: fix missing unlock in usb_stream_hwdep_vm_fault()
[linux-2.6.git] / sound / usb / usx2y / us122l.c
index b441fe2..c2515b6 100644 (file)
@@ -118,12 +118,11 @@ static int usb_stream_hwdep_vm_fault(struct vm_area_struct *area,
        void *vaddr;
        struct us122l *us122l = area->vm_private_data;
        struct usb_stream *s;
-       int vm_f = VM_FAULT_SIGBUS;
 
        mutex_lock(&us122l->mutex);
        s = us122l->sk.s;
        if (!s)
-               goto out;
+               goto unlock;
 
        offset = vmf->pgoff << PAGE_SHIFT;
        if (offset < PAGE_ALIGN(s->read_size))
@@ -131,7 +130,7 @@ static int usb_stream_hwdep_vm_fault(struct vm_area_struct *area,
        else {
                offset -= PAGE_ALIGN(s->read_size);
                if (offset >= PAGE_ALIGN(s->write_size))
-                       goto out;
+                       goto unlock;
 
                vaddr = us122l->sk.write_page + offset;
        }
@@ -141,9 +140,11 @@ static int usb_stream_hwdep_vm_fault(struct vm_area_struct *area,
        mutex_unlock(&us122l->mutex);
 
        vmf->page = page;
-       vm_f = 0;
-out:
-       return vm_f;
+
+       return 0;
+unlock:
+       mutex_unlock(&us122l->mutex);
+       return VM_FAULT_SIGBUS;
 }
 
 static void usb_stream_hwdep_vm_close(struct vm_area_struct *area)