ZFCP_ERP_NOMEM     = 5,
 };
 
+static void zfcp_erp_memwait_handler(struct timer_list *t);
+
 static void zfcp_erp_adapter_block(struct zfcp_adapter *adapter, int mask)
 {
        zfcp_erp_clear_adapter_status(adapter,
        erp_action->fsf_req_id = 0;
        erp_action->action = need;
        erp_action->status = act_status;
+       timer_setup(&erp_action->timer, zfcp_erp_memwait_handler, 0);
 
        return erp_action;
 }
  * zfcp_erp_timeout_handler - Trigger ERP action from timed out ERP request
  * @data: ERP action (from timer data)
  */
-void zfcp_erp_timeout_handler(unsigned long data)
+void zfcp_erp_timeout_handler(struct timer_list *t)
 {
-       struct zfcp_erp_action *act = (struct zfcp_erp_action *) data;
+       struct zfcp_fsf_req *fsf_req = from_timer(fsf_req, t, timer);
+       struct zfcp_erp_action *act = fsf_req->erp_action;
        zfcp_erp_notify(act, ZFCP_STATUS_ERP_TIMEDOUT);
 }
 
-static void zfcp_erp_memwait_handler(unsigned long data)
+static void zfcp_erp_memwait_handler(struct timer_list *t)
 {
-       zfcp_erp_notify((struct zfcp_erp_action *)data, 0);
+       struct zfcp_erp_action *act = from_timer(act, t, timer);
+
+       zfcp_erp_notify(act, 0);
 }
 
 static void zfcp_erp_strategy_memwait(struct zfcp_erp_action *erp_action)
 {
-       setup_timer(&erp_action->timer, zfcp_erp_memwait_handler,
-                   (unsigned long) erp_action);
        erp_action->timer.expires = jiffies + HZ;
        add_timer(&erp_action->timer);
 }
 
 extern void zfcp_erp_thread_kill(struct zfcp_adapter *);
 extern void zfcp_erp_wait(struct zfcp_adapter *);
 extern void zfcp_erp_notify(struct zfcp_erp_action *, unsigned long);
-extern void zfcp_erp_timeout_handler(unsigned long);
+extern void zfcp_erp_timeout_handler(struct timer_list *);
 
 /* zfcp_fc.c */
 extern struct kmem_cache *zfcp_fc_req_cache;
 
 
 struct kmem_cache *zfcp_fsf_qtcb_cache;
 
-static void zfcp_fsf_request_timeout_handler(unsigned long data)
+static void zfcp_fsf_request_timeout_handler(struct timer_list *t)
 {
-       struct zfcp_adapter *adapter = (struct zfcp_adapter *) data;
+       struct zfcp_fsf_req *fsf_req = from_timer(fsf_req, t, timer);
+       struct zfcp_adapter *adapter = fsf_req->adapter;
        zfcp_qdio_siosl(adapter);
        zfcp_erp_adapter_reopen(adapter, ZFCP_STATUS_COMMON_ERP_FAILED,
                                "fsrth_1");
 static void zfcp_fsf_start_timer(struct zfcp_fsf_req *fsf_req,
                                 unsigned long timeout)
 {
-       fsf_req->timer.function = zfcp_fsf_request_timeout_handler;
-       fsf_req->timer.data = (unsigned long) fsf_req->adapter;
+       fsf_req->timer.function = (TIMER_FUNC_TYPE)zfcp_fsf_request_timeout_handler;
        fsf_req->timer.expires = jiffies + timeout;
        add_timer(&fsf_req->timer);
 }
 static void zfcp_fsf_start_erp_timer(struct zfcp_fsf_req *fsf_req)
 {
        BUG_ON(!fsf_req->erp_action);
-       fsf_req->timer.function = zfcp_erp_timeout_handler;
-       fsf_req->timer.data = (unsigned long) fsf_req->erp_action;
+       fsf_req->timer.function = (TIMER_FUNC_TYPE)zfcp_erp_timeout_handler;
        fsf_req->timer.expires = jiffies + 30 * HZ;
        add_timer(&fsf_req->timer);
 }
                adapter->req_no++;
 
        INIT_LIST_HEAD(&req->list);
-       init_timer(&req->timer);
+       timer_setup(&req->timer, NULL, 0);
        init_completion(&req->completion);
 
        req->adapter = adapter;