Commit 47a5486d authored by Eric Blake's avatar Eric Blake Committed by Stefan Hajnoczi
Browse files

block: Add .bdrv_co_pdiscard() driver callback



There's enough drivers with a sector-based callback that it will
be easier to switch one at a time.  This patch adds a byte-based
callback, and then after all drivers are swapped, we'll drop the
sector-based callback.

[checkpatch doesn't like the space after coroutine_fn in
block_int.h, but it's consistent with the rest of the file]

Signed-off-by: default avatarEric Blake <eblake@redhat.com>
Reviewed-by: default avatarStefan Hajnoczi <stefanha@redhat.com>
Message-id: 1468624988-423-10-git-send-email-eblake@redhat.com
Signed-off-by: default avatarStefan Hajnoczi <stefanha@redhat.com>
parent 4da444a0
Loading
Loading
Loading
Loading
+5 −2
Original line number Diff line number Diff line
@@ -2423,7 +2423,8 @@ int coroutine_fn bdrv_co_pdiscard(BlockDriverState *bs, int64_t offset,
        return 0;
    }

    if (!bs->drv->bdrv_co_discard && !bs->drv->bdrv_aio_pdiscard) {
    if (!bs->drv->bdrv_co_discard && !bs->drv->bdrv_co_pdiscard &&
        !bs->drv->bdrv_aio_pdiscard) {
        return 0;
    }

@@ -2455,7 +2456,9 @@ int coroutine_fn bdrv_co_pdiscard(BlockDriverState *bs, int64_t offset,
        int ret;
        int num = MIN(count, max_pdiscard);

        if (bs->drv->bdrv_co_discard) {
        if (bs->drv->bdrv_co_pdiscard) {
            ret = bs->drv->bdrv_co_pdiscard(bs, offset, num);
        } else if (bs->drv->bdrv_co_discard) {
            ret = bs->drv->bdrv_co_discard(bs, offset >> BDRV_SECTOR_BITS,
                                           num >> BDRV_SECTOR_BITS);
        } else {
+2 −0
Original line number Diff line number Diff line
@@ -167,6 +167,8 @@ struct BlockDriver {
        int64_t offset, int count, BdrvRequestFlags flags);
    int coroutine_fn (*bdrv_co_discard)(BlockDriverState *bs,
        int64_t sector_num, int nb_sectors);
    int coroutine_fn (*bdrv_co_pdiscard)(BlockDriverState *bs,
        int64_t offset, int count);
    int64_t coroutine_fn (*bdrv_co_get_block_status)(BlockDriverState *bs,
        int64_t sector_num, int nb_sectors, int *pnum,
        BlockDriverState **file);