mirror of
https://github.com/opnsense/src.git
synced 2026-05-28 04:12:45 -04:00
The code that combines adjacent ranges for BIO_DELETEs to optimize
trims to the device assumes the list is sorted. Don't apply the optimization of not sorting the queue when we have SSDs to the delete_queue, since it causes more discard traffic to the drive. While one could argue that the higher levels should coalesce the trims, that's not done today, so some optimization at this level is needed. CR: https://phabric.freebsd.org/D142
This commit is contained in:
parent
76e994f506
commit
dbb3f5b28b
2 changed files with 5 additions and 18 deletions
|
|
@ -729,10 +729,7 @@ adastrategy(struct bio *bp)
|
|||
*/
|
||||
if (bp->bio_cmd == BIO_DELETE &&
|
||||
(softc->flags & ADA_FLAG_CAN_TRIM)) {
|
||||
if (ADA_SIO)
|
||||
bioq_disksort(&softc->trim_queue, bp);
|
||||
else
|
||||
bioq_insert_tail(&softc->trim_queue, bp);
|
||||
bioq_disksort(&softc->trim_queue, bp);
|
||||
} else {
|
||||
if (ADA_SIO)
|
||||
bioq_disksort(&softc->bio_queue, bp);
|
||||
|
|
|
|||
|
|
@ -1383,10 +1383,7 @@ dastrategy(struct bio *bp)
|
|||
* Place it in the queue of disk activities for this disk
|
||||
*/
|
||||
if (bp->bio_cmd == BIO_DELETE) {
|
||||
if (DA_SIO)
|
||||
bioq_disksort(&softc->delete_queue, bp);
|
||||
else
|
||||
bioq_insert_tail(&softc->delete_queue, bp);
|
||||
bioq_disksort(&softc->delete_queue, bp);
|
||||
} else if (DA_SIO) {
|
||||
bioq_disksort(&softc->bio_queue, bp);
|
||||
} else {
|
||||
|
|
@ -2805,16 +2802,9 @@ cmd6workaround(union ccb *ccb)
|
|||
da_delete_method_desc[old_method],
|
||||
da_delete_method_desc[softc->delete_method]);
|
||||
|
||||
if (DA_SIO) {
|
||||
while ((bp = bioq_takefirst(&softc->delete_run_queue))
|
||||
!= NULL)
|
||||
bioq_disksort(&softc->delete_queue, bp);
|
||||
} else {
|
||||
while ((bp = bioq_takefirst(&softc->delete_run_queue))
|
||||
!= NULL)
|
||||
bioq_insert_tail(&softc->delete_queue, bp);
|
||||
}
|
||||
bioq_insert_tail(&softc->delete_queue,
|
||||
while ((bp = bioq_takefirst(&softc->delete_run_queue)) != NULL)
|
||||
bioq_disksort(&softc->delete_queue, bp);
|
||||
bioq_disksort(&softc->delete_queue,
|
||||
(struct bio *)ccb->ccb_h.ccb_bp);
|
||||
ccb->ccb_h.ccb_bp = NULL;
|
||||
return (0);
|
||||
|
|
|
|||
Loading…
Reference in a new issue