diff options
| -rw-r--r-- | fs/cifs/transport.c | 21 |
1 files changed, 13 insertions, 8 deletions
diff --git a/fs/cifs/transport.c b/fs/cifs/transport.c index 8039c93ba57a..169e767ff57f 100644 --- a/fs/cifs/transport.c +++ b/fs/cifs/transport.c | |||
| @@ -374,10 +374,11 @@ smbd_done: | |||
| 374 | return rc; | 374 | return rc; |
| 375 | } | 375 | } |
| 376 | 376 | ||
| 377 | #define MAX_COMPOUND 2 | 377 | #define MAX_COMPOUND 5 |
| 378 | 378 | ||
| 379 | static int | 379 | static int |
| 380 | smb_send_rqst(struct TCP_Server_Info *server, struct smb_rqst *rqst, int flags) | 380 | smb_send_rqst(struct TCP_Server_Info *server, int num_rqst, |
| 381 | struct smb_rqst *rqst, int flags) | ||
| 381 | { | 382 | { |
| 382 | struct kvec iov; | 383 | struct kvec iov; |
| 383 | struct smb2_transform_hdr tr_hdr; | 384 | struct smb2_transform_hdr tr_hdr; |
| @@ -385,7 +386,10 @@ smb_send_rqst(struct TCP_Server_Info *server, struct smb_rqst *rqst, int flags) | |||
| 385 | int rc; | 386 | int rc; |
| 386 | 387 | ||
| 387 | if (!(flags & CIFS_TRANSFORM_REQ)) | 388 | if (!(flags & CIFS_TRANSFORM_REQ)) |
| 388 | return __smb_send_rqst(server, 1, rqst); | 389 | return __smb_send_rqst(server, num_rqst, rqst); |
| 390 | |||
| 391 | if (num_rqst > MAX_COMPOUND - 1) | ||
| 392 | return -ENOMEM; | ||
| 389 | 393 | ||
| 390 | memset(&cur_rqst[0], 0, sizeof(cur_rqst)); | 394 | memset(&cur_rqst[0], 0, sizeof(cur_rqst)); |
| 391 | memset(&iov, 0, sizeof(iov)); | 395 | memset(&iov, 0, sizeof(iov)); |
| @@ -402,12 +406,13 @@ smb_send_rqst(struct TCP_Server_Info *server, struct smb_rqst *rqst, int flags) | |||
| 402 | return -EIO; | 406 | return -EIO; |
| 403 | } | 407 | } |
| 404 | 408 | ||
| 405 | rc = server->ops->init_transform_rq(server, 2, &cur_rqst[0], rqst); | 409 | rc = server->ops->init_transform_rq(server, num_rqst + 1, |
| 410 | &cur_rqst[0], rqst); | ||
| 406 | if (rc) | 411 | if (rc) |
| 407 | return rc; | 412 | return rc; |
| 408 | 413 | ||
| 409 | rc = __smb_send_rqst(server, 2, &cur_rqst[0]); | 414 | rc = __smb_send_rqst(server, num_rqst + 1, &cur_rqst[0]); |
| 410 | smb3_free_compound_rqst(1, &cur_rqst[1]); | 415 | smb3_free_compound_rqst(num_rqst, &cur_rqst[1]); |
| 411 | return rc; | 416 | return rc; |
| 412 | } | 417 | } |
| 413 | 418 | ||
| @@ -621,7 +626,7 @@ cifs_call_async(struct TCP_Server_Info *server, struct smb_rqst *rqst, | |||
| 621 | */ | 626 | */ |
| 622 | cifs_save_when_sent(mid); | 627 | cifs_save_when_sent(mid); |
| 623 | cifs_in_send_inc(server); | 628 | cifs_in_send_inc(server); |
| 624 | rc = smb_send_rqst(server, rqst, flags); | 629 | rc = smb_send_rqst(server, 1, rqst, flags); |
| 625 | cifs_in_send_dec(server); | 630 | cifs_in_send_dec(server); |
| 626 | 631 | ||
| 627 | if (rc < 0) { | 632 | if (rc < 0) { |
| @@ -811,7 +816,7 @@ cifs_send_recv(const unsigned int xid, struct cifs_ses *ses, | |||
| 811 | 816 | ||
| 812 | midQ->mid_state = MID_REQUEST_SUBMITTED; | 817 | midQ->mid_state = MID_REQUEST_SUBMITTED; |
| 813 | cifs_in_send_inc(ses->server); | 818 | cifs_in_send_inc(ses->server); |
| 814 | rc = smb_send_rqst(ses->server, rqst, flags); | 819 | rc = smb_send_rqst(ses->server, 1, rqst, flags); |
| 815 | cifs_in_send_dec(ses->server); | 820 | cifs_in_send_dec(ses->server); |
| 816 | cifs_save_when_sent(midQ); | 821 | cifs_save_when_sent(midQ); |
| 817 | 822 | ||
