Commit 8c613a60 authored by zhenwei pi's avatar zhenwei pi Committed by Tomasz Zawadzki
Browse files

scsi: Fix MAXIMUM WRITE SAME LENGTH field



Originally, the 'MAXIMUM WRITE SAME LENGTH' feild has dependence on
Bdev UNMAP, once the Bdev has no support on UNMAP(Ex, AIO), the
initiator side gets 0.

According to spec:
A MAXIMUM WRITE SAME LENGTH field set to a non-zero value indicates
the maximum value that the device server accepts in the NUMBER OF
LOGICAL BLOCKS field for a WRITE SAME command. A MAXIMUM WRITE SAME
LENGTH field set to zero indicates that the device server does not
report a limit on the number of logical blocks that may be requested
for a single WRITE SAME command.

Unlimited maximum blocks on a single request is not expected for SPDK,
fix 'MAXIMUM WRITE SAME LENGTH' field.

Change-Id: I2005156daa198afe0738236f32bfd61eeb3b8356
Signed-off-by: default avatarzhenwei pi <pizhenwei@bytedance.com>
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/20401


Tested-by: default avatarSPDK CI Jenkins <sys_sgci@intel.com>
Reviewed-by: default avatarShuhei Matsumoto <smatsumoto@nvidia.com>
Community-CI: Mellanox Build Bot
Reviewed-by: default avatarChangpeng Liu <changpeng.liu@intel.com>
Reviewed-by: default avatarJim Harris <jim.harris@samsung.com>
parent 6c63bdc5
Loading
Loading
Loading
Loading
+11 −13
Original line number Diff line number Diff line
@@ -512,8 +512,6 @@ bdev_scsi_inquiry(struct spdk_bdev *bdev, struct spdk_scsi_task *task,

			/* MAXIMUM PREFETCH XDREAD XDWRITE TRANSFER LENGTH */

			len = 20 - hlen;

			if (spdk_bdev_io_type_supported(bdev, SPDK_BDEV_IO_TYPE_UNMAP)) {
				/*
				 * MAXIMUM UNMAP LBA COUNT: indicates the
@@ -539,6 +537,7 @@ bdev_scsi_inquiry(struct spdk_bdev *bdev, struct spdk_scsi_task *task,
				 * OPTIMAL UNMAP GRANULARITY nor the UNMAP GRANULARITY
				 * ALIGNMENT fields are valid.
				 */
			}

			/*
			 * MAXIMUM WRITE SAME LENGTH: indicates the
@@ -551,7 +550,6 @@ bdev_scsi_inquiry(struct spdk_bdev *bdev, struct spdk_scsi_task *task,
			/* Reserved */
			/* not specified */
			len = 64 - hlen;
			}

			to_be16(vpage->alloc_len, len);
			break;