aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--fs/cifs/smb2ops.c24
1 files changed, 14 insertions, 10 deletions
diff --git a/fs/cifs/smb2ops.c b/fs/cifs/smb2ops.c
index fa8d2e1076c8..73f9c6af4065 100644
--- a/fs/cifs/smb2ops.c
+++ b/fs/cifs/smb2ops.c
@@ -3207,11 +3207,23 @@ handle_read_data(struct TCP_Server_Info *server, struct mid_q_entry *mid,
3207 server->ops->is_status_pending(buf, server, 0)) 3207 server->ops->is_status_pending(buf, server, 0))
3208 return -1; 3208 return -1;
3209 3209
3210 rdata->result = server->ops->map_error(buf, false); 3210 /* set up first two iov to get credits */
3211 rdata->iov[0].iov_base = buf;
3212 rdata->iov[0].iov_len = 4;
3213 rdata->iov[1].iov_base = buf + 4;
3214 rdata->iov[1].iov_len =
3215 min_t(unsigned int, buf_len, server->vals->read_rsp_size) - 4;
3216 cifs_dbg(FYI, "0: iov_base=%p iov_len=%zu\n",
3217 rdata->iov[0].iov_base, rdata->iov[0].iov_len);
3218 cifs_dbg(FYI, "1: iov_base=%p iov_len=%zu\n",
3219 rdata->iov[1].iov_base, rdata->iov[1].iov_len);
3220
3221 rdata->result = server->ops->map_error(buf, true);
3211 if (rdata->result != 0) { 3222 if (rdata->result != 0) {
3212 cifs_dbg(FYI, "%s: server returned error %d\n", 3223 cifs_dbg(FYI, "%s: server returned error %d\n",
3213 __func__, rdata->result); 3224 __func__, rdata->result);
3214 dequeue_mid(mid, rdata->result); 3225 /* normal error on read response */
3226 dequeue_mid(mid, false);
3215 return 0; 3227 return 0;
3216 } 3228 }
3217 3229
@@ -3284,14 +3296,6 @@ handle_read_data(struct TCP_Server_Info *server, struct mid_q_entry *mid,
3284 return 0; 3296 return 0;
3285 } 3297 }
3286 3298
3287 /* set up first iov for signature check */
3288 rdata->iov[0].iov_base = buf;
3289 rdata->iov[0].iov_len = 4;
3290 rdata->iov[1].iov_base = buf + 4;
3291 rdata->iov[1].iov_len = server->vals->read_rsp_size - 4;
3292 cifs_dbg(FYI, "0: iov_base=%p iov_len=%zu\n",
3293 rdata->iov[0].iov_base, server->vals->read_rsp_size);
3294
3295 length = rdata->copy_into_pages(server, rdata, &iter); 3299 length = rdata->copy_into_pages(server, rdata, &iter);
3296 3300
3297 kfree(bvec); 3301 kfree(bvec);