• A
    virtio-blk: Add REQ_FLUSH and REQ_FUA support to bio path · c85a1f91
    Asias He 提交于
    We need to support both REQ_FLUSH and REQ_FUA for bio based path since
    it does not get the sequencing of REQ_FUA into REQ_FLUSH that request
    based drivers can request.
    
    REQ_FLUSH is emulated by:
    A) If the bio has no data to write:
    1. Send VIRTIO_BLK_T_FLUSH to device,
    2. In the flush I/O completion handler, finish the bio
    
    B) If the bio has data to write:
    1. Send VIRTIO_BLK_T_FLUSH to device
    2. In the flush I/O completion handler, send the actual write data to device
    3. In the write I/O completion handler, finish the bio
    
    REQ_FUA is emulated by:
    1. Send the actual write data to device
    2. In the write I/O completion handler, send VIRTIO_BLK_T_FLUSH to device
    3. In the flush I/O completion handler, finish the bio
    
    Changes in v7:
    - Using vbr->flags to trace request type
    - Dropped unnecessary struct virtio_blk *vblk parameter
    - Reuse struct virtblk_req in bio done function
    
    Cahnges in v6:
    - Reworked REQ_FLUSH and REQ_FUA emulatation order
    
    Cc: Rusty Russell <rusty@rustcorp.com.au>
    Cc: Jens Axboe <axboe@kernel.dk>
    Cc: Christoph Hellwig <hch@lst.de>
    Cc: Tejun Heo <tj@kernel.org>
    Cc: Shaohua Li <shli@kernel.org>
    Cc: "Michael S. Tsirkin" <mst@redhat.com>
    Cc: kvm@vger.kernel.org
    Cc: linux-kernel@vger.kernel.org
    Cc: virtualization@lists.linux-foundation.org
    Signed-off-by: NAsias He <asias@redhat.com>
    Signed-off-by: NRusty Russell <rusty@rustcorp.com.au>
    c85a1f91
virtio_blk.c 24.5 KB