USB: auerswald: fix file release handler

If this down_interruptible() does fail due to signal_pending() then the state
of the driver will get trashed in interesting ways, because userspace cannot
and will not retry the close().

Cc: Jiri Slaby <jirislaby@gmail.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
This commit is contained in:
Andrew Morton 2007-05-10 23:04:14 -07:00 committed by Greg Kroah-Hartman
parent fcbd963912
commit be23edf848
1 changed files with 2 additions and 8 deletions

View File

@ -1822,16 +1822,10 @@ static int auerchar_release (struct inode *inode, struct file *file)
pauerswald_t cp;
dbg("release");
/* get the mutexes */
if (down_interruptible (&ccp->mutex)) {
return -ERESTARTSYS;
}
down(&ccp->mutex);
cp = ccp->auerdev;
if (cp) {
if (down_interruptible (&cp->mutex)) {
up (&ccp->mutex);
return -ERESTARTSYS;
}
down(&cp->mutex);
/* remove an open service */
auerswald_removeservice (cp, &ccp->scontext);
/* detach from device */