From: Kylene Jo Hall Add the necessary flush_schedule_work calls when canceling the timer. Signed-off-by: Kylene Hall Signed-off-by: Andrew Morton --- drivers/char/tpm/tpm.c | 2 ++ 1 files changed, 2 insertions(+) diff -puN drivers/char/tpm/tpm.c~tpm-use-flush_scheduled_work drivers/char/tpm/tpm.c --- devel/drivers/char/tpm/tpm.c~tpm-use-flush_scheduled_work 2005-11-16 18:20:48.000000000 -0800 +++ devel-akpm/drivers/char/tpm/tpm.c 2005-11-16 18:20:48.000000000 -0800 @@ -377,6 +377,7 @@ int tpm_release(struct inode *inode, str file->private_data = NULL; chip->num_opens--; del_singleshot_timer_sync(&chip->user_read_timer); + flush_scheduled_work(); atomic_set(&chip->data_pending, 0); put_device(chip->dev); kfree(chip->data_buffer); @@ -428,6 +429,7 @@ ssize_t tpm_read(struct file * file, cha int ret_size; del_singleshot_timer_sync(&chip->user_read_timer); + flush_scheduled_work(); ret_size = atomic_read(&chip->data_pending); atomic_set(&chip->data_pending, 0); if (ret_size > 0) { /* relay data */ _