From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751650AbdB0TQc (ORCPT ); Mon, 27 Feb 2017 14:16:32 -0500 Received: from esa2.hgst.iphmx.com ([68.232.143.124]:10975 "EHLO esa2.hgst.iphmx.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751530AbdB0TQW (ORCPT ); Mon, 27 Feb 2017 14:16:22 -0500 X-IronPort-AV: E=Sophos;i="5.35,215,1483977600"; d="scan'208";a="93075682" Authentication-Results: spf=pass (sender IP is 74.221.232.55) smtp.mailfrom=sandisk.com; linux.vnet.ibm.com; dkim=none (message not signed) header.d=none;linux.vnet.ibm.com; dmarc=bestguesspass action=none header.from=sandisk.com; X-AuditID: ac1c2134-817ff70000005688-61-58b476a93cb1 From: Bart Van Assche To: "jejb@linux.vnet.ibm.com" , "steve.magnani@digidescorp.com" , "martin.petersen@oracle.com" CC: "linux-scsi@vger.kernel.org" , "linux-kernel@vger.kernel.org" , "steve@digidescorp.com" Subject: Re: [PATCH] sd: close hole in > 2T device rejection when !CONFIG_LBDAF Thread-Topic: [PATCH] sd: close hole in > 2T device rejection when !CONFIG_LBDAF Thread-Index: AQHSkStgK6fJ6m1ZXUaiD5hjEeDqtg== Date: Mon, 27 Feb 2017 18:57:44 +0000 Message-ID: <1488221849.2656.8.camel@sandisk.com> References: <1488208949-3811-1-git-send-email-steve@digidescorp.com> <1488211985.2656.1.camel@sandisk.com> <3a6783ec-200d-5df5-2e1e-756c7e8b7c22@digidescorp.com> In-Reply-To: <3a6783ec-200d-5df5-2e1e-756c7e8b7c22@digidescorp.com> Accept-Language: nl-NL, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [172.28.1.254] Content-Type: text/plain; charset="iso-8859-1" Content-ID: MIME-Version: 1.0 X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFtrAIsWRmVeSWpSXmKPExsWyRobxn+7Ksi0RBlv7jC1WTcyzuLxrDptF 9/UdbBbLj/9jsjixMcvix7kH7A5sHtsOrmb2eHBoM4vHx6e3WDw+b5ILYInisklJzcksSy3S t0vgyuj/8pu54LJQxeufn1kbGL/wdTFyckgImEjcO7CQsYuRi0NIYAmTxLYp76GcY4wSZ2d9 YQWpYhMwkpg9YQ8LSEJEYDujxJe+++wgDrPARkaJ7lPPgFo4OIQFAiWu/BQEaRARCJK4vb+Z BcLWk1jUcYcZxGYRUJXY1HWUDcTmFTCU2LnmEVhcSGA5o8TWFXIgYzgFnCX+nmIHMRkFZCVa XnODVDALiEvcejKfCeJoAYkle84zQ9iiEi8f/2OFsBUkPq/4xwZRrydxY+oUKNtK4tWp1YwQ trbEsoWvmSEuEJQ4OfMJywRGsVlIVsxC0j4LSfssJO2zkLQvYGRdxShWnJhcnJueWmBoqlec mJeSWZytl5yfu4kRHI+KJjsYOza6H2IU4GBU4uG1MN4SIcSaWFZcmXuIUYKDWUmEtzcdKMSb klhZlVqUH19UmpNafIhRmoNFSZx3qfbUCCGB9MSS1OzU1ILUIpgsEwenVAOjgcT83pTqvyU1 q+6eD5zD2iO2RWpP2boZVktYo6y6eu4Ufenc/yLLcOrFK++02HatWrm5pCXx5MbjD6zPahjE v/3fZLBa7fcLhfZZh7YW7LI1mJ28r/iW1Ma2LyZurGfDfk26U7/nxoM9lgKSz65fnGp+6NQq 4TmCTiySkYuZHwm3TW+62JkxT4mlOCPRUIu5qDgRAM53EjXDAgAA X-EOPAttributedMessage: 0 X-MS-Office365-Filtering-HT: Tenant X-Forefront-Antispam-Report: CIP:74.221.232.55;IPV:NLI;CTRY:US;EFV:NLI;SFV:NSPM;SFS:(10019020)(6009001)(7916002)(39410400002)(39850400002)(39860400002)(39840400002)(39450400003)(2980300002)(438002)(199003)(24454002)(377424004)(189002)(377454003)(6246003)(50466002)(38730400002)(2906002)(4326007)(23756003)(33646002)(626004)(53546006)(7736002)(305945005)(5660300001)(54906002)(81156014)(8676002)(81166006)(2950100002)(8936002)(8746002)(356003)(103116003)(68736007)(2501003)(5250100002)(3846002)(6116002)(106116001)(102836003)(50986999)(54356999)(76176999)(2900100001)(2201001)(106466001)(86362001)(92566002)(36756003)(69596002)(229853002)(189998001)(97736004)(2270400002)(47776003)(53936002)(7099028);DIR:OUT;SFP:1102;SCL:1;SRVR:CO2PR04MB827;H:sacsmgep15.sandisk.com;FPR:;SPF:Pass;PTR:InfoDomainNonexistent;A:1;MX:1;LANG:en; X-Microsoft-Exchange-Diagnostics: 1;BN3NAM04FT033;1:buCNki+FWm77DTwbVLFadHOjI70ESD2RuzHPWBCK4uFkzRJaHGsI1s7wmMlnT2DVP1swP2sGO7qQAQhRxdd7hUs/SGP03apcI55awikw99t8T/QS04hDKsoGfPLzW+TrnzbS3leRN7CYM/xbEARrKNxVUteuFjC6wQ/O94QklASvdTDvp928Glo6mPf6g6BOvCBZPmOKVjorC7UOGMSUwcNYtxPrC4TLcQ9jJJwtPe4iTtOEqLxsD3sEYanUSr8Qt7eDXZB1boyB1Kk0fMxnCKh1HTEiefCZwpbJlQ9b9L9cvM9BpJ4YxmfB52TycG68kqL1qiN2xlYyA09ZhlUkhLAq5ZzziP9KL322bDXpblHhyl2LYS/t01PO1GcPU7mkczsnFg8K34hF/g/fxYKfMOx/Oo5O10ce4aRuVhLTxxci7J9Mpw3dJkfbLTNYKmnmmzEat8L5pwfidKMKl0OwrNxYwwRpr4vcdzXArLU+p15TaIleST5n98R26xKQNm+ugLycJWHPcRLJHlHvfDsP6g== X-MS-Office365-Filtering-Correlation-Id: 8ca6cbd2-d7ae-4843-cdf0-08d45f4284d3 X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(22001)(8251501002);SRVR:CO2PR04MB827; X-Microsoft-Exchange-Diagnostics: 1;CO2PR04MB827;3:NuSkGACvLZqX3CFtsvQVWG9cmM06Ll4psnjoqJwdkjJzrWdWSWjGDeNtyG+vaHoBoAcpL+B6v+0f+OPr3cjzrJOyoicBxOk2jIaRNvxqE2brhhGs+YGUBdyG4jOX7uIUYYld3QnaDhtfh/T9n6MMOLYiPa3dWl/Zzmdvnxt6LILpOnuTuHa2Hk2S4gwIV1SIGzduVlJymChdjX7IRBltz14AgtXNb2PwiiUSH8nOw0h2XJ3nDEzhIFXTYxw+IvSCa31FxH+RZixDeAV6xFOty42UMQ1Swq+gnOy7BV9j/f4MxOTRBQ82mY0dwSYu743cQJudTuj7Xry/OIGXk5fCEczLShtIVXQjyiiNNCihSAQPKfT25BTET5q7AAMW8OcFvAUU7leKeSZjn+I1N8dYJw==;25:w6Nzo1Vjkopy9tYRqhsNHt0UGiQKYX04ACdOL+UAJoRGbV/WtUatCf3XLKbAqgrNYmcvOhKM1z/UFMv75uLE9vVGaIbiOzvqnDj/6bf1exsiE+rKrIfW+wz0EuydH9q6Z/gSqfcAvKr6ZmVSFDQShnpKt31w41VtQ/XSVAgEgEmGPQSNRHDzrvFsiUa04zKY/uXD9rlY4UwPUahG7MLF+9nKC4GrtajvLrnmJ8Bz7rY3yMJSccMAQ/fa1aojwWs9GFhv505Wk8sXUvCJ/AAiPJ+vWi9CxsMNWcW0rqYesvnkvqp+oTjeRrn2EVHYEL+semqVgwLU0axAJ7aMohF122YEbHGhoRO1w3T4wDSQ3dptGG0tEyXes3Ih7HtKTbz40/kN3eXsOIU3X3TKZ+gsi4xrfYMZVhUaC2F0n6SDXyCNvpbQr4BA/P7YiwNPLqTlvkNqeqDc9Fpgu1h040TM1Q== X-Microsoft-Exchange-Diagnostics: 1;CO2PR04MB827;31:Lv45Hr6E/hOAtknod/3sJ20X2YMwVCbe09EpgP7HsATWMs6tdjESqaWx4l3CDn7JEk7m54JOSEoKlDR/fcaq3fTlH1SaH2iM8nfv/hjt1rzqWwpdWVO2S8kUKyZtx8Cfmg0bkrKuQIHJ0L4hh+TgbM93WAVohE0bgkwQtfrs4tpyAXlDgboLToDSStisIapJZXnvGdcdktgP/ACVnm/B1Klk+BYIzG+m1ErUEzZM3kKwZ+xWOpktioZJ1IxDunCNd9e04OTqyuw7JQpQU89qsQ==;20:8nZn72+A/oe879teEaYuttuh+YYfBmomqA85w8rpwVJIKWOntyRzpy6o9OSgvKKTLq8AqzqBmU+yhWsF0CVyzL0pnbDRHkjCNfyzHWQbw7EBx4GcCeEmoMRAJLXT1Xlif9OehGGq+cP+iUFQCeJaumGbi6kpShGiWYU6lYUMpLwntoZGesjDyRFuIDSRDMKkcEJu33kMUuR5qXbFlxcCGpokkp2MOREK6dAzKD50qO7y0cy4tCKkW1O9Mp03pff/Vy1jveXd9Hh2xzQCWhLCl8vSoUA4bSuBksMSbVajc3tliSl5Z5o3BguLzySXXTeEmMTn0QMcXI+G6nQfZoJ/e9f9kvzc54ewoYN392KE4afCpuY/Pfy764Jus5a/qXwubutlKukdSeu1AAOnWeBVMPnYCPLE9dSTdH/3JPzykshkyOpKFplQ5W9hCrcWIejT8m5sqWuvoPA1PJ6ttT6ehuu0nwr/dDRb+ZnDjWXjI0UqbAbvxUYyjcR73jOl9Zck X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(6040375)(601004)(2401047)(13017025)(13015025)(13018025)(13023025)(13024025)(8121501046)(5005006)(3002001)(10201501046)(6055026)(6041248)(20161123558025)(20161123555025)(20161123560025)(20161123562025)(20161123564025)(6072148);SRVR:CO2PR04MB827;BCL:0;PCL:0;RULEID:;SRVR:CO2PR04MB827; X-Microsoft-Exchange-Diagnostics: 1;CO2PR04MB827;4:OJOGGJv/yv9xyPyQtwYMdkVET79j37Gqt8TXTy6JWUJb34MlCQfNixlgzY9SJkYIOQS3jb6o2yBfQziREp7yGLSuleXXRWblDJgHv1H1bq9yY038ZikTqBweTdzW0zMLY8+DifEBZvKS0iMDMlWqWg0OJy3UJdEfnWAiJ8mzeKX8tE3prYnkSDR9YSIK1BSznuIxLFs23R+M5JteO4KMS90q7t3tdWz2WVAVw2qc5uV21ulCKW3F0aWqwlsthqHZwYmQFPvX1N7j1Rb4Gy8tMbpK8DeVczP87WUIVBSW4hC9nYONxBxrrNSMlwsNjkrI80qah+GZQRBh/oi0lTDdVUwIwQAeImk5+Sb52msgtMGbZhFSGb4CtCws1VJMg1gmqdBzgHzdper/Z443I/OnnhD7otPFKF5X5/YlepjkGuhqD9nOQeIorKo+Z9OCncGzJ/jVbwKWIyMN8zkQjKfZvpKk0tx2fO7bPLVqDA6VPrmMOcKxyoEynixArVOb5Qej93boMcz52kYkEsICEvEmccrZctSUtaYc8fU957GiGbOsgpETFLRyKEaFnIcE+Z99L8h7ADd+RkXnZ6Rcig8GB98QmaQVf9RnaK39K9kjk9Anugzhp/mZB3ylZv2zoT7vr8FFdaC8PIzBoojg1BUGfuWFogXeZZa6DAw095/1EMbSiO8imVf0dwkqi2bx+5fiDBtsK/Wfr2s3sGx2mv9IFA== X-Forefront-PRVS: 02318D10FB X-Microsoft-Exchange-Diagnostics: =?iso-8859-1?Q?1;CO2PR04MB827;23:rLruNRNFoOSmZResroTJl+rcIpITLimqdRto9P53?= =?iso-8859-1?Q?DDDHhA9lUbBt+KSGrLYLUc+umI86E93sLspf9J0Y20rKoGew2aklRmYUy5?= =?iso-8859-1?Q?E3ueHYeWzjZzBDDC0bmRhXRQEECIXP7XFmcmqxG1UNgM5XmGVhMOb7BUD6?= =?iso-8859-1?Q?slyN0k9C5LurltkNRmragqJ7TqDrHy5x4CQ6hEKjc7qUXcbNBFf1Jo3N96?= =?iso-8859-1?Q?hCu1tEfLfChf3XFJ3FS/jM067exzHPGBm8HbG0y7/aCmdCzdp9FvPU+BBW?= =?iso-8859-1?Q?t21i9OuG4tbf62VnLWiDVRevRmoTNSOulUU7u4OuSm9HcWfrFI4SBvdgMO?= =?iso-8859-1?Q?CgCvn8nf2bJ891tU63o/2DiyMwoWLAwu6gQKE/z6MIZBtiupe4tIs6hL5/?= =?iso-8859-1?Q?XeS4B2Suo40gXCPYZ6NjzFC9N/7Qt9DKQD7MPXLvgy0d8IIOMdAfdk/WA2?= =?iso-8859-1?Q?hMrdjjoFzibCHSopvFWwhQTHfoz03LNrFxK9oiPjPKjlkWWDeJYPLLqehu?= =?iso-8859-1?Q?YarpOeqmQ075nTo12wJa1q9tGDsTfw/FsEQ9xTUt2FKvpFplk+nJc6vbGk?= =?iso-8859-1?Q?N9kOtM1HDxB7yx7hsdPAAFM6pQBXC4m04i4Z11B4+KdwG3vS264IrR0i/b?= =?iso-8859-1?Q?ERiitcnEQvzIEzk3G9wvmqETM+szTxLeNdvxOnxTmilhPozjj079ijcPNW?= =?iso-8859-1?Q?3BMx4iA6WlNsEKFD3O49Ep5dkgvafRShWeye5H76YURb+atFLqURb9Zxdx?= =?iso-8859-1?Q?4fJ7PHoQJAcFg39ddKbolufar7WgzVBO2gMRt8KbuAG411VDqIEPmlmxmH?= =?iso-8859-1?Q?FxHC3cNKJDK7wML7R5RZQjrbJxiyCIsz+H06uP+Vvii6BUno8HH2I0A4EG?= =?iso-8859-1?Q?KP73/bVMSFTSDh4nrjDIgy/QETnpxMRBMuk3kFLqSlKRIFDj1FoKOGuUTF?= =?iso-8859-1?Q?tpF7dlUPkmoZGYge4qnO6G4+yZeHIBPQwZPtR+E0edimd/9Hl1mlRalgWj?= =?iso-8859-1?Q?u/xSYHg89wIlbTwKdwJEJGbDVo83y3rJm0UNsl59bwbknYedNBWw/ThrVv?= =?iso-8859-1?Q?3wFsZnycD+0HZSIpkDOoKL3t4PACrGDNER/4E8AUGZpBnr7m4rybEZW54V?= =?iso-8859-1?Q?k2MRnHW6uwFQmm1YMx9LRdCnOTP7SJD8W975h8+YDE8SECyjAmC0Ble1XW?= =?iso-8859-1?Q?FRQapOrORAAKvIcIywZao9z/Fkni2IV6RlLmvctmLmr7nxk6M5f45SH5Hb?= =?iso-8859-1?Q?+khb14YvL997CyfjDLKgeKk1XiQkRebR4VIJiU6Y0MgsY+ma06SdWUVub4?= =?iso-8859-1?Q?AFK1mIeFHjyp6qp4aOrDkfap3nRSiJdpiATGesCfJWvI7z9Ku8Z2zAMCaE?= =?iso-8859-1?Q?dgtq+J4akqD+tCLK4Qc6vhdFe+JgNsJWUo+wt8QdkkQ9a8kQ6+E7uSSZby?= =?iso-8859-1?Q?nyhezjWKZcCUt3erI1Bav0YljtZ3uFXQX/?= X-Microsoft-Exchange-Diagnostics: 1;CO2PR04MB827;6:FlsDwl6NjwVTnKEws3VA2YtyPcxRvBmuQ1SScoDVzdsoL2478/FhKCuELIh6vJpujRVEBqqisuC2DlDRYQA1/B5CV54omZGnKyWI6DIpY6zfHNjAjywNPTKlygS+RyIIIeWvG3amoWVGtavPH/IuOd87OAtaXHhM5NUvHNy50Tu09Dg2w+pJbGJig078MHDej3NxwzPlw5B713GFsm+U/Zh1AUtaN/HpqGXWFQ8mAf+mKnsx43QmyPQ7GysOhZTvksDiRyfq/Dr8HgrjPYRP53/tWjPgixfk3dB0OdnRET8Bvs4T4BX/n/zVxbk+k2I75QLISh81rUBnkg6O92daMbDg994YljPBMKkgOLyPBZCHE1fRTW5/VqXlQXaZe19eFc8wNVnZ+zBD06272wzaS+4bDJ7ATm2LX8LDWVWIIHsSrRaPyK2gqvHueJIc2qhX;5:mwt3hIl9S76Ccn5zqPG9+ZeCgg6hpHN/EVPz5GD5MC2mkl7N3Sv8UfmF3Yk1sH40UiQsSmXKnkxCGEoEC8JvaSdYtxXQmmNgW1rEr4Ia8j+3Is3xf0WGKBxDyfYHzVcz24YV+qgs8DJzxZEQbrjIOQ==;24:mmaZxVgVhHkXYgqfDI50GpE5NUBfDJuYQW0syr+v13bKpyXPbZZvO3ghbFMlgtUxDH3Xj+7Ak7ywxcAJxuyDrPjsob20a45O8yJwhn2B244= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1;CO2PR04MB827;7:qaBENNhlhFARWXgpCHhLIXmy7HUnjb5bGVy5hEAcLA5lC0YdYe+G13i/qmrIOe8rtJd7dmWdzQ+XUnhQbMkh/exPtGFB1lO8FTeYYD5pD8r0UazX9wr+OYys9jCfrNrXWqp373QxMFcO76GG1hiGWKtrV670/MF2mVmyswEBADauQBoaZXRDweFV+5qxVqDfLHAv6dAqJAWZZdewxuBIm/ge5Pr8tIn27a29QfoeSmUlsIyhk2r63SxETEMbGwrD6qz62eE7innLN5vTugxIqzsFlYAj5ZdLLUWFTJ5Z4GRujpBQjL3Uv4ikZlcnO4T8mHRuHTP4twS0pOYp6do+EQ==;20:f57lTflhlIQbnyDQQzGMU4UVaSUzUhNQQNeoQ7wu+2bCc4ce1G79XA5fm6NcJMJbDCKdP35D+w8xt5SzogkrOeYSZhRBpjifli9mlAJ5pujNu2cpRG+uKWoMkNvP/HU0jWmdzfMWTcQhP23ZokezKFxnG82ZqnxU5mL6TLUqAhRTpp6B/SP0JCblIBI+ki5jDrAZPGHFZLMzHPPdXiyN6B/4mnkdf+HRWzKP//ej93birWYPTC3E6LiP3P1PhGgb X-OriginatorOrg: sandisk.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 27 Feb 2017 18:57:46.0921 (UTC) X-MS-Exchange-CrossTenant-Id: b61c8803-16f3-4c35-9b17-6f65f441df86 X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=b61c8803-16f3-4c35-9b17-6f65f441df86;Ip=[74.221.232.55];Helo=[sacsmgep15.sandisk.com] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: CO2PR04MB827 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: 8bit X-MIME-Autoconverted: from quoted-printable to 8bit by mail.home.local id v1RJGk1V013681 On Mon, 2017-02-27 at 11:13 -0600, Steve Magnani wrote: > On 02/27/2017 10:13 AM, Bart Van Assche wrote: > > Why are the two checks slightly different? Could the same code be used for > > both checks? > > The checks are different because with READ CAPACITY(16) a _really_ huge > device could report a max LBA so large that left-shifting it causes bits > to drop off the end. That's not an issue with READ CAPACITY(10) because > at most the 32-bit LBA reported by the device will become a 35-bit value > (since the max supported block size is 4096 == (512 << 3)). Sorry but I still don't understand why the two checks are different. How about the (untested) patch below? The approach below avoids that the check is duplicated and - at least in my opinion - results in code that is easier to read. Thanks, Bart. diff --git a/drivers/scsi/sd.c b/drivers/scsi/sd.c index cb6e68dd6df0..3533d1e46bde 100644 --- a/drivers/scsi/sd.c +++ b/drivers/scsi/sd.c @@ -2082,6 +2082,16 @@ static void read_capacity_error(struct scsi_disk *sdkp, struct scsi_device *sdp, sdkp->capacity = 0; /* unknown mapped to zero - as usual */ } +/* + * Check whether or not logical_to_sectors(sdp, lba) will overflow. + */ +static bool lba_too_large(u64 lba, u32 logical_block_size) +{ + int shift = sizeof(sector_t) * 8 + 9 - ilog2(logical_block_size); + + return shift >= 0 && shift < 64 && lba >= (1ULL << shift); +} + #define RC16_LEN 32 #if RC16_LEN > SD_BUF_SIZE #error RC16_LEN must not be more than SD_BUF_SIZE @@ -2154,7 +2164,7 @@ static int read_capacity_16(struct scsi_disk *sdkp, struct scsi_device *sdp, return -ENODEV; } - if ((sizeof(sdkp->capacity) == 4) && (lba >= 0xffffffffULL)) { + if (lba_too_large(lba + 1, sector_size)) { sd_printk(KERN_ERR, sdkp, "Too big for this kernel. Use a " "kernel compiled with support for large block " "devices.\n"); @@ -2243,7 +2253,7 @@ static int read_capacity_10(struct scsi_disk *sdkp, struct scsi_device *sdp, return sector_size; } - if ((sizeof(sdkp->capacity) == 4) && (lba == 0xffffffff)) { + if (lba_too_large(lba + 1ULL, sector_size)) { sd_printk(KERN_ERR, sdkp, "Too big for this kernel. Use a " "kernel compiled with support for large block " "devices.\n"); -- 2.11.0