cache: don't use cache_purge_negative when renaming
It avoidably scans (and evicts) unrelated entries. Instead take
advantage of passed componentname and perform a hash lookup
for the exact one.
Sample data from buildworld probed on cache_purge_negative extended
to count both scanned and evicted entries on each call are below.
At most it has to evict 1.
evicted value ------------- Distribution ------------- count -1 | 0 0 |@@@@@@@@@@@@@@@ 19506 1 |@@@@@ 5820 2 |@@@@@@ 7751 4 |@@@@@ 6506 8 |@@@@@ 5996 16 |@@@ 4029 32 |@ 1489 64 | 193 128 | 109 256 | 56 512 | 16 1024 | 7 2048 | 3 4096 | 1 8192 | 1 16384 | 0 scanned value ------------- Distribution ------------- count -1 | 0 0 |@@ 2456 1 |@ 1496 2 |@@ 2728 4 |@@@ 4171 8 |@@@@ 5122 16 |@@@@ 5335 32 |@@@@@ 6279 64 |@@@@ 5671 128 |@@@@ 4558 256 |@@ 3123 512 |@@ 2790 1024 |@@ 2449 2048 |@@ 3021 4096 |@ 1398 8192 |@ 886 16384 | 0