From: wangdi Date: Mon, 30 Mar 2009 20:43:20 +0000 (+0000) Subject: Branch: b1_6 X-Git-Tag: GIT_EPOCH_B1_6~2^5~99 X-Git-Url: https://git.whamcloud.com/?a=commitdiff_plain;h=d3ba8ef1d7c13a86b50d7ce717092c421cf1fa2d;p=fs%2Flustre-release.git Branch: b1_6 b=18794 remove event once there are no obd registered under that. i=Ericm,Huanghua --- diff --git a/lustre/include/lustre_net.h b/lustre/include/lustre_net.h index c19665d..7cd46ba 100644 --- a/lustre/include/lustre_net.h +++ b/lustre/include/lustre_net.h @@ -1120,7 +1120,8 @@ int ptlrpc_pinger_del_import(struct obd_import *imp); int ptlrpc_add_timeout_client(int time, enum timeout_event event, timeout_cb_t cb, void *data, struct list_head *obd_list); -int ptlrpc_del_timeout_client(struct list_head *obd_list); +int ptlrpc_del_timeout_client(struct list_head *obd_list, + enum timeout_event event); struct ptlrpc_request * ptlrpc_prep_ping(struct obd_import *imp); int ptlrpc_obd_ping(struct obd_device *obd); #ifdef __KERNEL__ diff --git a/lustre/osc/osc_request.c b/lustre/osc/osc_request.c index 4b9fff2..2c49532 100644 --- a/lustre/osc/osc_request.c +++ b/lustre/osc/osc_request.c @@ -937,7 +937,8 @@ static int osc_add_shrink_grant(struct client_obd *client) static int osc_del_shrink_grant(struct client_obd *client) { - return ptlrpc_del_timeout_client(&client->cl_grant_shrink_list); + return ptlrpc_del_timeout_client(&client->cl_grant_shrink_list, + TIMEOUT_GRANT); } static void osc_init_grant(struct client_obd *cli, struct obd_connect_data *ocd) diff --git a/lustre/ptlrpc/pinger.c b/lustre/ptlrpc/pinger.c index d0412ae..cca376e 100644 --- a/lustre/ptlrpc/pinger.c +++ b/lustre/ptlrpc/pinger.c @@ -457,10 +457,30 @@ int ptlrpc_add_timeout_client(int time, enum timeout_event event, return 0; } -int ptlrpc_del_timeout_client(struct list_head *obd_list) +int ptlrpc_del_timeout_client(struct list_head *obd_list, + enum timeout_event event) { + struct timeout_item *ti = NULL, *item; + + if (list_empty(obd_list)) + return 0; mutex_down(&pinger_sem); list_del_init(obd_list); + /** + * If there are no obd attached to the timeout event + * list, remove this timeout event from the pinger + */ + list_for_each_entry(item, &timeout_list, ti_chain) { + if (item->ti_event == event) { + ti = item; + break; + } + } + LASSERTF(ti != NULL, "ti is NULL ! \n"); + if (list_empty(&ti->ti_obd_list)) { + list_del(&ti->ti_chain); + OBD_FREE_PTR(ti); + } mutex_up(&pinger_sem); return 0; } @@ -822,7 +842,8 @@ int ptlrpc_add_timeout_client(int time, enum timeout_event event, return 0; } -int ptlrpc_del_timeout_client(struct list_head *obd_list) +int ptlrpc_del_timeout_client(struct list_head *obd_list, + enum timeout_event event) { return 0; }