Excerpts from Ric Wheeler's message of 2011-07-15 08:58:04 -0400:On 07/15/2011 12:34 PM, Chris Mason wrote:[ triggering IO retries on failed crc or other checks ]
By bubble up I mean that if you have multiple layers capable of doingBut, maybe the whole btrfs model is backwards for a generic layer.I do like the idea of having the ability to do the verification and retries down
Instead of sending down ios and testing when they come back, we could
just set a verification function (or stack of them?).
For metadata, btrfs compares the crc and a few other fields of the
metadata block, so we can easily add a compare function pointer and a
void * to pass in.
The problem is the crc can take a lot of CPU, so btrfs kicks it off to
threading pools so saturate all the cpus on the box. But there's no
reason we can't make that available lower down.
If we pushed the verification down, the retries could bubble up the
stack instead of the other way around.
-chris
the stack where you actually have the most context to figure out what is possible...
Why would you need to bubble back up anything other than an error when all
retries have failed?
retries, the lowest levels would retry first. Basically by the time we
get an -EIO_ALREADY_RETRIED we know there's nothing that lower level can
do to help.
-chris