HID: wacom: Shrink critical section in `wacom_add_shared_data`
[sfrench/cifs-2.6.git] / drivers / hid / wacom_sys.c
index 93f49b766376e41c097c222455d052ff08ebbb4d..62f50e4b837dcd3e0867bb939a8ff6e81c14fc07 100644 (file)
@@ -881,8 +881,8 @@ static int wacom_add_shared_data(struct hid_device *hdev)
        if (!data) {
                data = kzalloc(sizeof(struct wacom_hdev_data), GFP_KERNEL);
                if (!data) {
-                       retval = -ENOMEM;
-                       goto out;
+                       mutex_unlock(&wacom_udev_list_lock);
+                       return -ENOMEM;
                }
 
                kref_init(&data->kref);
@@ -890,11 +890,12 @@ static int wacom_add_shared_data(struct hid_device *hdev)
                list_add_tail(&data->list, &wacom_udev_list);
        }
 
+       mutex_unlock(&wacom_udev_list_lock);
+
        wacom_wac->shared = &data->shared;
 
        retval = devm_add_action(&hdev->dev, wacom_remove_shared_data, wacom);
        if (retval) {
-               mutex_unlock(&wacom_udev_list_lock);
                wacom_remove_shared_data(wacom);
                return retval;
        }
@@ -904,8 +905,6 @@ static int wacom_add_shared_data(struct hid_device *hdev)
        else if (wacom_wac->features.device_type & WACOM_DEVICETYPE_PEN)
                wacom_wac->shared->pen = hdev;
 
-out:
-       mutex_unlock(&wacom_udev_list_lock);
        return retval;
 }