On 12/18/2013 04:08 AM, Adrian Hunter wrote: > On 17/12/13 20:02, Stephen Warren wrote: >> From: Stephen Warren <swarren@xxxxxxxxxx> >> >> In mmc_do_calc_max_discard(), if any value has been assigned to qty, >> that value must have passed the timeout checks in the loop. Hence, >> qty is the maximum number of erase blocks that fit within the timeout, >> not the first value that does not fit into the timeout. In turn, this >> means we don't need any special case for (qty == 1); any value of qty >> needs to be multiplied by the card's erase shift, and we don't need to >> decrement qty before doing so. >> >> Without this patch, on the NVIDIA Tegra Cardhu board, the loops result >> in qty == 1, which is immediately returned. This causes discard to >> operate a single sector at a time, which is chronically slow. With this >> patch in place, discard operates a single erase block at a time, which >> is reasonably fast. ... > The quantity is decreased by 1 to account for the fact that the erase can > cross the boundary between 1 erase block and another. i.e. even though the > size is 1 erase block it touches 2 erase blocks. Don't erases have to be aligned to the erase block alignment; surely that's what the eMMC's preferred erase alignment is all about? If that isn't the case, a comment in the code would be extremely useful... -- 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