Revision 4277906d hw/virtio-blk.c
b/hw/virtio-blk.c | ||
---|---|---|
165 | 165 |
static void virtio_blk_handle_scsi(VirtIOBlockReq *req) |
166 | 166 |
{ |
167 | 167 |
struct sg_io_hdr hdr; |
168 |
int ret, size = 0;
|
|
168 |
int ret; |
|
169 | 169 |
int status; |
170 | 170 |
int i; |
171 | 171 |
|
... | ... | |
194 | 194 |
* before the regular inhdr. |
195 | 195 |
*/ |
196 | 196 |
req->scsi = (void *)req->elem.in_sg[req->elem.in_num - 2].iov_base; |
197 |
size = sizeof(*req->in) + sizeof(*req->scsi); |
|
198 | 197 |
|
199 | 198 |
memset(&hdr, 0, sizeof(struct sg_io_hdr)); |
200 | 199 |
hdr.interface_id = 'S'; |
... | ... | |
226 | 225 |
hdr.dxfer_len += req->elem.in_sg[i].iov_len; |
227 | 226 |
|
228 | 227 |
hdr.dxferp = req->elem.in_sg; |
229 |
size += hdr.dxfer_len; |
|
230 | 228 |
} else { |
231 | 229 |
/* |
232 | 230 |
* Some SCSI commands don't actually transfer any data. |
... | ... | |
236 | 234 |
|
237 | 235 |
hdr.sbp = req->elem.in_sg[req->elem.in_num - 3].iov_base; |
238 | 236 |
hdr.mx_sb_len = req->elem.in_sg[req->elem.in_num - 3].iov_len; |
239 |
size += hdr.mx_sb_len; |
|
240 | 237 |
|
241 | 238 |
ret = bdrv_ioctl(req->dev->bs, SG_IO, &hdr); |
242 | 239 |
if (ret) { |
Also available in: Unified diff