|
@@ -688,6 +688,7 @@ vhost_scsi_iov_to_sgl(struct vhost_scsi_cmd *cmd, bool write,
|
|
struct scatterlist *sg, int sg_count)
|
|
struct scatterlist *sg, int sg_count)
|
|
{
|
|
{
|
|
size_t off = iter->iov_offset;
|
|
size_t off = iter->iov_offset;
|
|
|
|
+ struct scatterlist *p = sg;
|
|
int i, ret;
|
|
int i, ret;
|
|
|
|
|
|
for (i = 0; i < iter->nr_segs; i++) {
|
|
for (i = 0; i < iter->nr_segs; i++) {
|
|
@@ -696,8 +697,8 @@ vhost_scsi_iov_to_sgl(struct vhost_scsi_cmd *cmd, bool write,
|
|
|
|
|
|
ret = vhost_scsi_map_to_sgl(cmd, base, len, sg, write);
|
|
ret = vhost_scsi_map_to_sgl(cmd, base, len, sg, write);
|
|
if (ret < 0) {
|
|
if (ret < 0) {
|
|
- for (i = 0; i < sg_count; i++) {
|
|
|
|
- struct page *page = sg_page(&sg[i]);
|
|
|
|
|
|
+ while (p < sg) {
|
|
|
|
+ struct page *page = sg_page(p++);
|
|
if (page)
|
|
if (page)
|
|
put_page(page);
|
|
put_page(page);
|
|
}
|
|
}
|