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 majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html