Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754805AbcLOAcA (ORCPT ); Wed, 14 Dec 2016 19:32:00 -0500 Received: from esa2.hgst.iphmx.com ([68.232.143.124]:33875 "EHLO esa2.hgst.iphmx.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753951AbcLOAb5 (ORCPT ); Wed, 14 Dec 2016 19:31:57 -0500 X-IronPort-AV: E=Sophos;i="5.33,349,1477929600"; d="scan'208";a="43878431" Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=Damien.LeMoal@wdc.com; Subject: Re: [RFC] block: check partition alignment To: Stefan Haberland , axboe@kernel.dk, linux-block@vger.kernel.org, linux-kernel@vger.kernel.org References: <20161214164706.45543-1-sth@linux.vnet.ibm.com> Cc: hoeppner@linux.vnet.ibm.com, sebott@linux.vnet.ibm.com From: Damien Le Moal Organization: Western Digital Message-ID: <40f04360-5137-8504-fd2c-0861c7856a7a@wdc.com> Date: Thu, 15 Dec 2016 09:29:15 +0900 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.11; rv:45.0) Gecko/20100101 Thunderbird/45.5.1 MIME-Version: 1.0 In-Reply-To: <20161214164706.45543-1-sth@linux.vnet.ibm.com> Content-Type: text/plain; charset=windows-1252 Content-Transfer-Encoding: 7bit X-Originating-IP: [199.255.47.8] X-ClientProxiedBy: BLUPR0101CA0011.prod.exchangelabs.com (10.163.116.149) To BL2PR04MB1969.namprd04.prod.outlook.com (10.167.97.141) X-MS-Office365-Filtering-Correlation-Id: ed3e6f76-a298-4246-d1cc-08d42481c50b X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(22001);SRVR:BL2PR04MB1969; X-Microsoft-Exchange-Diagnostics: 1;BL2PR04MB1969;3:CW+7NxOI/+Z9sdYV78kYM6js1JXJhYtCqEnAz50TE/X0Dk/2aAdm7zExhiFRa4l+qGxQAtmroFi2GL1kZntSKhZfWbvltQQWDTMy+sKUal3SXiki1H63z/SEfHd8Wvo+y+kYjdAnMDIdYWcX36SUrJ4Hq3YrpTy1sauQiSlVX6XvMQB58m8bnKtn4dvBb0CzrnDT3oVghAMMBy9XL6q9pfEjcORLl2dxeVj4sag82efOJod+aISBW2quNMQvovhq7zREHbR0buN/AzfQaZfXiA==;25:lngio080IfHPUae3F1L2akRYjE83AoJLFS8zomgWzQnPBSZK8ePlv16S7iMTfb9zFuWjt1M6oF5YnDszSyz2AlqWTivvInfmQkUfVBSu+1zpHPypE0Cs1Ih1EsTm8k6GH5CNoW0nrw2OZKJtDbcwe/bXBbnJqdYB1XHE/lFfFxH74gN4D+krWAUuNwoaasuwvftUCOeTmTB3q5zzwC6RHeSFoUs5CXLwz0ruZzTJIiBsyGfQKTHIyyNRvLGAkdBIp/pVd4tCXyVlay75q8dW2wgvAyls9F0CjAY/5HCI/RUoZnHz72Ugjxl+xnTt7Vd/NICqPmUaqQt1kitHR2DoESX/XpMrtx0s0eEtGmYBaBo7k9152PyQoYDmtwHsBz7549XMgrAdvMcAfMkFb44S9eiqbxCSG32ZrQli10L44sHXWC2J017FE9MoJJ3HmDVa28ZFo+WKe+OlDTSh+ZlyZA== X-Microsoft-Exchange-Diagnostics: 1;BL2PR04MB1969;31:JN2h3CQhZQd5oh0PlygKC57yyE08nbc2eLJlIY5rbeG41wC+oqpIMypr2UmLKbvP9RZIDupdzb+eOTk4YhxH/wd90f/iqAi6u//45zJjKN/2iqzb3q8I+UmY5ZD6Nlg7/ZJkg7PVxb1OtYYiX42gp2S2Ig+UByEh9eu37DZT2EBVnN+QnPgq/sROigmiN4He/WT67aO62/5EKRW0dL1yxAtnp3IKOyEglcX512e+0EzAoyPckK5gkktO7L65T4onXpI1RN3dqlBuIVAl75Xlbw==;20:+zGsTZsKJ5kSKUlHDZ4YTdRMKYOiY3LTNdLjIzVXBnv4wZwARluCgHmIU2t7kT/ZuObg4/IOnkWGbu8KbcbgnC3OeOTYkrA3jJ6P6DNLvO59HT/GcgDKU4AxTkG6D7fqdNT/VmKbSxIwOxnlCfAln2gWnAVO73GorEuaQH3h9IO1BjGgy1HDI7AFZtPfhnmwc9Wekoc+9Cd0oId+M6YYj3xR1/ywY57eLc36WF+qzyzq6ODBzU+qTyEWPAyZMvb/3hsfcNcS64EsvLbnTsD7LW65Xx4uCbPGVN277RT7H88qgRfUvQk5WtzPWvna6qF5fy3Z6C5GQgPp6GEqWf3XjnT9CwE7goem4s9nhAnUpbPyivUkaniSxW4oMWQyq31+CouDRYXjUJz5kQ+CTxO+rX2RhQ59Op5d+r1+Bjh71lVlw3au9ivTkZrKzM/cTWAZKBaYcBlG/o03SZHESg7jngDd3AuPTMkKSPxYgRDOyu1wevh1xjV3QKjVWo8j7hSd X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(79135771888625)(67367480688388)(56741022784758)(104084551191319); X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(6040375)(601004)(2401047)(8121501046)(5005006)(10201501046)(3002001)(6055026)(6041248)(20161123558021)(20161123560025)(20161123555025)(20161123562025)(20161123564025)(6072148);SRVR:BL2PR04MB1969;BCL:0;PCL:0;RULEID:;SRVR:BL2PR04MB1969; X-Microsoft-Exchange-Diagnostics: 1;BL2PR04MB1969;4:DySZiyEzijVhlQ+d5ilXWTcpdtyCbkOFWN7RApdobZRQ+mhtDx8avByMGqovWyqQ8L6pB6fcV0mo6ih9Vk4/wQBqpYU/rKUpIdDgMznzKNGl8rOrymTvW6GARjQuZibB0LiG2TikZmVpxtErNWKdG5pD3lQncERsS42UAaaJBwjWIM47WrpK6hfJ2GmhcNm2Ijuig17LYt6stvzhtQ0yNb3+isr7VskFiekBiubZODLsda2WmFk/PEWe3f3IGuAiLcbUdCa9UftJJUDt2Qybkz8UqYJ33K6uSPiTDTnRnAcPOyD0FPWkv3xVXmZScUxyQylnU/JSl3ylBLiyzLyfIdE95XQRLYVc5cTVwx1gHcwP00HSChSmr43lCdPDyu6C986B6GU49vJl05qfvOXAFQZeaPreKitvA4wVQV6G5R+QTqm8bokK+Wv7GBedy7Tcl3YL2ZiuMvZT2j35te1zdppYxGaspJM9eWfkGFuObBCvVSiBzRY3NKnK5fB6y0fAnBMiC6BaMvNXacHu42H78J3hH2pdrnpQFzTowoJzOYiq+aKeDYVkvFpas963yVB+iaM7TMnSlb3Uu2PqO7ZZ6HYs8549u1tpvzqOIgQ5NXufBnC2LMhIc+/C5fLBnQNPk19JMgP6Kwprs487mjpC6fk37dcxOCCbjSAjfHHZXZ2br5awiBrHAbIkhmkzObW9eChP+qv3nOaJ/iX2c4uV8F4WGB5RsYSZgsHEo2nARx6xoDGOpPF95rYMT7MJdnBs60RqYgJNnrurhCZhTPyZvg== X-Forefront-PRVS: 0157DEB61B X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10019020)(4630300001)(6009001)(7916002)(39850400002)(39450400003)(39840400002)(39860400002)(39410400002)(189002)(377424004)(199003)(24454002)(65826007)(106356001)(105586002)(33646002)(5660300001)(68736007)(81156014)(8676002)(42186005)(92566002)(15974865002)(64126003)(81166006)(50466002)(36756003)(305945005)(101416001)(50986999)(7736002)(54356999)(76176999)(23746002)(31686004)(97736004)(4001350100001)(2906002)(6506006)(6666003)(6512006)(6486002)(189998001)(38730400001)(229853002)(230700001)(6116002)(83506001)(3846002)(31696002)(86362001)(47776003)(110136003)(2950100002)(65956001)(65806001)(25786008)(66066001)(7099028)(18886075002);DIR:OUT;SFP:1102;SCL:1;SRVR:BL2PR04MB1969;H:dimac.fujisawa.hgst.com;FPR:;SPF:None;PTR:InfoNoRecords;MX:1;A:1;LANG:en; X-Microsoft-Exchange-Diagnostics: =?Windows-1252?Q?1;BL2PR04MB1969;23:Iu1C7V8DenYBkzuM4rJsDYpY/A2AHb3KobYi9?= =?Windows-1252?Q?1GubRaGUlBRcRjlsGKr2ApAkiImC4i+m9UzwoJCimH4CoytiFFMAZtFL?= =?Windows-1252?Q?vn3+sp0nr9lF/Zx3f+XeLhaQTP3ZK4FY+fbOPKZfrzH1edLKMII9dPaE?= =?Windows-1252?Q?PuQtyswDY9CQYCCl/xNgTkAoHYCSL7CwIDFLGLgQnvfsvZnZyRZXZJ99?= =?Windows-1252?Q?Mb3HcdNP+RrYbNjxEeCziS62pzpO7SbaMaO4js7Vh0cJzI0A4JaMjxUU?= =?Windows-1252?Q?oEgBdBs5siZ/ZvEH1OwNoYYhPT4RnyOPe8WhN1/kXyGismAwsKod76JQ?= =?Windows-1252?Q?TIEBXos9j8+AGQXOX/XIJf2mkT8NnsAVYHxcROQHaHXFplLPUrfzXOT5?= =?Windows-1252?Q?dI7cLwniN/drP3MyZnDHVTIRTXbnC76CAoBbJhzmJW6v0JNojbkA7Bvw?= =?Windows-1252?Q?muexmHZq8w06aAaSyM7TSxgPRhur2FQGgQ/S7pSzVui+seHvfcw0xPmu?= =?Windows-1252?Q?44Fw9UjyvVeEkWOuK1MoOURFsxR/u4cHuiyC9agN87jlO/Fe8/Wc0yDO?= =?Windows-1252?Q?PhJnQDmyEMD21eR7EyJXIb93JMJ+OylvTN5bBfCb3gvQLTUbUH7hSsN2?= =?Windows-1252?Q?LYTlmdlVDzWiZkrf3l4LZoEeJTJXmXB7SDfJDi46dDKWfDXJRTGiqZyn?= =?Windows-1252?Q?yMd1UBhKAuFaHWiotJ3HiZGATzV8F1UJd7tyrvYu0Qm5l5h/Hjwf9F5Z?= =?Windows-1252?Q?Qb5qw/1KunIbCLsg6uRgnqS3zdDKRZ191rp68sIkXACOEEcBqGwBVh/3?= =?Windows-1252?Q?9/cdQXprK3er7KcuVfwcFNrWPptOoaXN/zUu0guOoAAnm8i6wzTxdelB?= =?Windows-1252?Q?V27mN2z8lyGoSmyqpR7P/jpAcB/FiIEhXCi3jLIFOIeFl5cnVKPLA0Sz?= =?Windows-1252?Q?2YH6yUPOuN4ypPEO64ZSV/UyvpdBjwowv+JbC8XxOnyfxIutXSqSHk7X?= =?Windows-1252?Q?N8wVa06vu5ClDeIJlqoPdRnZkCVRixJ2EpTMHp4sKUjoX5XZioeBgD7O?= =?Windows-1252?Q?TzDbVK9W8HjLm6Tdunx2h72zn1uPxKmq2THEMb5CIiRf2YYvXg+0jkG9?= =?Windows-1252?Q?tZ21IgXB6kI0EVzOP/gVm4opdeiOp1vPQySZwyjTyrwfmkmXesu2cOQU?= =?Windows-1252?Q?jFslGSXLGs8pRE7Zx4tjTX1BzJdF9TTURBqJahA120S8sffVO9cCgdhq?= =?Windows-1252?Q?VXxOdNn9gXmF783WQPtRxpoD4CcmAyBJ/lrE3M7tpS71fvpuRLXcMuuq?= =?Windows-1252?Q?dvcsXhfzoPfm47kwrnvwUDW8rhRhy0siKEbHGB4T1OphL3czlGwFzG0e?= =?Windows-1252?Q?ZqgG1IfOu9mgBhUmSy4WM0u2qWFIKdLfWjyRUHv114TOryplWsEFlVKi?= =?Windows-1252?Q?48ScT7Ng18N/LVbzdX5jmELn3JnVjAukRLnASEnMqJ6Y1KY1R+Z+WoYx?= =?Windows-1252?Q?dd7QYBARSFg3dz+dyMC4cGJVr+veZ3RclOpUxODFwBCHce0z8z0KsxD5?= =?Windows-1252?Q?QnwTIlPcy1aSW9zoTChvInG+mNf1o+xDnxA?= X-Microsoft-Exchange-Diagnostics: 1;BL2PR04MB1969;6:djmDJmydCUtDj5L2gcccHrsox16hiU1BsUH/FSZcnVGv9VzCDqYRAGhdBaWH7OTL/JvqTUdK57GHBZvScn0XNhDtOm26aC2i2AYSeMclZAuxj4EC3b6ukXR7YbjNMUj/S2wAXxaC2j+nwc/0SSfsYcN94ThAIxQwS0CSs7eW4uWjBCSAzGWF7SP3jNy6aEUXg64gBz/8W4+wMXdP8XMlYTfibpLSwsVK45yW9rckHMsz/brDsJakUSeGxr1yi3nsEby+XP5xeNOYkZ1vy2x2c+vVWgxcPXRTTV/DA4TQKZa+m5rWuTq7sUqmQfVkS7FWDPwndD+KUW12veoYDwEF5ru3Wp3XHTsMvY27yau3ttV3xEZSFiOThy5J39qNnAmZAGeaSSg/52e8xsOzRGIezgaJZWQ2AhAtWLE4CXvaMOFJVkqWeW5i8dfduF3JBnGCTL5HIcSsO3BqIR8ykzVBHw==;5:UrWAAlLQZBkP7WtfRWOjXYrtEU8p4IO/n6YofgnBln+025syh4gRFVWfHPdVR8N1eN/2BkcZplHG4MhKrneQ+WUpyJpD9fmL1VokMSC0Z8oa4Hrncty0yVY3Zo4SsRsflOLCqLLZSYimPUteDFvupg==;24:13svWZQ2sbjRvhpQPx6Fg4oGjAjsIdmAax6CKKOmE0PqqLG736U0fmXM9r+K9jhK6Eg60UiXzm2WXx5R0eWQ/j0VaMHG1swSC6lvz42Uksk= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1;BL2PR04MB1969;7:HnbH4UfQPLP01gk62S8EhY9wp7dppULcBjvHLjjSkQCpB/hw2sdcvHohUZWO3OYYb0bbm4wXtJ6NlxoySKJPTo3e06HpKBN3Qwo6VLTfB3hxzWYrPGuH30CpI4LBg6PfPfUXmaL0vLm8uL/3bD1VZ91b6oXYM8gavhIpvsAtr+1eQ5BzlmnBRHp2bBWUr8PB8S2Jic4JFN3ZU7WoQxmVmmwkbKqz9Ct4skrmGXV9mzjin3TSFekDHdXfFQoSQSkANrphguKHf0WolEi6BgvY0Htvi03599v31ZaEEiGctXAFLNpTf6Jv2Ji9qP7WSpMoqL+xy0ytQLQXapIHxKwYV0XvFBogiCcYFzCNmDjpurvROL5Xcu2EFXxCC3gs0exUyV7Pc3oSS37j6mhenFRyhlAQPG3b1h/JW8BxMIReJQ07YTiIcvN5THJfJH8MNRejQbfyf0d3ffLb+be+T8qtcw==;20:SF27Bl4QvxRgA4cAE5rGcr9a8JoXIJo+AWNe2uwx+/9LHcZk6+iZ5sTBE3SeBxGWg/83J/QA4cBNRgdYTwNUXMuwuKZvKl9S+nMZFQoyRoxfCe+PiAnqMLs0Vur+6HkAiiEYIAWw47Aui1gibqYFqnEqUJKk9jdpGtZw/gsMH/8UoFovwbNtqIOnPeSqeDUvvtgu4qCy8uVMFDI4UL/dJm131N0lQw10cZ/2TwbPtpDgoDbahdeHOawJtC9TSbgd X-OriginatorOrg: wdc.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 15 Dec 2016 00:31:52.7638 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: BL2PR04MB1969 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 2201 Lines: 60 Stefan, On 12/15/16 01:47, Stefan Haberland wrote: > Partitions that are not aligned to the blocksize of a device may cause > invalid I/O requests because the blocklayer cares only about alignment > within the partition when building requests on partitions. > > device > |--------4096--------|--------4096--------|--------4096--------| > partition offset 512byte > |-512-|--------4096--------|--------4096--------|--------4096--------| > > When reading/writing one 4k block of the partition this maps to > reading/writing with an offset of 512 byte of the device leading to > unaligned requests for the device which in turn may cause unexpected > behavior of the device driver. > > For DASD devices we have to translate the block number into a cylinder, > head, record format. The unaligned requests lead to wrong calculation > and therefore to misdirected I/O. In a "good" case this leads to I/O > errors because the underlying hardware detects the wrong addressing. > In a worst case scenario this might destroy data on the device. > > To prevent partitions that are not aligned to the physical blocksize > of a device check for the alignment in the blkpg_ioctl. > > Signed-off-by: Stefan Haberland > --- > block/ioctl.c | 3 +++ > 1 file changed, 3 insertions(+) > > diff --git a/block/ioctl.c b/block/ioctl.c > index 755119c..8b83afee 100644 > --- a/block/ioctl.c > +++ b/block/ioctl.c > @@ -45,6 +45,9 @@ static int blkpg_ioctl(struct block_device *bdev, struct blkpg_ioctl_arg __user > || pstart < 0 || plength < 0 || partno > 65535) > return -EINVAL; > } > + /* check if partition is aligned to blocksize */ > + if (p.start % bdev_physical_block_size(bdev) != 0) sd.c ensures that the logical block size (sector size in sd.c) is a power of 2 between 512 and 4096. So you can use: if (p.start & (bdev_physical_block_size(bdev) - 1)) Or use div_u64_rem to avoid an error on 32 bits builds. Best regards. -- Damien Le Moal, Ph.D. Sr. Manager, System Software Research Group, Western Digital Corporation Damien.LeMoal@wdc.com (+81) 0466-98-3593 (ext. 513593) 1 kirihara-cho, Fujisawa, Kanagawa, 252-0888 Japan www.wdc.com, www.hgst.com