LASSERT(rqbd->rqbd_refcount == 0);
LASSERT(list_empty(&rqbd->rqbd_reqs));
- spin_lock(&svcpt->scp_lock);
- list_del(&rqbd->rqbd_list);
- svcpt->scp_nrqbds_total--;
- spin_unlock(&svcpt->scp_lock);
-
OBD_FREE_LARGE(rqbd->rqbd_buffer, svcpt->scp_service->srv_buf_size);
OBD_FREE_PTR(rqbd);
}
* Now free all the request buffers since nothing
* references them any more...
*/
-
+ spin_lock(&svcpt->scp_lock);
while (!list_empty(&svcpt->scp_rqbd_idle)) {
rqbd = list_entry(svcpt->scp_rqbd_idle.next,
struct ptlrpc_request_buffer_desc,
rqbd_list);
+ list_del(&rqbd->rqbd_list);
+ svcpt->scp_nrqbds_total--;
+ spin_unlock(&svcpt->scp_lock);
+
ptlrpc_free_rqbd(rqbd);
+ spin_lock(&svcpt->scp_lock);
}
+ spin_unlock(&svcpt->scp_lock);
+
ptlrpc_wait_replies(svcpt);
while (!list_empty(&svcpt->scp_rep_idle)) {