@@ -116,33 +116,19 @@ int nvme_fw_download_seq(int fd, __u32 size, __u32 xfer, __u32 offset,
116116 return err ;
117117}
118118
119- int nvme_get_log_page (int fd , __u32 nsid , __u8 log_id , bool rae ,
120- __u32 xfer_len , __u32 data_len , void * data )
119+ int nvme_get_log_page (int fd , __u32 xfer_len , struct nvme_get_log_args * args )
121120{
122121 __u64 offset = 0 , xfer ;
123122 bool retain = true;
124- void * ptr = data ;
123+ void * ptr = args -> log ;
125124 int ret ;
126- struct nvme_get_log_args args = {
127- .args_size = sizeof (args ),
128- .fd = fd ,
129- .nsid = nsid ,
130- .lid = log_id ,
131- .lsp = NVME_LOG_LSP_NONE ,
132- .lsi = NVME_LOG_LSI_NONE ,
133- .uuidx = NVME_UUID_NONE ,
134- .timeout = NVME_DEFAULT_IOCTL_TIMEOUT ,
135- .result = NULL ,
136- .csi = NVME_CSI_NVM ,
137- .ot = false,
138- };
139125
140126 /*
141127 * 4k is the smallest possible transfer unit, so restricting to 4k
142128 * avoids having to check the MDTS value of the controller.
143129 */
144130 do {
145- xfer = data_len - offset ;
131+ xfer = args -> len - offset ;
146132 if (xfer > xfer_len )
147133 xfer = xfer_len ;
148134
@@ -151,30 +137,24 @@ int nvme_get_log_page(int fd, __u32 nsid, __u8 log_id, bool rae,
151137 * last portion of this log page so the data remains latched
152138 * during the fetch sequence.
153139 */
154- if (offset + xfer == data_len )
155- retain = rae ;
156-
157- args . lpo = offset ;
158- args . len = xfer ;
159- args . log = ptr ;
160- args . rae = retain ;
161- ret = nvme_get_log (& args );
140+ if (offset + xfer == args -> len )
141+ retain = args -> rae ;
142+
143+ args -> lpo = offset ;
144+ args -> len = xfer ;
145+ args -> log = ptr ;
146+ args -> rae = retain ;
147+ ret = nvme_get_log (args );
162148 if (ret )
163149 return ret ;
164150
165151 offset += xfer ;
166152 ptr += xfer ;
167- } while (offset < data_len );
153+ } while (offset < args -> len );
168154
169155 return 0 ;
170156}
171157
172- int nvme_get_log_page_padded (int fd , __u32 nsid , __u8 log_id , bool rae ,
173- __u32 data_len , void * data )
174- {
175- return nvme_get_log_page (fd , nsid , log_id , rae , 4096 , data_len , data );
176- }
177-
178158static int nvme_get_telemetry_log (int fd , bool create , bool ctrl , bool rae ,
179159 struct nvme_telemetry_log * * buf , enum nvme_telemetry_da da ,
180160 size_t * size )
@@ -186,6 +166,19 @@ static int nvme_get_telemetry_log(int fd, bool create, bool ctrl, bool rae,
186166 struct nvme_id_ctrl id_ctrl ;
187167 void * log , * tmp ;
188168 int err ;
169+ struct nvme_get_log_args args = {
170+ .args_size = sizeof (args ),
171+ .fd = fd ,
172+ .nsid = NVME_NSID_NONE ,
173+ .lsp = NVME_LOG_LSP_NONE ,
174+ .lsi = NVME_LOG_LSI_NONE ,
175+ .uuidx = NVME_UUID_NONE ,
176+ .timeout = NVME_DEFAULT_IOCTL_TIMEOUT ,
177+ .result = NULL ,
178+ .csi = NVME_CSI_NVM ,
179+ .rae = rae ,
180+ .ot = false,
181+ };
189182
190183 * size = 0 ;
191184
@@ -254,8 +247,10 @@ static int nvme_get_telemetry_log(int fd, bool create, bool ctrl, bool rae,
254247 }
255248 log = tmp ;
256249
257- err = nvme_get_log_page_padded (fd , NVME_NSID_NONE , lid , rae , (__u32 )* size ,
258- (void * )log );
250+ args .lid = lid ;
251+ args .log = log ;
252+ args .len = * size ;
253+ err = nvme_get_log_page (fd , 4096 , & args );
259254 if (!err ) {
260255 * buf = log ;
261256 return 0 ;
@@ -288,6 +283,19 @@ int nvme_get_lba_status_log(int fd, bool rae, struct nvme_lba_status_log **log)
288283 __u32 size = sizeof (struct nvme_lba_status_log );
289284 void * buf , * tmp ;
290285 int err ;
286+ struct nvme_get_log_args args = {
287+ .args_size = sizeof (args ),
288+ .fd = fd ,
289+ .nsid = NVME_NSID_NONE ,
290+ .lsp = NVME_LOG_LSP_NONE ,
291+ .lsi = NVME_LOG_LSI_NONE ,
292+ .uuidx = NVME_UUID_NONE ,
293+ .timeout = NVME_DEFAULT_IOCTL_TIMEOUT ,
294+ .result = NULL ,
295+ .csi = NVME_CSI_NVM ,
296+ .rae = rae ,
297+ .ot = false,
298+ };
291299
292300 buf = malloc (size );
293301 if (!buf )
@@ -310,8 +318,10 @@ int nvme_get_lba_status_log(int fd, bool rae, struct nvme_lba_status_log **log)
310318 buf = tmp ;
311319 * log = buf ;
312320
313- err = nvme_get_log_page_padded (fd , NVME_NSID_NONE , NVME_LOG_LID_LBA_STATUS ,
314- rae , size , buf );
321+ args .lid = NVME_LOG_LID_LBA_STATUS ;
322+ args .log = buf ;
323+ args .len = size ;
324+ err = nvme_get_log_page (fd , 4096 , & args );
315325 if (!err )
316326 return 0 ;
317327
0 commit comments