X-Git-Url: https://git.karo-electronics.de/?a=blobdiff_plain;f=fs%2Fsmbfs%2Frequest.c;h=c8e96195b96ee29c52b931b4c2b47c9e1f90e8e0;hb=8f7c58814eb75bf97b8bc18d107b2e26f28b6585;hp=c71c375863cc473a254462d8187365cecb302367;hpb=0825788ff27c7145e9d558cb2a26f3837d1f9be5;p=mv-sheeva.git diff --git a/fs/smbfs/request.c b/fs/smbfs/request.c index c71c375863c..c8e96195b96 100644 --- a/fs/smbfs/request.c +++ b/fs/smbfs/request.c @@ -339,9 +339,11 @@ int smb_add_request(struct smb_request *req) /* * On timeout or on interrupt we want to try and remove the * request from the recvq/xmitq. + * First check if the request is still part of a queue. (May + * have been removed by some error condition) */ smb_lock_server(server); - if (!(req->rq_flags & SMB_REQ_RECEIVED)) { + if (!list_empty(&req->rq_queue)) { list_del_init(&req->rq_queue); smb_rput(req); } @@ -398,8 +400,7 @@ static int smb_request_send_req(struct smb_request *req) if (!(req->rq_flags & SMB_REQ_TRANSMITTED)) goto out; - list_del_init(&req->rq_queue); - list_add_tail(&req->rq_queue, &server->recvq); + list_move_tail(&req->rq_queue, &server->recvq); result = 1; out: return result; @@ -433,8 +434,7 @@ int smb_request_send_server(struct smb_sb_info *server) result = smb_request_send_req(req); if (result < 0) { server->conn_error = result; - list_del_init(&req->rq_queue); - list_add(&req->rq_queue, &server->xmitq); + list_move(&req->rq_queue, &server->xmitq); result = -EIO; goto out; }