Lines Matching defs:iocb

2506     NvmeDSMAIOCB *iocb = container_of(aiocb, NvmeDSMAIOCB, common);
2509 iocb->idx = iocb->nr;
2510 iocb->ret = -ECANCELED;
2512 if (iocb->aiocb) {
2513 blk_aio_cancel_async(iocb->aiocb);
2514 iocb->aiocb = NULL;
2520 assert(iocb->idx == iocb->nr);
2533 NvmeDSMAIOCB *iocb = opaque;
2534 NvmeRequest *req = iocb->req;
2540 if (ret < 0 || iocb->ret < 0 || !ns->lbaf.ms) {
2544 range = &iocb->range[iocb->idx - 1];
2559 nvme_dsm_cb(iocb, 0);
2563 iocb->aiocb = blk_aio_pwrite_zeroes(ns->blkconf.blk, nvme_moff(ns, slba),
2565 nvme_dsm_cb, iocb);
2569 nvme_dsm_cb(iocb, ret);
2574 NvmeDSMAIOCB *iocb = opaque;
2575 NvmeRequest *req = iocb->req;
2582 if (iocb->ret < 0) {
2585 iocb->ret = ret;
2590 if (iocb->idx == iocb->nr) {
2594 range = &iocb->range[iocb->idx++];
2611 iocb->aiocb = blk_aio_pdiscard(ns->blkconf.blk, nvme_l2b(ns, slba),
2613 nvme_dsm_md_cb, iocb);
2617 iocb->aiocb = NULL;
2618 iocb->common.cb(iocb->common.opaque, iocb->ret);
2619 g_free(iocb->range);
2620 qemu_aio_unref(iocb);
2634 NvmeDSMAIOCB *iocb = blk_aio_get(&nvme_dsm_aiocb_info, ns->blkconf.blk,
2637 iocb->req = req;
2638 iocb->ret = 0;
2639 iocb->range = g_new(NvmeDsmRange, nr);
2640 iocb->nr = nr;
2641 iocb->idx = 0;
2643 status = nvme_h2c(n, (uint8_t *)iocb->range, sizeof(NvmeDsmRange) * nr,
2646 g_free(iocb->range);
2647 qemu_aio_unref(iocb);
2652 req->aiocb = &iocb->common;
2653 nvme_dsm_cb(iocb, 0);
2754 NvmeCopyAIOCB *iocb = container_of(aiocb, NvmeCopyAIOCB, common);
2756 iocb->ret = -ECANCELED;
2758 if (iocb->aiocb) {
2759 blk_aio_cancel_async(iocb->aiocb);
2760 iocb->aiocb = NULL;
2769 static void nvme_copy_done(NvmeCopyAIOCB *iocb)
2771 NvmeRequest *req = iocb->req;
2775 if (iocb->idx != iocb->nr) {
2776 req->cqe.result = cpu_to_le32(iocb->idx);
2779 qemu_iovec_destroy(&iocb->iov);
2780 g_free(iocb->bounce);
2782 if (iocb->ret < 0) {
2783 block_acct_failed(stats, &iocb->acct.read);
2784 block_acct_failed(stats, &iocb->acct.write);
2786 block_acct_done(stats, &iocb->acct.read);
2787 block_acct_done(stats, &iocb->acct.write);
2790 iocb->common.cb(iocb->common.opaque, iocb->ret);
2791 qemu_aio_unref(iocb);
2794 static void nvme_do_copy(NvmeCopyAIOCB *iocb);
2897 NvmeCopyAIOCB *iocb, uint16_t nr)
2903 nvme_copy_source_range_parse(iocb->ranges, idx, iocb->format, NULL,
2907 iocb->tcl = copy_len;
2917 NvmeCopyAIOCB *iocb = opaque;
2918 NvmeRequest *req = iocb->req;
2922 nvme_copy_source_range_parse(iocb->ranges, iocb->idx, iocb->format, NULL,
2926 iocb->ret = ret;
2929 } else if (iocb->ret < 0) {
2934 nvme_advance_zone_wp(dns, iocb->zone, nlb);
2937 iocb->idx++;
2938 iocb->slba += nlb;
2940 nvme_do_copy(iocb);
2945 NvmeCopyAIOCB *iocb = opaque;
2946 NvmeRequest *req = iocb->req;
2952 if (ret < 0 || iocb->ret < 0 || !dns->lbaf.ms) {
2956 nvme_copy_source_range_parse(iocb->ranges, iocb->idx, iocb->format, NULL,
2960 mbounce = iocb->bounce + nvme_l2b(dns, nlb);
2962 qemu_iovec_reset(&iocb->iov);
2963 qemu_iovec_add(&iocb->iov, mbounce, mlen);
2965 iocb->aiocb = blk_aio_pwritev(dns->blkconf.blk, nvme_moff(dns, iocb->slba),
2966 &iocb->iov, 0, nvme_copy_out_completed_cb,
2967 iocb);
2972 nvme_copy_out_completed_cb(iocb, ret);
2977 NvmeCopyAIOCB *iocb = opaque;
2978 NvmeRequest *req = iocb->req;
2979 NvmeNamespace *sns = iocb->sns;
2991 iocb->ret = ret;
2994 } else if (iocb->ret < 0) {
2998 nvme_copy_source_range_parse(iocb->ranges, iocb->idx, iocb->format, &slba,
3001 trace_pci_nvme_copy_out(iocb->slba, nlb);
3011 mbounce = iocb->bounce + nvme_l2b(sns, nlb);
3017 status = nvme_dif_check(sns, iocb->bounce, len, mbounce, mlen, prinfor,
3029 mbounce = iocb->bounce + nvme_l2b(dns, nlb);
3035 status = nvme_check_prinfo(dns, prinfow, iocb->slba, iocb->reftag);
3040 nvme_dif_pract_generate_dif(dns, iocb->bounce, len, mbounce, mlen,
3041 apptag, &iocb->reftag);
3043 status = nvme_dif_check(dns, iocb->bounce, len, mbounce, mlen,
3044 prinfow, iocb->slba, apptag, appmask,
3045 &iocb->reftag);
3052 status = nvme_check_bounds(dns, iocb->slba, nlb);
3058 status = nvme_check_zone_write(dns, iocb->zone, iocb->slba, nlb);
3063 if (!(iocb->zone->d.za & NVME_ZA_ZRWA_VALID)) {
3064 iocb->zone->w_ptr += nlb;
3068 qemu_iovec_reset(&iocb->iov);
3069 qemu_iovec_add(&iocb->iov, iocb->bounce, len);
3071 block_acct_start(blk_get_stats(dns->blkconf.blk), &iocb->acct.write, 0,
3074 iocb->aiocb = blk_aio_pwritev(dns->blkconf.blk, nvme_l2b(dns, iocb->slba),
3075 &iocb->iov, 0, nvme_copy_out_cb, iocb);
3081 iocb->ret = -1;
3083 nvme_do_copy(iocb);
3088 NvmeCopyAIOCB *iocb = opaque;
3089 NvmeNamespace *sns = iocb->sns;
3093 if (ret < 0 || iocb->ret < 0 || !sns->lbaf.ms) {
3097 nvme_copy_source_range_parse(iocb->ranges, iocb->idx, iocb->format, &slba,
3100 qemu_iovec_reset(&iocb->iov);
3101 qemu_iovec_add(&iocb->iov, iocb->bounce + nvme_l2b(sns, nlb),
3104 iocb->aiocb = blk_aio_preadv(sns->blkconf.blk, nvme_moff(sns, slba),
3105 &iocb->iov, 0, nvme_copy_in_completed_cb,
3106 iocb);
3110 nvme_copy_in_completed_cb(iocb, ret);
3171 static void nvme_do_copy(NvmeCopyAIOCB *iocb)
3173 NvmeRequest *req = iocb->req;
3186 if (iocb->ret < 0) {
3190 if (iocb->idx == iocb->nr) {
3194 if (iocb->format == 2 || iocb->format == 3) {
3195 nvme_copy_source_range_parse(iocb->ranges, iocb->idx, iocb->format,
3199 !nvme_nsid_valid(iocb->n, snsid)) {
3203 iocb->sns = nvme_ns(iocb->n, snsid);
3204 if (unlikely(!iocb->sns)) {
3209 if (((slba + nlb) > iocb->slba) &&
3210 ((slba + nlb) < (iocb->slba + iocb->tcl))) {
3216 nvme_copy_source_range_parse(iocb->ranges, iocb->idx, iocb->format,
3220 sns = iocb->sns;
3301 g_free(iocb->bounce);
3302 iocb->bounce = g_malloc_n(le16_to_cpu(sns->id_ns.mssrl),
3305 qemu_iovec_reset(&iocb->iov);
3306 qemu_iovec_add(&iocb->iov, iocb->bounce, len);
3308 block_acct_start(blk_get_stats(sns->blkconf.blk), &iocb->acct.read, 0,
3311 iocb->aiocb = blk_aio_preadv(sns->blkconf.blk, nvme_l2b(sns, slba),
3312 &iocb->iov, 0, nvme_copy_in_cb, iocb);
3317 iocb->ret = -1;
3319 nvme_copy_done(iocb);
3326 NvmeCopyAIOCB *iocb = blk_aio_get(&nvme_copy_aiocb_info, ns->blkconf.blk,
3336 iocb->ranges = NULL;
3337 iocb->zone = NULL;
3362 iocb->format = format;
3363 iocb->ranges = g_malloc_n(nr, len);
3364 status = nvme_h2c(n, (uint8_t *)iocb->ranges, len * nr, req);
3369 iocb->slba = le64_to_cpu(copy->sdlba);
3372 iocb->zone = nvme_get_zone_by_slba(ns, iocb->slba);
3373 if (!iocb->zone) {
3378 status = nvme_zrm_auto(n, ns, iocb->zone);
3384 status = nvme_check_copy_mcl(ns, iocb, nr);
3389 iocb->req = req;
3390 iocb->ret = 0;
3391 iocb->nr = nr;
3392 iocb->idx = 0;
3393 iocb->reftag = le32_to_cpu(copy->reftag);
3394 iocb->reftag |= (uint64_t)le32_to_cpu(copy->cdw3) << 32;
3396 qemu_iovec_init(&iocb->iov, 1);
3398 req->aiocb = &iocb->common;
3399 iocb->sns = req->ns;
3400 iocb->n = n;
3401 iocb->bounce = NULL;
3402 nvme_do_copy(iocb);
3407 g_free(iocb->ranges);
3408 qemu_aio_unref(iocb);
3491 NvmeFlushAIOCB *iocb = container_of(acb, NvmeFlushAIOCB, common);
3493 iocb->ret = -ECANCELED;
3495 if (iocb->aiocb) {
3496 blk_aio_cancel_async(iocb->aiocb);
3497 iocb->aiocb = NULL;
3506 static void nvme_do_flush(NvmeFlushAIOCB *iocb);
3510 NvmeFlushAIOCB *iocb = opaque;
3511 NvmeNamespace *ns = iocb->ns;
3514 iocb->ret = ret;
3515 iocb->req->status = NVME_WRITE_FAULT;
3517 } else if (iocb->ret < 0) {
3522 trace_pci_nvme_flush_ns(iocb->nsid);
3524 iocb->ns = NULL;
3525 iocb->aiocb = blk_aio_flush(ns->blkconf.blk, nvme_flush_ns_cb, iocb);
3530 nvme_do_flush(iocb);
3533 static void nvme_do_flush(NvmeFlushAIOCB *iocb)
3535 NvmeRequest *req = iocb->req;
3539 if (iocb->ret < 0) {
3543 if (iocb->broadcast) {
3544 for (i = iocb->nsid + 1; i <= NVME_MAX_NAMESPACES; i++) {
3545 iocb->ns = nvme_ns(n, i);
3546 if (iocb->ns) {
3547 iocb->nsid = i;
3553 if (!iocb->ns) {
3557 nvme_flush_ns_cb(iocb, 0);
3561 iocb->common.cb(iocb->common.opaque, iocb->ret);
3562 qemu_aio_unref(iocb);
3567 NvmeFlushAIOCB *iocb;
3571 iocb = qemu_aio_get(&nvme_flush_aiocb_info, NULL, nvme_misc_cb, req);
3573 iocb->req = req;
3574 iocb->ret = 0;
3575 iocb->ns = NULL;
3576 iocb->nsid = 0;
3577 iocb->broadcast = (nsid == NVME_NSID_BROADCAST);
3579 if (!iocb->broadcast) {
3585 iocb->ns = nvme_ns(n, nsid);
3586 if (!iocb->ns) {
3591 iocb->nsid = nsid;
3594 req->aiocb = &iocb->common;
3595 nvme_do_flush(iocb);
3600 qemu_aio_unref(iocb);
4080 NvmeZoneResetAIOCB *iocb = container_of(aiocb, NvmeZoneResetAIOCB, common);
4081 NvmeRequest *req = iocb->req;
4084 iocb->idx = ns->num_zones;
4086 iocb->ret = -ECANCELED;
4088 if (iocb->aiocb) {
4089 blk_aio_cancel_async(iocb->aiocb);
4090 iocb->aiocb = NULL;
4103 NvmeZoneResetAIOCB *iocb = opaque;
4104 NvmeRequest *req = iocb->req;
4109 if (ret < 0 || iocb->ret < 0 || !ns->lbaf.ms) {
4113 moff = nvme_moff(ns, iocb->zone->d.zslba);
4116 iocb->aiocb = blk_aio_pwrite_zeroes(ns->blkconf.blk, moff, count,
4118 nvme_zone_reset_cb, iocb);
4122 nvme_zone_reset_cb(iocb, ret);
4127 NvmeZoneResetAIOCB *iocb = opaque;
4128 NvmeRequest *req = iocb->req;
4131 if (iocb->ret < 0) {
4134 iocb->ret = ret;
4138 if (iocb->zone) {
4139 nvme_zrm_reset(ns, iocb->zone);
4141 if (!iocb->all) {
4146 while (iocb->idx < ns->num_zones) {
4147 NvmeZone *zone = &ns->zone_array[iocb->idx++];
4151 if (!iocb->all) {
4161 iocb->zone = zone;
4170 iocb->aiocb = blk_aio_pwrite_zeroes(ns->blkconf.blk,
4175 iocb);
4180 iocb->aiocb = NULL;
4182 iocb->common.cb(iocb->common.opaque, iocb->ret);
4183 qemu_aio_unref(iocb);
4229 NvmeZoneResetAIOCB *iocb;
4284 iocb = blk_aio_get(&nvme_zone_reset_aiocb_info, ns->blkconf.blk,
4287 iocb->req = req;
4288 iocb->ret = 0;
4289 iocb->all = all;
4290 iocb->idx = zone_idx;
4291 iocb->zone = NULL;
4293 req->aiocb = &iocb->common;
4294 nvme_zone_reset_cb(iocb, 0);
6883 NvmeFormatAIOCB *iocb = container_of(aiocb, NvmeFormatAIOCB, common);
6885 iocb->ret = -ECANCELED;
6887 if (iocb->aiocb) {
6888 blk_aio_cancel_async(iocb->aiocb);
6889 iocb->aiocb = NULL;
6912 static void nvme_do_format(NvmeFormatAIOCB *iocb);
6916 NvmeFormatAIOCB *iocb = opaque;
6917 NvmeNamespace *ns = iocb->ns;
6920 if (iocb->ret < 0) {
6923 iocb->ret = ret;
6929 if (iocb->offset < ns->size) {
6930 bytes = MIN(BDRV_REQUEST_MAX_BYTES, ns->size - iocb->offset);
6932 iocb->aiocb = blk_aio_pwrite_zeroes(ns->blkconf.blk, iocb->offset,
6934 nvme_format_ns_cb, iocb);
6936 iocb->offset += bytes;
6940 nvme_format_set(ns, iocb->lbaf, iocb->mset, iocb->pi, iocb->pil);
6942 iocb->ns = NULL;
6943 iocb->offset = 0;
6946 nvme_do_format(iocb);
6970 static void nvme_do_format(NvmeFormatAIOCB *iocb)
6972 NvmeRequest *req = iocb->req;
6980 if (iocb->ret < 0) {
6984 if (iocb->broadcast) {
6985 for (i = iocb->nsid + 1; i <= NVME_MAX_NAMESPACES; i++) {
6986 iocb->ns = nvme_ns(n, i);
6987 if (iocb->ns) {
6988 iocb->nsid = i;
6994 if (!iocb->ns) {
6998 status = nvme_format_check(iocb->ns, lbaf, pi);
7004 iocb->ns->status = NVME_FORMAT_IN_PROGRESS;
7005 nvme_format_ns_cb(iocb, 0);
7009 iocb->common.cb(iocb->common.opaque, iocb->ret);
7010 qemu_aio_unref(iocb);
7015 NvmeFormatAIOCB *iocb;
7025 iocb = qemu_aio_get(&nvme_format_aiocb_info, NULL, nvme_misc_cb, req);
7027 iocb->req = req;
7028 iocb->ret = 0;
7029 iocb->ns = NULL;
7030 iocb->nsid = 0;
7031 iocb->lbaf = lbaf;
7032 iocb->mset = mset;
7033 iocb->pi = pi;
7034 iocb->pil = pil;
7035 iocb->broadcast = (nsid == NVME_NSID_BROADCAST);
7036 iocb->offset = 0;
7039 iocb->lbaf |= lbafu << 4;
7042 if (!iocb->broadcast) {
7048 iocb->ns = nvme_ns(n, nsid);
7049 if (!iocb->ns) {
7055 req->aiocb = &iocb->common;
7056 nvme_do_format(iocb);
7061 qemu_aio_unref(iocb);