On Tue, Dec 01, 2009 at 12:49:26PM +0000, Daniel Drake wrote:
> On Sat, 2009-11-21 at 12:31 +0000, Matt Fleming wrote:
> > Fancy giving this patch a try? I think it's just a case of removing too
> > many funcs in the error path.
>
> Thanks!
> Yes, I agree that looks like the culprit.
> I applied something very similar to your patch and the crash went away.
>
> The one additional change I made is in sdio_bus.c :
>
> void sdio_remove_func(struct sdio_func *func)
> {
> - if (sdio_func_present(func))
> - device_del(&func->dev);
> + if (!sdio_func_present(func))
> + return;
>
> + device_del(&func->dev);
> put_device(&func->dev);
> }
>
> I think this is necessary because the error path will go mmc_sdio_remove
> --> sdio_remove_func
> Hence sdio_remove_func() will be called when sdio_add_func() was never
> called beforehand, so there is no func->dev reference to drop.
>
> Do you agree? I'm not certain about this one.
>
> Thanks!
> Daniel
>
Yep, your patch looks correct. Good catch.
Would you mind making a proper patch (S-O-B line and all) and submitting
it to the linux-mmc mailing list and CC'ing Andrew Morton?
Cheers
--
To unsubscribe from this list: send the line "unsubscribe linux-mmc" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html