Skip to content

Commit 3acbabb

Browse files
committed
linux: fixup log page offset in nvme_get_log_page()
When resubmitting the log page with a different length in nvme_get_log_page() we need to store the original length of the log page to avoid the length being overwritten. Signed-off-by: Hannes Reinecke <[email protected]>
1 parent 67b0d97 commit 3acbabb

1 file changed

Lines changed: 4 additions & 4 deletions

File tree

src/nvme/linux.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,7 @@ int nvme_fw_download_seq(int fd, __u32 size, __u32 xfer, __u32 offset,
119119

120120
int nvme_get_log_page(int fd, __u32 xfer_len, struct nvme_get_log_args *args)
121121
{
122-
__u64 offset = 0, xfer;
122+
__u64 offset = 0, xfer, data_len = args->len;
123123
bool retain = true;
124124
void *ptr = args->log;
125125
int ret;
@@ -129,7 +129,7 @@ int nvme_get_log_page(int fd, __u32 xfer_len, struct nvme_get_log_args *args)
129129
* avoids having to check the MDTS value of the controller.
130130
*/
131131
do {
132-
xfer = args->len - offset;
132+
xfer = data_len - offset;
133133
if (xfer > xfer_len)
134134
xfer = xfer_len;
135135

@@ -138,7 +138,7 @@ int nvme_get_log_page(int fd, __u32 xfer_len, struct nvme_get_log_args *args)
138138
* last portion of this log page so the data remains latched
139139
* during the fetch sequence.
140140
*/
141-
if (offset + xfer == args->len)
141+
if (offset + xfer == data_len)
142142
retain = args->rae;
143143

144144
args->lpo = offset;
@@ -151,7 +151,7 @@ int nvme_get_log_page(int fd, __u32 xfer_len, struct nvme_get_log_args *args)
151151

152152
offset += xfer;
153153
ptr += xfer;
154-
} while (offset < args->len);
154+
} while (offset < data_len);
155155

156156
return 0;
157157
}

0 commit comments

Comments
 (0)