Index: sys/dev/xen/blkfront/blkfront.c =================================================================== --- sys/dev/xen/blkfront/blkfront.c +++ sys/dev/xen/blkfront/blkfront.c @@ -263,12 +263,19 @@ sizeof(grant_ref_t) * sc->xbd_max_request_indirectpages); } - if (cm->cm_operation == BLKIF_OP_READ) + switch (cm->cm_operation) { + case BLKIF_OP_READ: op = BUS_DMASYNC_PREREAD; - else if (cm->cm_operation == BLKIF_OP_WRITE) + break; + case BLKIF_OP_WRITE: + case BLKIF_OP_WRITE_BARRIER: + case BLKIF_OP_FLUSH_DISKCACHE: op = BUS_DMASYNC_PREWRITE; - else + break; + default: op = 0; + } + bus_dmamap_sync(sc->xbd_io_dmat, cm->cm_map, op); gnttab_free_grant_references(cm->cm_gref_head);