.. | .. |
---|
129 | 129 | if (masked_prod < masked_cons) { |
---|
130 | 130 | vec[0].iov_base = data->in + masked_prod; |
---|
131 | 131 | vec[0].iov_len = wanted; |
---|
132 | | - iov_iter_kvec(&msg.msg_iter, WRITE, vec, 1, wanted); |
---|
| 132 | + iov_iter_kvec(&msg.msg_iter, READ, vec, 1, wanted); |
---|
133 | 133 | } else { |
---|
134 | 134 | vec[0].iov_base = data->in + masked_prod; |
---|
135 | 135 | vec[0].iov_len = array_size - masked_prod; |
---|
136 | 136 | vec[1].iov_base = data->in; |
---|
137 | 137 | vec[1].iov_len = wanted - vec[0].iov_len; |
---|
138 | | - iov_iter_kvec(&msg.msg_iter, WRITE, vec, 2, wanted); |
---|
| 138 | + iov_iter_kvec(&msg.msg_iter, READ, vec, 2, wanted); |
---|
139 | 139 | } |
---|
140 | 140 | |
---|
141 | 141 | atomic_set(&map->read, 0); |
---|
.. | .. |
---|
188 | 188 | if (pvcalls_mask(prod, array_size) > pvcalls_mask(cons, array_size)) { |
---|
189 | 189 | vec[0].iov_base = data->out + pvcalls_mask(cons, array_size); |
---|
190 | 190 | vec[0].iov_len = size; |
---|
191 | | - iov_iter_kvec(&msg.msg_iter, READ, vec, 1, size); |
---|
| 191 | + iov_iter_kvec(&msg.msg_iter, WRITE, vec, 1, size); |
---|
192 | 192 | } else { |
---|
193 | 193 | vec[0].iov_base = data->out + pvcalls_mask(cons, array_size); |
---|
194 | 194 | vec[0].iov_len = array_size - pvcalls_mask(cons, array_size); |
---|
195 | 195 | vec[1].iov_base = data->out; |
---|
196 | 196 | vec[1].iov_len = size - vec[0].iov_len; |
---|
197 | | - iov_iter_kvec(&msg.msg_iter, READ, vec, 2, size); |
---|
| 197 | + iov_iter_kvec(&msg.msg_iter, WRITE, vec, 2, size); |
---|
198 | 198 | } |
---|
199 | 199 | |
---|
200 | 200 | atomic_set(&map->write, 0); |
---|
.. | .. |
---|
321 | 321 | void *page; |
---|
322 | 322 | |
---|
323 | 323 | map = kzalloc(sizeof(*map), GFP_KERNEL); |
---|
324 | | - if (map == NULL) |
---|
| 324 | + if (map == NULL) { |
---|
| 325 | + sock_release(sock); |
---|
325 | 326 | return NULL; |
---|
| 327 | + } |
---|
326 | 328 | |
---|
327 | 329 | map->fedata = fedata; |
---|
328 | 330 | map->sock = sock; |
---|
.. | .. |
---|
414 | 416 | req->u.connect.ref, |
---|
415 | 417 | req->u.connect.evtchn, |
---|
416 | 418 | sock); |
---|
417 | | - if (!map) { |
---|
| 419 | + if (!map) |
---|
418 | 420 | ret = -EFAULT; |
---|
419 | | - sock_release(sock); |
---|
420 | | - } |
---|
421 | 421 | |
---|
422 | 422 | out: |
---|
423 | 423 | rsp = RING_GET_RESPONSE(&fedata->ring, fedata->ring.rsp_prod_pvt++); |
---|
.. | .. |
---|
558 | 558 | sock); |
---|
559 | 559 | if (!map) { |
---|
560 | 560 | ret = -EFAULT; |
---|
561 | | - sock_release(sock); |
---|
562 | 561 | goto out_error; |
---|
563 | 562 | } |
---|
564 | 563 | |
---|