On Fri, 2008-05-23 at 20:34 +0100, Sitsofe Wheeler wrote: > <posted & mailed> > > James Bottomley wrote: > > > Actually, I think this is a very subtle bug; what I think is happening > > is that after Hannes sysfs changes, we now add scsi_bus_type to the > > target device. However, scsi_bus_uevent() unconditionally casts from > > dev to a struct scsi_device and then looks at the type entry. My theory > > is that in this particular config going from struct scsi_target to > > struct device and back to struct scsi_device actually tips us over into > > unmapped space for the -> type deref. > > > > Hopefully this should fix it by checking the device type before doing > > the deref. > > This fixed the problem for me (it was horribly intermittant but I've done > 10+ consecutive reboots without seeing an oopos). I changed the patch to > printk everytime the condition was hit and it seems to happen twice per > PATA device - once after each scsi?: pata_via message and then again after > each scsi 0:0:0:0: Direct-Accesss ATA DISKID etc : 0 ANSI: 5 . > > The thing I don't understand about your explanation is that it sounds like > the device struct is being round-tripped (but is just being cast to > different things along the way). If this is the case why would this problem > ever arise? Surely if it is really a struct scsi_device underneath there > should be no problem? The event is called for all generic device objects belonging to the scsi_bus_type. That means both struct scsi_device and struct scsi_target objects. When it's called for struct scsi_target objects, casting out to struct scsi_device does the wrong thing. James -- To unsubscribe from this list: send the line "unsubscribe linux-scsi" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html