From 1e24854302cca7186f77c48aa3e388f4fa1d993d Mon Sep 17 00:00:00 2001 From: deen <deen> Date: Mon, 8 Sep 2008 10:57:52 +0000 Subject: [PATCH] Combined patch for bug 16882. b=16882 i=adilger i=nathan i=he.huang --- lustre/include/lustre_net.h | 1 - lustre/ptlrpc/client.c | 5 ----- lustre/ptlrpc/pack_generic.c | 38 ++++++++++++++++++----------------- lustre/ptlrpc/ptlrpc_module.c | 1 - lustre/ptlrpc/service.c | 5 ++++- 5 files changed, 24 insertions(+), 26 deletions(-) diff --git a/lustre/include/lustre_net.h b/lustre/include/lustre_net.h index 3bf9d5461d..cf77abcd4e 100644 --- a/lustre/include/lustre_net.h +++ b/lustre/include/lustre_net.h @@ -794,7 +794,6 @@ struct ptlrpc_request *ptlrpc_prep_req_pool(struct obd_import *imp, __u32 version, int opcode, int count, __u32 *lengths, char **bufs, struct ptlrpc_request_pool *pool); -void ptlrpc_free_req(struct ptlrpc_request *request); void ptlrpc_req_finished(struct ptlrpc_request *request); void ptlrpc_req_finished_with_imp_lock(struct ptlrpc_request *request); struct ptlrpc_request *ptlrpc_request_addref(struct ptlrpc_request *req); diff --git a/lustre/ptlrpc/client.c b/lustre/ptlrpc/client.c index 62444d189c..55cad7f705 100644 --- a/lustre/ptlrpc/client.c +++ b/lustre/ptlrpc/client.c @@ -1525,11 +1525,6 @@ static void __ptlrpc_free_req(struct ptlrpc_request *request, int locked) EXIT; } -void ptlrpc_free_req(struct ptlrpc_request *request) -{ - __ptlrpc_free_req(request, 0); -} - static int __ptlrpc_req_finished(struct ptlrpc_request *request, int locked); void ptlrpc_req_finished_with_imp_lock(struct ptlrpc_request *request) { diff --git a/lustre/ptlrpc/pack_generic.c b/lustre/ptlrpc/pack_generic.c index f4dc764199..14b0e3a2d1 100644 --- a/lustre/ptlrpc/pack_generic.c +++ b/lustre/ptlrpc/pack_generic.c @@ -2683,6 +2683,9 @@ void _debug_req(struct ptlrpc_request *req, __u32 mask, int rep_fl = 0; int rep_status = 0; + /* Caller is responsible holding a reference on the request */ + LASSERT(req && atomic_read(&req->rq_refcount) > 0); + if (req->rq_reqmsg && (!lustre_msg_need_swab(req->rq_reqmsg) || (lustre_req_need_swab(req) && @@ -2700,24 +2703,23 @@ void _debug_req(struct ptlrpc_request *req, __u32 mask, } va_start(args, fmt); - libcfs_debug_vmsg2(data->msg_cdls, data->msg_subsys, mask, data->msg_file, - data->msg_fn, data->msg_line, fmt, args, - " req@%p x"LPD64"/t"LPD64" o%d->%s@%s:%d/%d " - "lens %d/%d e %d to %d dl %ld ref %d " - "fl "REQ_FLAGS_FMT"/%x/%x rc %d/%d\n", - req, req->rq_xid, req->rq_transno, opc, - req->rq_import ? obd2cli_tgt(req->rq_import->imp_obd) : - req->rq_export ? - (char*)req->rq_export->exp_client_uuid.uuid : "<?>", - req->rq_import ? - (char *)req->rq_import->imp_connection->c_remote_uuid.uuid : - req->rq_export ? - (char *)req->rq_export->exp_connection->c_remote_uuid.uuid : "<?>", - req->rq_request_portal, req->rq_reply_portal, - req->rq_reqlen, req->rq_replen, - req->rq_early_count, req->rq_timeout, req->rq_deadline, - atomic_read(&req->rq_refcount), DEBUG_REQ_FLAGS(req), - req_fl, rep_fl, req->rq_status, rep_status); + libcfs_debug_vmsg2(data->msg_cdls, data->msg_subsys, mask, + data->msg_file, data->msg_fn, data->msg_line, fmt, args, + " req@%p x"LPD64"/t"LPD64" o%d->%s@%s:%d/%d lens %d/%d e %d " + "to %d dl %ld ref %d fl "REQ_FLAGS_FMT"/%x/%x rc %d/%d\n", + req, req->rq_xid, req->rq_transno, opc, + req->rq_import ? obd2cli_tgt(req->rq_import->imp_obd) : + req->rq_export ? + (char*)req->rq_export->exp_client_uuid.uuid : "<?>", + req->rq_import ? + (char *)req->rq_import->imp_connection->c_remote_uuid.uuid : + req->rq_export ? + (char *)req->rq_export->exp_connection->c_remote_uuid.uuid : + "<?>", req->rq_request_portal, req->rq_reply_portal, + req->rq_reqlen, req->rq_replen, + req->rq_early_count, req->rq_timeout, req->rq_deadline, + atomic_read(&req->rq_refcount), DEBUG_REQ_FLAGS(req), + req_fl, rep_fl, req->rq_status, rep_status); va_end(args); } diff --git a/lustre/ptlrpc/ptlrpc_module.c b/lustre/ptlrpc/ptlrpc_module.c index be37df9643..e0a1bf22c3 100644 --- a/lustre/ptlrpc/ptlrpc_module.c +++ b/lustre/ptlrpc/ptlrpc_module.c @@ -167,7 +167,6 @@ EXPORT_SYMBOL(ptlrpc_free_rq_pool); EXPORT_SYMBOL(ptlrpc_prep_req_pool); EXPORT_SYMBOL(ptlrpc_at_set_req_timeout); EXPORT_SYMBOL(ptlrpc_prep_req); -EXPORT_SYMBOL(ptlrpc_free_req); EXPORT_SYMBOL(ptlrpc_unregister_reply); EXPORT_SYMBOL(ptlrpc_req_finished); EXPORT_SYMBOL(ptlrpc_req_finished_with_imp_lock); diff --git a/lustre/ptlrpc/service.c b/lustre/ptlrpc/service.c index 3d66064d32..8d572b42d2 100644 --- a/lustre/ptlrpc/service.c +++ b/lustre/ptlrpc/service.c @@ -393,6 +393,10 @@ static void ptlrpc_server_req_decref(struct ptlrpc_request *req) if (!atomic_dec_and_test(&req->rq_refcount)) return; + /* DEBUG_REQ() assumes the reply state of a request with a valid + * ref will not be destroyed until that reference is dropped. */ + ptlrpc_req_drop_rs(req); + LASSERT(list_empty(&req->rq_timed_list)); if (req != &rqbd->rqbd_req) { /* NB request buffers use an embedded @@ -413,7 +417,6 @@ static void ptlrpc_server_req_decref(struct ptlrpc_request *req) static void __ptlrpc_server_free_request(struct ptlrpc_request *req) { list_del(&req->rq_list); - ptlrpc_req_drop_rs(req); ptlrpc_server_req_decref(req); } -- GitLab