2006-09-28 10:08:37

by Takashi Iwai

[permalink] [raw]
Subject: Re: [PATCH] Reset file->f_op in snd_card_file_remove()

At Wed, 27 Sep 2006 21:27:51 +0200,
Karsten Wiese wrote:
>
> Hi
>
> This patch helps prevent an oops on 2.6.18-rt3,
> when my usb usx2y soundcard disconnects.
> Physically disconnects or "rmmod uhci_hc" both oops 1in7.
>
> With this patch still no oops after > 1000 disconnects.
>
> Please apply/comment.
>
> thanks,
> Karsten
>
> ===
>
> Reset file->f_op in snd_card_file_remove()
>
> When passing here in response to an usb disconnect,
> file->f_op has been replaced with a kmalloc()ed version,
> that would only allow releases.
>
> It will be free()ed later on in snd_card_free().
> Here it happened sometimes, that the free()ed, not NULLed file->f_op
> caused an oops in module_put() called by fops_put() still later on.
>
> Signed-off-by: Karsten Wiese <[email protected]>

snd_card_file_remove() is not a right place to do that, IMO.

Could you check whether this problem still happens on post-2.6.18?
There are a lot of fixes in this area after 2.6.18.


Takashi
>
>
>
> --- rt3/sound/core/init.c 2006-09-23 20:03:18.000000000 +0200
> +++ rt3-kw/sound/core/init.c 2006-09-27 20:44:54.000000000 +0200
> @@ -722,6 +722,7 @@ int snd_card_file_remove(struct snd_card
> mfile = card->files;
> while (mfile) {
> if (mfile->file == file) {
> + file->f_op = NULL;
> if (pfile)
> pfile->next = mfile->next;
> else
>
>
>
>
>
> ___________________________________________________________
> Der fr?he Vogel f?ngt den Wurm. Hier gelangen Sie zum neuen Yahoo! Mail: http://mail.yahoo.de
>


2006-09-28 11:39:10

by Karsten Wiese

[permalink] [raw]
Subject: Re: [PATCH] Reset file->f_op in snd_card_file_remove()

--- Takashi Iwai <[email protected]> schrieb:

> At Wed, 27 Sep 2006 21:27:51 +0200,
> Karsten Wiese wrote:
> >
> > Hi
> >
> > This patch helps prevent an oops on 2.6.18-rt3,
> > when my usb usx2y soundcard disconnects.
> > Physically disconnects or "rmmod uhci_hc" both oops 1in7.
> >
> > With this patch still no oops after > 1000 disconnects.
> >
> > Please apply/comment.
> >
> > thanks,
> > Karsten
> >
> > ===
> >
> > Reset file->f_op in snd_card_file_remove()
> >
> > When passing here in response to an usb disconnect,
> > file->f_op has been replaced with a kmalloc()ed version,
> > that would only allow releases.
> >
> > It will be free()ed later on in snd_card_free().
> > Here it happened sometimes, that the free()ed, not NULLed file->f_op
> > caused an oops in module_put() called by fops_put() still later on.
> >
> > Signed-off-by: Karsten Wiese <[email protected]>
>
> snd_card_file_remove() is not a right place to do that, IMO.
>
you are right, patch is wrong: it causes snd_hwdep's use count corruption.

> Could you check whether this problem still happens on post-2.6.18?
> There are a lot of fixes in this area after 2.6.18.
>
i'm now running 2.6.18-rt3 + alsa-driver-1.0.13rc1 and problem seams to be gone.

Karsten






___________________________________________________________
Der fr?he Vogel f?ngt den Wurm. Hier gelangen Sie zum neuen Yahoo! Mail: http://mail.yahoo.de

2006-09-28 11:46:16

by Karsten Wiese

[permalink] [raw]
Subject: Re: [Alsa-devel] [PATCH] Reset file->f_op in snd_card_file_remove()


--- karsten wiese <[email protected]> schrieb:
> i'm now running 2.6.18-rt3 + alsa-driver-1.0.13rc1 and problem seams to be gone.
>
its alsa-driver-1.0.13rc3.

Karsten






___________________________________________________________
Der fr?he Vogel f?ngt den Wurm. Hier gelangen Sie zum neuen Yahoo! Mail: http://mail.yahoo.de

2006-09-28 12:51:09

by Takashi Iwai

[permalink] [raw]
Subject: Re: [Alsa-devel] [PATCH] Reset file->f_op in snd_card_file_remove()

At Thu, 28 Sep 2006 13:39:06 +0200 (CEST),
karsten wiese wrote:
>
> --- Takashi Iwai <[email protected]> schrieb:
>
> > At Wed, 27 Sep 2006 21:27:51 +0200,
> > Karsten Wiese wrote:
> > >
> > > Hi
> > >
> > > This patch helps prevent an oops on 2.6.18-rt3,
> > > when my usb usx2y soundcard disconnects.
> > > Physically disconnects or "rmmod uhci_hc" both oops 1in7.
> > >
> > > With this patch still no oops after > 1000 disconnects.
> > >
> > > Please apply/comment.
> > >
> > > thanks,
> > > Karsten
> > >
> > > ===
> > >
> > > Reset file->f_op in snd_card_file_remove()
> > >
> > > When passing here in response to an usb disconnect,
> > > file->f_op has been replaced with a kmalloc()ed version,
> > > that would only allow releases.
> > >
> > > It will be free()ed later on in snd_card_free().
> > > Here it happened sometimes, that the free()ed, not NULLed file->f_op
> > > caused an oops in module_put() called by fops_put() still later on.
> > >
> > > Signed-off-by: Karsten Wiese <[email protected]>
> >
> > snd_card_file_remove() is not a right place to do that, IMO.
> >
> you are right, patch is wrong: it causes snd_hwdep's use count corruption.
>
> > Could you check whether this problem still happens on post-2.6.18?
> > There are a lot of fixes in this area after 2.6.18.
> >
> i'm now running 2.6.18-rt3 + alsa-driver-1.0.13rc1 and problem seams to be gone.

Good to hear. Thanks for confirmation!


Takashi