From patchwork Wed Jan 25 23:36:30 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bart Van Assche X-Patchwork-Id: 9538123 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id A344B6042C for ; Wed, 25 Jan 2017 23:37:13 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 980D227FBB for ; Wed, 25 Jan 2017 23:37:13 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 8C84C27FBC; Wed, 25 Jan 2017 23:37:13 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.8 required=2.0 tests=BAYES_00,DKIM_SIGNED, RCVD_IN_DNSWL_HI,T_DKIM_INVALID autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 713C927F17 for ; Wed, 25 Jan 2017 23:37:12 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752134AbdAYXhL (ORCPT ); Wed, 25 Jan 2017 18:37:11 -0500 Received: from mail-dm3nam03on0040.outbound.protection.outlook.com ([104.47.41.40]:3443 "EHLO NAM03-DM3-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1751632AbdAYXg6 (ORCPT ); Wed, 25 Jan 2017 18:36:58 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sandiskcorp.onmicrosoft.com; s=selector1-sandisk-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=Jq40+6AIfWmo7NepKxwAhIkd02uXWQiVxz5SKh0i2QE=; b=YU3A5zrhlXq7saEZ5c8w6yTGbX0NFOPuxlBmVUYHgXnEwvS8yhS/xx0xIDzgupW+BzX0yI8EfiYySGIUwbpKg9reXcN5NLT3R676fWGzMr1wQ6sJILwoHe0on7iO5xH6K1OISAWHIvWmX63wkQkFI0vxTdJQfbTjMO9JmNEyNFA= Received: from BN6PR02CA0064.namprd02.prod.outlook.com (10.175.94.154) by SN1PR02MB1423.namprd02.prod.outlook.com (10.162.0.27) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384) id 15.1.860.13; Wed, 25 Jan 2017 23:36:56 +0000 Received: from BY2FFO11FD033.protection.gbl (2a01:111:f400:7c0c::143) by BN6PR02CA0064.outlook.office365.com (2603:10b6:404:f9::26) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384) id 15.1.860.13 via Frontend Transport; Wed, 25 Jan 2017 23:36:55 +0000 Authentication-Results: spf=pass (sender IP is 63.163.107.21) smtp.mailfrom=sandisk.com; vger.kernel.org; dkim=none (message not signed) header.d=none;vger.kernel.org; dmarc=bestguesspass action=none header.from=sandisk.com; Received-SPF: Pass (protection.outlook.com: domain of sandisk.com designates 63.163.107.21 as permitted sender) receiver=protection.outlook.com; client-ip=63.163.107.21; helo=milsmgep15.sandisk.com; Received: from milsmgep15.sandisk.com (63.163.107.21) by BY2FFO11FD033.mail.protection.outlook.com (10.1.14.218) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384) id 15.1.803.8 via Frontend Transport; Wed, 25 Jan 2017 23:36:54 +0000 Received: from MILHUBIP03.sdcorp.global.sandisk.com (Unknown_Domain [10.201.67.162]) (using TLS with cipher DHE-RSA-AES256-SHA (256/256 bits)) (Client did not present a certificate) by (Symantec Messaging Gateway) with SMTP id EA.C8.65426.6C339885; Wed, 25 Jan 2017 15:24:54 -0800 (PST) Received: from milsmgip11.sandisk.com (10.177.8.100) by MILHUBIP03.sdcorp.global.sandisk.com (10.177.9.96) with Microsoft SMTP Server id 14.3.319.2; Wed, 25 Jan 2017 15:36:49 -0800 X-AuditID: 0ac94369-b62949800001ff92-2e-588933c602df Received: from exp-402881.sdcorp.global.sandisk.com ( [10.177.9.6]) by (Symantec Messaging Gateway) with SMTP id AC.35.16817.19639885; Wed, 25 Jan 2017 15:36:49 -0800 (PST) From: Bart Van Assche To: Bart Van Assche CC: , Christoph Hellwig , "Sagi Grimberg" , Andy Grover Subject: [PATCH 18/34] target: Simplify session shutdown code Date: Wed, 25 Jan 2017 15:36:30 -0800 Message-ID: <20170125233646.2243-19-bart.vanassche@sandisk.com> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20170125233646.2243-1-bart.vanassche@sandisk.com> References: <20170125233646.2243-1-bart.vanassche@sandisk.com> X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFrrCLMWRmVeSWpSXmKPExsXCddJ5ke4x484Ig09bZC32z3rGZLFy9VEm ixttD9gsWpe+ZXJg8dh9s4HN49n0w0we7/ddZfP4vEkugCWKyyYlNSezLLVI3y6BK+PobreC Cx4Vf860MDcwHrbtYuTkkBAwkWi8Mpe1i5GLQ0hgKZPEk2krWEESQgI7GCVm/DWCKeqZvgWq aCOjxJ4nmxlBEmwCRhLf3s9kAbFFBAwkfvdeYAQpYhboYpR4s2w/E0hCWMBWYvGaJjCbRUBV YmNrA3sXIwcHr4C9xLRHhRAL5CV2tV0EW8wJFG49+5MF4gg7ifUHWpkgatpYJa7sFwSxeQUE JU7OfAJWwywgIXHwxQtmiHp1iZNL5jNNYBSahaRsFpKyBYxMqxjFcjNzinPTUwsMTfWKE/NS Mouz9ZLzczcxQsI6cwfj3SfehxgFOBiVeHgFtnRECLEmlhVX5h5ilOBgVhLhXSfXGSHEm5JY WZValB9fVJqTWnyIUZqDRUmc1+3elzAhgfTEktTs1NSC1CKYLBMHp1QD40yLhSd2qxz07ZOP m17+5qO562X7oqNzTTPq5h/7tSZA40inbflK5R+9ddtECjqblTj4liZ/e2Awce+0k96hzxaW nT1d+DjoVHn6lr1+auIdq3gE+szabrQo8Mn+VLn1KfJR7Ecbv1lbNT4eF3pVnsSf+mqPwVru dTdiPYqLDpT+6+DZb7DNR4mlOCPRUIu5qDgRADMPMANnAgAA X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFlrKJMWRmVeSWpSXmKPExsXCtZGTTXeiWWeEwcmLZhb7Zz1jsjj4s43R YuXqo0wWN9oesFm0Ln3L5MDqsftmA5vHs+mHmTze77vK5jFtzXkmj8+b5AJYo7hsUlJzMstS i/TtErgyju52K7jgUfHnTAtzA+Nh2y5GTg4JAROJnulbWLsYuTiEBNYzSrzvmMYKkmATMJL4 9n4mC4gtImAg8bv3AiOIzSzQwyhxdo8GiC0sYCuxeE0TE4jNIqAqsbG1gR3E5hWwl1iydB0j xAJ5iV1tF8FmcgLFW8/+BJspJGAnsf5AK9MERu4FjAyrGMVyM3OKc9MzCwwN9YoT81Iyi7P1 kvNzNzFCAiJyB+PTieaHGJk4OKUaGOXLKzyfXHj1Md50keedD/b5dhycIfYVzAUx35Qkj1ql z927LUA28A7/MeVNp7+Uqfy9sGfR0xQO+dMPdqaJf+A5+OtezBXLhY1HHYQUKoRuceovUPP3 vqymxMy09ts3lbJ9ko6Gvpma//YG7725ZtXzt/lN27YkXpG5/fGI2iZB13M+ed8fPFRiKc5I NNRiLipOBAB3gY/yuAEAAA== MIME-Version: 1.0 X-EOPAttributedMessage: 0 X-MS-Office365-Filtering-HT: Tenant X-Forefront-Antispam-Report: CIP:63.163.107.21; IPV:NLI; CTRY:US; EFV:NLI; SFV:NSPM; SFS:(10009020)(6009001)(7916002)(39850400002)(39410400002)(39860400002)(39450400003)(39840400002)(2980300002)(438002)(199003)(189002)(5660300001)(6200100001)(53936002)(36756003)(626004)(7049001)(97736004)(92566002)(50226002)(6666003)(47776003)(81156014)(5003940100001)(38730400001)(8936002)(81166006)(189998001)(8676002)(77096006)(50986999)(305945005)(69596002)(76176999)(575784001)(1691005)(50466002)(48376002)(86362001)(2270400002)(2906002)(1076002)(356003)(2950100002)(110136003)(33646002)(106466001)(6862003)(68736007)(6306002)(4326007)(54906002); DIR:OUT; SFP:1101; SCL:1; SRVR:SN1PR02MB1423; H:milsmgep15.sandisk.com; FPR:; SPF:Pass; PTR:InfoDomainNonexistent; A:1; MX:1; LANG:en; X-Microsoft-Exchange-Diagnostics: 1; BY2FFO11FD033; 1:TeQzdvTBnHAOhuxYw92uxQi6h79RynUlMrgaI9uAwX5bt7GJ9OCr/Ns/JG87NURxL7LWczqMyQ3BUOptNftDxn3/qXnEAsDp/4/cJlD7YESHiw4H3zKsjOGVJR0N+Zu+wVYvw6En+o5rsKzFqXQu25GJKJg3gTC3kO3Bkg7oyxbhQ1T5zkfpjW5ityrZ1cVKNadYq28McLLb+ARxOoFb1Sl+fnU+DedL0xhImpuXkJGEm3uyquSmeLnYJSprdGHGnRhk7W9vcDsp98IKtuvl4Bkji7j4oRtnR2hiaorLWeG5fkU603RiSODq2V9FkaqRLtNQrZTFDREcVWRSXnf6ae++6ICzMOZLptbnCvEzyOOE0E3aKY+Dx+/pPEYwqkZrLm7Tov4SZQsaNLFeIN8jsYunPh5L8WB/ai0IiaFG3C0+I9D7tC2T9kpZHh33zQ6rIaxLFWpXFNFoSTtxI15QfVg2V0BHTXWrfLVXX24TZT/mNsPNVgNdXeCEaQ+OnrPrxT8IcWobGeG7BmnXf1vzEQ== X-MS-Office365-Filtering-Correlation-Id: a28336b1-3f49-4f7a-c40f-08d4457b0bef X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(22001)(8251501002); SRVR:SN1PR02MB1423; X-Microsoft-Exchange-Diagnostics: 1; SN1PR02MB1423; 3:bQS1sa6Rx1jlu+fmAEbzc7dUHrhdvxOAqaACzk0DyAoZupdFMhsnbKRvaNe2hzVd7yqVjC+gcvwMe6lFg3Oh+iBFBYoUPAU+MAwBACB7PXduI+RuaBGS09s+dOXNa/4BAFTBYtjnWJO5+hFNTLTPh7aDDvczJ2/mOYp25CxXr5JFfOPoYKGo98LC/gYtAT9cwnch5k4LLnGquGkeiRyNEJABNgq/nJlwFvJc5GEALnl1Sv4v6QiyslvzwrXKM3K7xFkdh/BiYDLjbZ1mXPVGBOmng0V1o9jWmzc5GNJGDyOlL/t3bpULKmTQFS1zo64FxZaW1Fd55DNpR4+SZBq7itH7PIheCRTSeIPKIXyArrUnpONrmEYa39Z6f1xkq6XVlE9MCmgdfe1nHtlIuDJpPg==; 25:VLFEPmiZz4GzYNiRo6IB/11GykgYDxWNLloNbFrmviJ8I07zskRSD9F/qlbhv1Ui+BOSw+y0M2WN1q/28OBRA3McaFK1ttIWVfSB8PGXgRpNKBejchAB9FkFM47lH1Snv1IbtXZFfiOfM2MqQKpEv5m5GfYzdr9xGYRDcvZRpDug8ok/od16hn+VdE/Q/PZgdQ4S5iUer60cWAVd7kNIxJSuByytQ4rfam55YSilPZOUccFo9ZXfdiYdhHuJlQOQaktSw16ewnGmRGuZ/HPdtHpHac/mIqob6t7GMlDvU4tUdVepfx6khrOSW7vvhvE+zJvQiwl/GSLuW8MpTZUhOCC+BWCos+Ynk8nuYr29vTPuct0ry3rrpNnc1O+UX764KsW3VAYb90QuF6VG0u3i+KQ+cOty9Sq3haTHqtd911WGvMIVJxX5YUCnGrzjw5VYgqtjanzbPalNZsFd7rjDEw== X-Microsoft-Exchange-Diagnostics: 1; SN1PR02MB1423; 31:nvlDzrI8Lk5qvhVaGKB8XDVZlxl5twy/IBdIceXlOWwNpt5Crsj2WPe2ZwFO+rrs7jPAP8VgZgjTRWSAdQ4404d9qNdIvlsBYSKBfdgM9HfBqShXwYmVfQ2xZsjynrGQ3YgZ0M+7cOHMZh+y2IOxFYSJPFK3Ox7fgaPTWhHeQ7nFy6R+1Ll+obOtUCQqouGYc6tXqGilSV8WdwOlGJH83fD2ZUhsW5EBmS+ByxSYBRHzkzK4cj1OkKjTOkVYSlCkxCXF+BduUYXJWD6B00EBww==; 20:2vN5wBxWTRNtNYM1oWB3KMR1ZtYBdYcftBJo1mULNtomOAALKVFUVTZjHqpPRcjKIW72stuf/8qOHcj65yvPEXgS98WoiWbKViEaVpOJvZz40Q3p+y9KbcGayu9uyzFrqU9dSa0ArKG5W03oQKuBMvflCVj1kpjdsnRcfcfddNw75HsHeVCYXazHIWW6J1z0B0yt/xJnKJU2Bzyqix3ema7hl2MBH1I4ssDkFgc/tKudUdq/46zysPqnNnWrHWAHFHFZ5476W+P7Ph1+HKof4PggmCOYU8/H1KCEOeiulnokM+eq3uufFZWWabJHaQOlK+WnrS29bqsWMPhyqcD52tDZ+y4V0yLYfkMFQnumMfCdL9M1ja9xipBIOxZc8DJbKVj15+xS9cBF9WXcmx5LcZ4KwaigR/+7H5AkJVnL6KW1T2KWNH70vSqvBplgHK7TdohsSvif5oDHBZ4XFySQXw04u6J9bxw+lajVejah9cEI+j6omF/KoybpkP85ReTB X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(166708455590820)(42932892334569); X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(6040375)(601004)(2401047)(13018025)(13016025)(5005006)(8121501046)(3002001)(10201501046)(6055026)(6041248)(20161123558021)(20161123560025)(20161123555025)(20161123564025)(20161123562025)(6072148); SRVR:SN1PR02MB1423; BCL:0; PCL:0; RULEID:; SRVR:SN1PR02MB1423; X-Microsoft-Exchange-Diagnostics: 1; SN1PR02MB1423; 4:NpdZuRFGqfeJT/VrRje51F2rcuJXl2pjNNK3hHutSByKv+01UNVvsSmQlbfQRbgtRBrGX1ATqttRcjwMh+tpIlywk+o4YRgNmGc0R722YbytGul9F8IJjUIMUi2AzmJoN949c/aPMuT2zgSJnh0hKDUFGhx6QjCCrugtnou6JeC6x0WS70ECY5IAF9yOEZQFCvYcwg/mO0e2ER0bExwIsE3NcGoop+NOrOHNKm7s4l9fOxad8+vTo+/H/9bngj5BDVH0KH2lnyd+xBR7De0hD7bR/6agEK0tmCDzPJL5BtEjEiJo5wd+fAd+oQjcJPVYWdpDfSniARaknxTB6tMtpY+rGLttG1UhHnQVRYKsLV796n+XK4SPhDrpVu6BqbFN+EFJECtfEqPzRNbf4RcmoqJmOppw7mnDB+FRnOo3gRDQl/t7dLasprlv3irqUH2QkysVpkZ+GSxD2BcX4DbBo7iy0pzkQiNHAcjpnmRNfYWpOlSXlo7TO9n7Vu1UGJzkYyofcbNYjPrZtjPOm8POqNe4LPLTXet5N349s82KBCbK7e3BU6hHpt+f3L7letaDvCQhuzZWAH4yj94bGCaXRFfsZkZcOoTrS4wJ6iVLdLvCtcguS6j2T40UASeyi7ZRDpjL1I6vvMR9NzcM5SFJB21UHj6X93qnzCGk55SuIWOLO5yZo9TMdXBDkQ9JfLlHKnmyRRRiCO6xRvjkJpjeD7cZU0fxGEMrDCgJGKFNgZXi1zBvVtdOJilzWWDYxexm X-Forefront-PRVS: 01986AE76B X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; SN1PR02MB1423; 23:RPZS/p4ieH5osHVAP6YVca1maA988vTrOIEQ8f+jN?= =?us-ascii?Q?yiKtznV6Hi9msekeIZhnU52KXsY8onYXq8o4gSIrpCPhHMOLJqJ4WHzoFpT1?= =?us-ascii?Q?yxEwYYlxJagnU0E5Uhh5eaNH53Lz9fG4276Lwmj0FI0a5vtTTNuPCO405Kdf?= =?us-ascii?Q?h+hNwLflKh0vHpnR2mNaUJdGVTKfFetxZmhSD1CBggGxbhZo3uLaCWKDoEfe?= =?us-ascii?Q?Kc2LHBTN0/oLc/se4I8rMCK3tk2aG2LVxMn3xQ5TeIemPBimBljdf2C+C62V?= =?us-ascii?Q?Kr2EXgUe8ol2iVl5QeB6/D8CAOxXttPGxiDdpNkwrnpQ1G16Lsh5FE8iPXMq?= =?us-ascii?Q?zr1Xn5wmH1GYf0QNCSKbJcskMqo8VF3O+mrOqe3qgItC1/OHImj1X9xgn/oh?= =?us-ascii?Q?Hg0rokoXTInO0fRLj7fhAImDnX5xyrGMlI5bhVw9YIolugi8SRUv+o0eiBqq?= =?us-ascii?Q?82OXFiyBeIDduP0FISPX7CL88+wZaUCm9VYNpPLChQwhyPfn8XZMJHZV2LbQ?= =?us-ascii?Q?qzA1ajiPCQ2aMAlkwG2qIufo3nEMvFj8tRzPwn0c02kzLcXdWZtuCJbOVXlX?= =?us-ascii?Q?B0/0QIXAHGW6EIkc/kk1kAHYjVNTzCgBGTDnF2oQdyPKUydM1NlUEfK5cqGk?= =?us-ascii?Q?fzCciM2NHcMjHAZ61MJ2rpl5DuwOLrv599ll3bmUraw+QurGr/iuvJxrz9S7?= =?us-ascii?Q?eHFTItUfYiwcwmNbXQ928FbAwryvifyEBDsaZyyB82D+6eZKB0jYYBEtavY/?= =?us-ascii?Q?Bb6A0Ig2cJ0gT5lD5Qo/DWoRvmVYwqMHZbKDRSoSeCCh0Rn2mN5qjtGzabBg?= =?us-ascii?Q?PD6dNILIyfC6Qmkjc2ox/D8co70a/s7ei0Y1QBUXFSp5ZMNeI01+9muwjBaL?= =?us-ascii?Q?GD7fzYv5kpT0+vIMZSTQXECMI6/vSwq/5r3Jl0WH982Vhv00FxOrspCP0jug?= =?us-ascii?Q?gIs9YH1CxCbjRMPOpaiiHHN5UXtyDIYlefmdroA6ITjUCexr08/moi8Cudmm?= =?us-ascii?Q?/xtZyJFussXX0VLBMi2C+6dIIVTAbrpV+/3jiqsh6Q16ybSwq2QeeVnwd0BT?= =?us-ascii?Q?DcSf9XPsZ0PiI77o87oO9XaRS1cqCnZpMYgL3puOel8Uydu2XDoFKNYwz452?= =?us-ascii?Q?b4ytkHBc0vLNNWa+LEvSYBOaeqQ4i2Jj9i6V+22QXPdpottaaO9atUjnGOJt?= =?us-ascii?Q?STtMdcwmywPhpIHdWYWGhqOBZTOsYFX5k0f62OlBNRRLRV9/AK4kc9NH1wIn?= =?us-ascii?Q?cUYkAQS+WQsIbdl76eaiXpjnaM8rzahjikMDsBM?= X-Microsoft-Exchange-Diagnostics: 1; SN1PR02MB1423; 6:rgEiRZ/gPwoTM7p9zEe/4Kh17YRKf/9pNGrbwQfrCe9yQ8sQWwpvnUkgCS74XcpI30+ZeoNzq+eYly80vF37NzE85qMcWXSecMs+Se9KGISGvbaVfq1fISc8tQMZG8flQyZLXy5SWdygj35cHn+y7uDRpVURWO7jiqPcVVNeVgn7pQJtHFJgsXsOs+Gxn8rkvp0iSCXHpp8T9A/q/x6a9vm3cB0W6RIywQzWFUeJC29Hzxm0IF6KX9oawvuUFZxKvF0JrMh4bok62IIKHz7f4mjiI4LZa788+67UgUjx6N4FeJmEk9OGVuiE5HxkgjH+c4/KD+0HWj69Y+lsxmNYDQ/VaGTvA/OVOgRYVWvwBDff+M1oL9a/e+QGYPmZjT5pl1hjCkp0qvivZfiGpzIGoDE8sQpEVRz3dZ+EgZmWq3N3o8e5QqjgG5QhZcnNtu6TvmwZRsLHzPzCkEHgl8bg7w==; 5:EDxK9RPMGKJvwZj+JvuJcZWeUcI1uS/bqo80JYwg6d0/ro/gZDoUgkA6RwOYsiFKBs5iwz1JIBOI2vZoZDxUo1hlVOV/4bpVKp1y5KGoUQgxDijuxIeiuPa0kZyskEOrWy0aH/fWt9VIXSaB/rYJwA==; 24:8qNztqvPBqNCdDnmWj6g2pIMDZwvTuH1wd/GKLdbcMzfjnsKCegFo02f2HJBDx/lBPzAXjhOaLf0lD8Z65+OOK9wCCQ8YZ15LbgHN+WRu/E= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; SN1PR02MB1423; 7:itjHgYujHJjDDR+6CiK+kpiGN173tnF9dgsawZi0yeaRcxkFAKMu0xo4qGOsWfdbSRbL/+YZgqiCdRI5TQ0wypCF2rAePN2ZQvvq3A0+FZD+Ksj/FOhBk6DA5dDszZMr8aef0mR9Nz8xCifLE9x/0Gua106nhmJRiMKhiJpMpsqe7bwUe/BD2djkT8Vrh3Y5eYT5z64c6qSNm181rL1++RHJweEQR/AWXDCvnj4FwJIgNse4qwq9smGx9MGQXocU/Y1728Si3qpExIbJv2q0q0GS8n5m1a5iH3zCl2cTXrTSM7AX9uSUFNB9p/XmAYmehHwaxp5psumMfs58CTPalIvtovz/9ru1RkFqIj9TuGNFzPz0jRBtpaGYZ5E7ksaHiqK1prahKnmTXiW0o5hwX5eugO8SRhiYMjiYVOj0XokQ+6b8lrOziUYO8VTlVByKZ1z0ShzOxMRQM7R+SFIfHw== X-OriginatorOrg: sandisk.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 25 Jan 2017 23:36:54.9015 (UTC) X-MS-Exchange-CrossTenant-Id: fcd9ea9c-ae8c-460c-ab3c-3db42d7ac64d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=fcd9ea9c-ae8c-460c-ab3c-3db42d7ac64d; Ip=[63.163.107.21]; Helo=[milsmgep15.sandisk.com] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: SN1PR02MB1423 Sender: target-devel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: target-devel@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP Target drivers must call target_sess_cmd_list_set_waiting() and target_wait_for_sess_cmds() before freeing a session. Instead of setting a flag in each pending command from the former function and waiting in the latter function on a per-command completion, only set a per-session flag in the former function and wait on a per-session completion in the latter function. Note: this patch changes the behavior from aborting outstanding commands back to waiting for command completion. See also commit 0f4a943168f3 ("target: Fix remote-port TMR ABORT + se_cmd fabric stop"). This patch is based on the following two patches: * Bart Van Assche, target: Simplify session shutdown code, February 19, 2015 (https://github.com/bvanassche/linux/commit/8df5463d7d7619f2f1b70cfe5172eaef0aa52815). * Christoph Hellwig, target: Rework session shutdown code, December 7, 2015 (http://thread.gmane.org/gmane.linux.scsi.target.devel/10695). Signed-off-by: Bart Van Assche Cc: Christoph Hellwig Cc: Sagi Grimberg Cc: Andy Grover Reviewed-by: Hannes Reinecke --- drivers/target/target_core_tmr.c | 4 +- drivers/target/target_core_transport.c | 106 ++++++++------------------------- include/target/target_core_base.h | 4 +- 3 files changed, 29 insertions(+), 85 deletions(-) diff --git a/drivers/target/target_core_tmr.c b/drivers/target/target_core_tmr.c index bc07e059fb22..95f8e7d0cf46 100644 --- a/drivers/target/target_core_tmr.c +++ b/drivers/target/target_core_tmr.c @@ -114,7 +114,7 @@ static bool __target_check_io_state(struct se_cmd *se_cmd, spin_unlock(&se_cmd->t_state_lock); return false; } - if (sess->sess_tearing_down || se_cmd->cmd_wait_set) { + if (sess->sess_tearing_down) { pr_debug("Attempted to abort io tag: %llu already shutdown," " skipping\n", se_cmd->tag); spin_unlock(&se_cmd->t_state_lock); @@ -247,7 +247,7 @@ static void core_tmr_drain_tmr_list( spin_unlock(&sess->sess_cmd_lock); continue; } - if (sess->sess_tearing_down || cmd->cmd_wait_set) { + if (sess->sess_tearing_down) { spin_unlock(&cmd->t_state_lock); spin_unlock(&sess->sess_cmd_lock); continue; diff --git a/drivers/target/target_core_transport.c b/drivers/target/target_core_transport.c index d37c759daa89..3aede9173a88 100644 --- a/drivers/target/target_core_transport.c +++ b/drivers/target/target_core_transport.c @@ -237,8 +237,8 @@ struct se_session *transport_init_session(enum target_prot_op sup_prot_ops) INIT_LIST_HEAD(&se_sess->sess_list); INIT_LIST_HEAD(&se_sess->sess_acl_list); INIT_LIST_HEAD(&se_sess->sess_cmd_list); - INIT_LIST_HEAD(&se_sess->sess_wait_list); spin_lock_init(&se_sess->sess_cmd_lock); + init_waitqueue_head(&se_sess->cmd_list_wq); se_sess->sup_prot_ops = sup_prot_ops; return se_sess; @@ -1223,7 +1223,6 @@ void transport_init_se_cmd( INIT_LIST_HEAD(&cmd->se_cmd_list); INIT_LIST_HEAD(&cmd->state_list); init_completion(&cmd->t_transport_stop_comp); - init_completion(&cmd->cmd_wait_comp); init_completion(&cmd->finished); spin_lock_init(&cmd->t_state_lock); kref_init(&cmd->cmd_kref); @@ -2524,16 +2523,6 @@ int transport_generic_free_cmd(struct se_cmd *cmd, int wait_for_tasks) if (cmd->se_lun) transport_lun_remove_cmd(cmd); } - /* - * If the task has been internally aborted due to TMR ABORT_TASK - * or LUN_RESET, target_core_tmr.c is responsible for performing - * the remaining calls to target_put_sess_cmd(), and not the - * callers of this function. - */ - if (aborted) { - pr_debug("Detected CMD_T_ABORTED for ITT: %llu\n", cmd->tag); - wait_for_completion(&cmd->cmd_wait_comp); - } return transport_put_cmd(cmd); } EXPORT_SYMBOL(transport_generic_free_cmd); @@ -2591,25 +2580,15 @@ static void target_release_cmd_kref(struct kref *kref) struct se_cmd *se_cmd = container_of(kref, struct se_cmd, cmd_kref); struct se_session *se_sess = se_cmd->se_sess; unsigned long flags; - bool fabric_stop; complete_all(&se_cmd->finished); spin_lock_irqsave(&se_sess->sess_cmd_lock, flags); - - spin_lock(&se_cmd->t_state_lock); - fabric_stop = (se_cmd->transport_state & CMD_T_FABRIC_STOP) && - (se_cmd->transport_state & CMD_T_ABORTED); - spin_unlock(&se_cmd->t_state_lock); - - if (se_cmd->cmd_wait_set || fabric_stop) { - list_del_init(&se_cmd->se_cmd_list); - spin_unlock_irqrestore(&se_sess->sess_cmd_lock, flags); - target_free_cmd_mem(se_cmd); - complete(&se_cmd->cmd_wait_comp); - return; + if (likely(!list_empty(&se_cmd->se_cmd_list))) { + list_del(&se_cmd->se_cmd_list); + if (list_empty(&se_sess->sess_cmd_list)) + wake_up(&se_sess->cmd_list_wq); } - list_del_init(&se_cmd->se_cmd_list); spin_unlock_irqrestore(&se_sess->sess_cmd_lock, flags); target_free_cmd_mem(se_cmd); @@ -2632,77 +2611,44 @@ int target_put_sess_cmd(struct se_cmd *se_cmd) } EXPORT_SYMBOL(target_put_sess_cmd); -/* target_sess_cmd_list_set_waiting - Flag all commands in - * sess_cmd_list to complete cmd_wait_comp. Set - * sess_tearing_down so no more commands are queued. +/** + * target_sess_cmd_list_set_waiting - Prevent new commands to be queued * @se_sess: session to flag */ void target_sess_cmd_list_set_waiting(struct se_session *se_sess) { - struct se_cmd *se_cmd, *tmp_cmd; unsigned long flags; - int rc; spin_lock_irqsave(&se_sess->sess_cmd_lock, flags); - if (se_sess->sess_tearing_down) { - spin_unlock_irqrestore(&se_sess->sess_cmd_lock, flags); - return; - } se_sess->sess_tearing_down = 1; - list_splice_init(&se_sess->sess_cmd_list, &se_sess->sess_wait_list); - - list_for_each_entry_safe(se_cmd, tmp_cmd, - &se_sess->sess_wait_list, se_cmd_list) { - rc = kref_get_unless_zero(&se_cmd->cmd_kref); - if (rc) { - se_cmd->cmd_wait_set = 1; - spin_lock(&se_cmd->t_state_lock); - se_cmd->transport_state |= CMD_T_FABRIC_STOP; - spin_unlock(&se_cmd->t_state_lock); - } else - list_del_init(&se_cmd->se_cmd_list); - } - spin_unlock_irqrestore(&se_sess->sess_cmd_lock, flags); } EXPORT_SYMBOL(target_sess_cmd_list_set_waiting); -/* target_wait_for_sess_cmds - Wait for outstanding descriptors +/** + * target_wait_for_sess_cmds - Wait for outstanding commands * @se_sess: session to wait for active I/O */ void target_wait_for_sess_cmds(struct se_session *se_sess) { - struct se_cmd *se_cmd, *tmp_cmd; - unsigned long flags; - bool tas; - - list_for_each_entry_safe(se_cmd, tmp_cmd, - &se_sess->sess_wait_list, se_cmd_list) { - pr_debug("Waiting for se_cmd: %p t_state: %d, fabric state:" - " %d\n", se_cmd, se_cmd->t_state, - se_cmd->se_tfo->get_cmd_state(se_cmd)); - - spin_lock_irqsave(&se_cmd->t_state_lock, flags); - tas = (se_cmd->transport_state & CMD_T_TAS); - spin_unlock_irqrestore(&se_cmd->t_state_lock, flags); - - if (!target_put_sess_cmd(se_cmd)) { - if (tas) - target_put_sess_cmd(se_cmd); - } - - wait_for_completion(&se_cmd->cmd_wait_comp); - pr_debug("After cmd_wait_comp: se_cmd: %p t_state: %d" - " fabric state: %d\n", se_cmd, se_cmd->t_state, - se_cmd->se_tfo->get_cmd_state(se_cmd)); - - target_put_sess_cmd(se_cmd); - } - - spin_lock_irqsave(&se_sess->sess_cmd_lock, flags); - WARN_ON(!list_empty(&se_sess->sess_cmd_list)); - spin_unlock_irqrestore(&se_sess->sess_cmd_lock, flags); + struct se_cmd *cmd; + int ret; + WARN_ON_ONCE(!se_sess->sess_tearing_down); + + spin_lock_irq(&se_sess->sess_cmd_lock); + do { + ret = wait_event_interruptible_lock_irq_timeout( + se_sess->cmd_list_wq, + list_empty(&se_sess->sess_cmd_list), + se_sess->sess_cmd_lock, 180 * HZ); + list_for_each_entry(cmd, &se_sess->sess_cmd_list, se_cmd_list) + pr_debug("%s: ITT %#llx dir %d i_state %d t_state %d len %d\n", + __func__, cmd->tag, cmd->data_direction, + cmd->se_tfo->get_cmd_state(cmd), cmd->t_state, + cmd->data_length); + } while (ret <= 0); + spin_unlock_irq(&se_sess->sess_cmd_lock); } EXPORT_SYMBOL(target_wait_for_sess_cmds); diff --git a/include/target/target_core_base.h b/include/target/target_core_base.h index b837561294d8..dcd614fd5a05 100644 --- a/include/target/target_core_base.h +++ b/include/target/target_core_base.h @@ -440,7 +440,6 @@ struct se_cmd { u8 scsi_asc; u8 scsi_ascq; u16 scsi_sense_length; - unsigned cmd_wait_set:1; unsigned unknown_data_length:1; bool state_active:1; bool send_abort_response:1; @@ -473,7 +472,6 @@ struct se_cmd { struct se_session *se_sess; struct se_tmr_req *se_tmr_req; struct list_head se_cmd_list; - struct completion cmd_wait_comp; const struct target_core_fabric_ops *se_tfo; sense_reason_t (*execute_cmd)(struct se_cmd *); sense_reason_t (*transport_complete_callback)(struct se_cmd *, bool, int *); @@ -604,8 +602,8 @@ struct se_session { struct list_head sess_list; struct list_head sess_acl_list; struct list_head sess_cmd_list; - struct list_head sess_wait_list; spinlock_t sess_cmd_lock; + wait_queue_head_t cmd_list_wq; void *sess_cmd_map; struct percpu_ida sess_tag_pool; };