Commit 2b36fae2 authored by Changpeng Liu's avatar Changpeng Liu Committed by Tomasz Zawadzki
Browse files

lib/ublk: set device write cache mode based on FLUSH support



We didn't enable the "write_cache" attribute previously, every
kernel ublk device is running in "write through" mode, here set
this flag based on backend device's support capability.

Change-Id: I6d041020f351c10d1fe029b036ef205aec8326e3
Signed-off-by: default avatarChangpeng Liu <changpeng.liu@intel.com>
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/20368


Reviewed-by: default avatarJim Harris <jim.harris@samsung.com>
Reviewed-by: default avatarShuhei Matsumoto <smatsumoto@nvidia.com>
Community-CI: Mellanox Build Bot
Tested-by: default avatarSPDK CI Jenkins <sys_sgci@intel.com>
parent 470e8518
Loading
Loading
Loading
Loading
+6 −2
Original line number Diff line number Diff line
@@ -1187,7 +1187,7 @@ _ublk_submit_bdev_io(struct ublk_queue *q, struct ublk_io *io)
		rc = spdk_bdev_write_blocks(desc, ch, io->payload, offset_blocks, num_blocks, ublk_io_done, io);
		break;
	case UBLK_IO_OP_FLUSH:
		rc = spdk_bdev_flush_blocks(desc, ch, offset_blocks, num_blocks, ublk_io_done, io);
		rc = spdk_bdev_flush_blocks(desc, ch, 0, spdk_bdev_get_num_blocks(ublk->bdev), ublk_io_done, io);
		break;
	case UBLK_IO_OP_DISCARD:
		rc = spdk_bdev_unmap_blocks(desc, ch, offset_blocks, num_blocks, ublk_io_done, io);
@@ -1204,7 +1204,7 @@ _ublk_submit_bdev_io(struct ublk_queue *q, struct ublk_io *io)
			SPDK_INFOLOG(ublk, "No memory, start to queue io.\n");
			ublk_queue_io(io);
		} else {
			SPDK_ERRLOG("ublk io failed in ublk_queue_io, rc=%d.\n", rc);
			SPDK_ERRLOG("ublk io failed in ublk_queue_io, rc=%d, ublk_op=%u\n", rc, ublk_op);
			ublk_io_done(NULL, false, io);
		}
	}
@@ -1649,6 +1649,10 @@ ublk_info_param_init(struct spdk_ublk_dev *ublk)
		}
	};

	if (spdk_bdev_io_type_supported(bdev, SPDK_BDEV_IO_TYPE_FLUSH)) {
		uparams.basic.attrs = UBLK_ATTR_VOLATILE_CACHE;
	}

	if (spdk_bdev_io_type_supported(bdev, SPDK_BDEV_IO_TYPE_UNMAP)) {
		uparams.types |= UBLK_PARAM_TYPE_DISCARD;
		uparams.discard.discard_alignment = sectors_per_block;