Input: atkbd - cancel delayed work before freeing its structure
authorJiri Pirko <jpirko@redhat.com>
Tue, 11 Nov 2008 14:43:21 +0000 (09:43 -0500)
committerDmitry Torokhov <dmitry.torokhov@gmail.com>
Tue, 11 Nov 2008 16:31:59 +0000 (11:31 -0500)
Pointed out by Oleg Nesterov. Since delayed work is used here, use of
flush_scheduled_work() is not sufficient in atkbd_disconnect(). It does
not wait for scheduled delayed work to finish. This patch prevents
delayed work to be processed after freeing atkbd structure (used struct
delayed_work is part of atkbd) by cancelling this delayed work.

Signed-off-by: Jiri Pirko <jpirko@redhat.com>
Signed-off-by: Dmitry Torokhov <dtor@mail.ru>
drivers/input/keyboard/atkbd.c

index c93b9b4ff03a8e9e82bc758c8663702cc6f83fed..379b7ff354ec7ba0036d3e1d1072b51eac61f1c3 100644 (file)
@@ -824,7 +824,7 @@ static void atkbd_disconnect(struct serio *serio)
        atkbd_disable(atkbd);
 
        /* make sure we don't have a command in flight */
-       flush_scheduled_work();
+       cancel_delayed_work_sync(&atkbd->event_work);
 
        sysfs_remove_group(&serio->dev.kobj, &atkbd_attribute_group);
        input_unregister_device(atkbd->dev);