I've been looking into the ATA piece of this (at Dave's request). Part of the problem is that
the ATA TRIM command isn't fully specified yet, so we'll need to allocate a temporary command
to test it. This also means that no existing device on the market can take advantage of it.
Another part of the problem is that the way we handle ATA these days is through the SCSI
layer. So in order to implement the ATA TRIM command, we first have to implement the SCSI
PUNCH command. The SCSI PUNCH command is a very complex beast. It allows you to specify all
kinds of things that ATA (and indeed Linux) don't let you do, and as a result is a pain to
implement. I'm negotiating with T10 to attempt to get PUNCH simplified, but not having much
luck so far.
It's a SMOP but I have more urgent projects right now. One of them is ata_ram, which (not
entirely coincidentally) today grew the ability to do lazy allocation of the memory pages it
uses as its backing store. Once that feature's debugged, supporting TRIM should be feasible,
then I'll have motivation to get back to implementing PUNCH.