From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752732AbdKHOSL (ORCPT ); Wed, 8 Nov 2017 09:18:11 -0500 Received: from mx0a-001b2d01.pphosted.com ([148.163.156.1]:41712 "EHLO mx0a-001b2d01.pphosted.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752716AbdKHOSJ (ORCPT ); Wed, 8 Nov 2017 09:18:09 -0500 From: Steffen Maier To: "James E . J . Bottomley" , "Martin K . Petersen" , Kees Cook Cc: linux-scsi@vger.kernel.org, linux-s390@vger.kernel.org, linux-kernel@vger.kernel.org, Martin Schwidefsky , Heiko Carstens , Steffen Maier Subject: [PATCH 3/3] zfcp: drop open coded assignments of timer_list.function Date: Wed, 8 Nov 2017 15:17:09 +0100 X-Mailer: git-send-email 2.13.5 In-Reply-To: <20171108141709.79074-1-maier@linux.vnet.ibm.com> References: <20171108141709.79074-1-maier@linux.vnet.ibm.com> X-TM-AS-GCONF: 00 x-cbid: 17110814-0016-0000-0000-000004FEF6F3 X-IBM-AV-DETECTION: SAVI=unused REMOTE=unused XFE=unused x-cbparentid: 17110814-0017-0000-0000-0000283A9B6A Message-Id: <20171108141709.79074-4-maier@linux.vnet.ibm.com> X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10432:,, definitions=2017-11-08_03:,, signatures=0 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 priorityscore=1501 malwarescore=0 suspectscore=0 phishscore=0 bulkscore=0 spamscore=0 clxscore=1015 lowpriorityscore=0 impostorscore=0 adultscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.0.1-1707230000 definitions=main-1711080191 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org The majority of requests is regular SCSI I/O on the hot path. Since these use a timeout owned by the block layer, zfcp does not use zfcp_fsf_req.timer. Hence, the very early unconditional and even incomplete (handler function yet unknown) timer initialization in zfcp_fsf_req_create() is not necessary. Instead defer the timer initialization to when we know zfcp needs to use its own request timeout in zfcp_fsf_start_timer() and zfcp_fsf_start_erp_timer(). At that point in time we also know the handler function. So drop open coded assignments of timer_list.function and instead use the new timer API wrapper function timer_setup(). This way, we don't have to touch zfcp again, when the cast macro TIMER_FUNC_TYPE gets removed again after the global conversion to timer_setup() is complete. Depends-on: v4.14-rc3 commit 686fef928bba ("timer: Prepare to change timer callback argument type") Signed-off-by: Steffen Maier Reviewed-by: Jens Remus --- drivers/s390/scsi/zfcp_fsf.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/drivers/s390/scsi/zfcp_fsf.c b/drivers/s390/scsi/zfcp_fsf.c index 51b81c0a0652..c8e368f0f299 100644 --- a/drivers/s390/scsi/zfcp_fsf.c +++ b/drivers/s390/scsi/zfcp_fsf.c @@ -34,7 +34,7 @@ static void zfcp_fsf_request_timeout_handler(struct timer_list *t) static void zfcp_fsf_start_timer(struct zfcp_fsf_req *fsf_req, unsigned long timeout) { - fsf_req->timer.function = (TIMER_FUNC_TYPE)zfcp_fsf_request_timeout_handler; + timer_setup(&fsf_req->timer, zfcp_fsf_request_timeout_handler, 0); fsf_req->timer.expires = jiffies + timeout; add_timer(&fsf_req->timer); } @@ -42,7 +42,7 @@ static void zfcp_fsf_start_timer(struct zfcp_fsf_req *fsf_req, static void zfcp_fsf_start_erp_timer(struct zfcp_fsf_req *fsf_req) { BUG_ON(!fsf_req->erp_action); - fsf_req->timer.function = (TIMER_FUNC_TYPE)zfcp_erp_timeout_handler; + timer_setup(&fsf_req->timer, zfcp_erp_timeout_handler, 0); fsf_req->timer.expires = jiffies + 30 * HZ; add_timer(&fsf_req->timer); } @@ -692,7 +692,6 @@ static struct zfcp_fsf_req *zfcp_fsf_req_create(struct zfcp_qdio *qdio, adapter->req_no++; INIT_LIST_HEAD(&req->list); - timer_setup(&req->timer, NULL, 0); init_completion(&req->completion); req->adapter = adapter; -- 2.13.5