Loading include/spdk/bdev.h +11 −0 Original line number Diff line number Diff line Loading @@ -249,6 +249,17 @@ uint32_t spdk_bdev_get_max_unmap_descriptors(const struct spdk_bdev *bdev); */ size_t spdk_bdev_get_buf_align(const struct spdk_bdev *bdev); /** * Query whether block device has an enabled write cache. * * \param bdev Block device to query. * \return true if block device has a volatile write cache enabled. * * If this function returns true, written data may not be persistent until a flush command * is issued. */ bool spdk_bdev_has_write_cache(const struct spdk_bdev *bdev); struct spdk_bdev_io *spdk_bdev_read(struct spdk_bdev *bdev, struct spdk_io_channel *ch, void *buf, uint64_t offset, uint64_t nbytes, spdk_bdev_io_completion_cb cb, void *cb_arg); Loading lib/bdev/bdev.c +6 −0 Original line number Diff line number Diff line Loading @@ -574,6 +574,12 @@ spdk_bdev_get_buf_align(const struct spdk_bdev *bdev) return 1; } bool spdk_bdev_has_write_cache(const struct spdk_bdev *bdev) { return bdev->write_cache; } static int spdk_bdev_io_valid(struct spdk_bdev *bdev, uint64_t offset, uint64_t nbytes) { Loading lib/scsi/scsi_bdev.c +1 −1 Original line number Diff line number Diff line Loading @@ -888,7 +888,7 @@ spdk_bdev_scsi_mode_sense_page(struct spdk_bdev *bdev, plen = 0x12 + 2; mode_sense_page_init(cp, plen, page, subpage); if (cp && bdev->write_cache && pc != 0x01) if (cp && spdk_bdev_has_write_cache(bdev) && pc != 0x01) cp[2] |= 0x4; /* WCE */ /* Read Cache Disable (RCD) = 1 */ Loading test/lib/scsi/scsi_bdev/scsi_bdev_ut.c +6 −0 Original line number Diff line number Diff line Loading @@ -115,6 +115,12 @@ spdk_bdev_get_max_unmap_descriptors(const struct spdk_bdev *bdev) return 1; } bool spdk_bdev_has_write_cache(const struct spdk_bdev *bdev) { return false; } void spdk_scsi_lun_clear_all(struct spdk_scsi_lun *lun) { Loading Loading
include/spdk/bdev.h +11 −0 Original line number Diff line number Diff line Loading @@ -249,6 +249,17 @@ uint32_t spdk_bdev_get_max_unmap_descriptors(const struct spdk_bdev *bdev); */ size_t spdk_bdev_get_buf_align(const struct spdk_bdev *bdev); /** * Query whether block device has an enabled write cache. * * \param bdev Block device to query. * \return true if block device has a volatile write cache enabled. * * If this function returns true, written data may not be persistent until a flush command * is issued. */ bool spdk_bdev_has_write_cache(const struct spdk_bdev *bdev); struct spdk_bdev_io *spdk_bdev_read(struct spdk_bdev *bdev, struct spdk_io_channel *ch, void *buf, uint64_t offset, uint64_t nbytes, spdk_bdev_io_completion_cb cb, void *cb_arg); Loading
lib/bdev/bdev.c +6 −0 Original line number Diff line number Diff line Loading @@ -574,6 +574,12 @@ spdk_bdev_get_buf_align(const struct spdk_bdev *bdev) return 1; } bool spdk_bdev_has_write_cache(const struct spdk_bdev *bdev) { return bdev->write_cache; } static int spdk_bdev_io_valid(struct spdk_bdev *bdev, uint64_t offset, uint64_t nbytes) { Loading
lib/scsi/scsi_bdev.c +1 −1 Original line number Diff line number Diff line Loading @@ -888,7 +888,7 @@ spdk_bdev_scsi_mode_sense_page(struct spdk_bdev *bdev, plen = 0x12 + 2; mode_sense_page_init(cp, plen, page, subpage); if (cp && bdev->write_cache && pc != 0x01) if (cp && spdk_bdev_has_write_cache(bdev) && pc != 0x01) cp[2] |= 0x4; /* WCE */ /* Read Cache Disable (RCD) = 1 */ Loading
test/lib/scsi/scsi_bdev/scsi_bdev_ut.c +6 −0 Original line number Diff line number Diff line Loading @@ -115,6 +115,12 @@ spdk_bdev_get_max_unmap_descriptors(const struct spdk_bdev *bdev) return 1; } bool spdk_bdev_has_write_cache(const struct spdk_bdev *bdev) { return false; } void spdk_scsi_lun_clear_all(struct spdk_scsi_lun *lun) { Loading