Allow multiple TRIMs to be done for nda
Don't call cam_iosched_trim_done or cam_iosched_submit_trim for nda since its hardware can handle almost an arbitrary number of TRIMs and we don't have to be careful to only ever do one. Sponsored by: Netflix
This commit is contained in:
parent
55c770b40a
commit
851063e16a
@ -920,7 +920,12 @@ ndastart(struct cam_periph *periph, union ccb *start_ccb)
|
||||
nda_nvme_trim(softc, &start_ccb->nvmeio, dsm_range, 1);
|
||||
start_ccb->ccb_h.ccb_state = NDA_CCB_TRIM;
|
||||
start_ccb->ccb_h.flags |= CAM_UNLOCKED;
|
||||
cam_iosched_submit_trim(softc->cam_iosched); /* XXX */
|
||||
/*
|
||||
* Note: We can have multiple TRIMs in flight, so we don't call
|
||||
* cam_iosched_submit_trim(softc->cam_iosched);
|
||||
* since that forces the I/O scheduler to only schedule one at a time.
|
||||
* On NVMe drives, this is a performance disaster.
|
||||
*/
|
||||
goto out;
|
||||
}
|
||||
case BIO_FLUSH:
|
||||
@ -1013,7 +1018,11 @@ ndadone(struct cam_periph *periph, union ccb *done_ccb)
|
||||
TAILQ_INIT(&queue);
|
||||
TAILQ_CONCAT(&queue, &softc->trim_req.bps, bio_queue);
|
||||
#endif
|
||||
cam_iosched_trim_done(softc->cam_iosched);
|
||||
/*
|
||||
* Since we can have multiple trims in flight, we don't
|
||||
* need to call this here.
|
||||
* cam_iosched_trim_done(softc->cam_iosched);
|
||||
*/
|
||||
ndaschedule(periph);
|
||||
cam_periph_unlock(periph);
|
||||
#ifdef notyet
|
||||
|
Loading…
x
Reference in New Issue
Block a user