diff options
Diffstat (limited to 'fs/cifs/transport.c')
-rw-r--r-- | fs/cifs/transport.c | 23 |
1 files changed, 8 insertions, 15 deletions
diff --git a/fs/cifs/transport.c b/fs/cifs/transport.c index 16bcc0725cee..d1998b6086ef 100644 --- a/fs/cifs/transport.c +++ b/fs/cifs/transport.c | |||
@@ -426,7 +426,7 @@ SendReceiveNoRsp(const unsigned int xid, struct cifsSesInfo *ses, | |||
426 | } | 426 | } |
427 | 427 | ||
428 | static int | 428 | static int |
429 | sync_mid_result(struct mid_q_entry *mid, struct TCP_Server_Info *server) | 429 | cifs_sync_mid_result(struct mid_q_entry *mid, struct TCP_Server_Info *server) |
430 | { | 430 | { |
431 | int rc = 0; | 431 | int rc = 0; |
432 | 432 | ||
@@ -434,28 +434,21 @@ sync_mid_result(struct mid_q_entry *mid, struct TCP_Server_Info *server) | |||
434 | mid->mid, mid->midState); | 434 | mid->mid, mid->midState); |
435 | 435 | ||
436 | spin_lock(&GlobalMid_Lock); | 436 | spin_lock(&GlobalMid_Lock); |
437 | /* ensure that it's no longer on the pending_mid_q */ | ||
438 | list_del_init(&mid->qhead); | ||
439 | |||
440 | switch (mid->midState) { | 437 | switch (mid->midState) { |
441 | case MID_RESPONSE_RECEIVED: | 438 | case MID_RESPONSE_RECEIVED: |
442 | spin_unlock(&GlobalMid_Lock); | 439 | spin_unlock(&GlobalMid_Lock); |
443 | return rc; | 440 | return rc; |
444 | case MID_REQUEST_SUBMITTED: | ||
445 | /* socket is going down, reject all calls */ | ||
446 | if (server->tcpStatus == CifsExiting) { | ||
447 | cERROR(1, "%s: canceling mid=%d cmd=0x%x state=%d", | ||
448 | __func__, mid->mid, mid->command, mid->midState); | ||
449 | rc = -EHOSTDOWN; | ||
450 | break; | ||
451 | } | ||
452 | case MID_RETRY_NEEDED: | 441 | case MID_RETRY_NEEDED: |
453 | rc = -EAGAIN; | 442 | rc = -EAGAIN; |
454 | break; | 443 | break; |
455 | case MID_RESPONSE_MALFORMED: | 444 | case MID_RESPONSE_MALFORMED: |
456 | rc = -EIO; | 445 | rc = -EIO; |
457 | break; | 446 | break; |
447 | case MID_SHUTDOWN: | ||
448 | rc = -EHOSTDOWN; | ||
449 | break; | ||
458 | default: | 450 | default: |
451 | list_del_init(&mid->qhead); | ||
459 | cERROR(1, "%s: invalid mid state mid=%d state=%d", __func__, | 452 | cERROR(1, "%s: invalid mid state mid=%d state=%d", __func__, |
460 | mid->mid, mid->midState); | 453 | mid->mid, mid->midState); |
461 | rc = -EIO; | 454 | rc = -EIO; |
@@ -618,7 +611,7 @@ SendReceive2(const unsigned int xid, struct cifsSesInfo *ses, | |||
618 | 611 | ||
619 | cifs_small_buf_release(in_buf); | 612 | cifs_small_buf_release(in_buf); |
620 | 613 | ||
621 | rc = sync_mid_result(midQ, ses->server); | 614 | rc = cifs_sync_mid_result(midQ, ses->server); |
622 | if (rc != 0) { | 615 | if (rc != 0) { |
623 | atomic_dec(&ses->server->inFlight); | 616 | atomic_dec(&ses->server->inFlight); |
624 | wake_up(&ses->server->request_q); | 617 | wake_up(&ses->server->request_q); |
@@ -739,7 +732,7 @@ SendReceive(const unsigned int xid, struct cifsSesInfo *ses, | |||
739 | spin_unlock(&GlobalMid_Lock); | 732 | spin_unlock(&GlobalMid_Lock); |
740 | } | 733 | } |
741 | 734 | ||
742 | rc = sync_mid_result(midQ, ses->server); | 735 | rc = cifs_sync_mid_result(midQ, ses->server); |
743 | if (rc != 0) { | 736 | if (rc != 0) { |
744 | atomic_dec(&ses->server->inFlight); | 737 | atomic_dec(&ses->server->inFlight); |
745 | wake_up(&ses->server->request_q); | 738 | wake_up(&ses->server->request_q); |
@@ -914,7 +907,7 @@ SendReceiveBlockingLock(const unsigned int xid, struct cifsTconInfo *tcon, | |||
914 | rstart = 1; | 907 | rstart = 1; |
915 | } | 908 | } |
916 | 909 | ||
917 | rc = sync_mid_result(midQ, ses->server); | 910 | rc = cifs_sync_mid_result(midQ, ses->server); |
918 | if (rc != 0) | 911 | if (rc != 0) |
919 | return rc; | 912 | return rc; |
920 | 913 | ||