From patchwork Wed Nov 30 08:22:19 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Damien Le Moal X-Patchwork-Id: 9453901 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 2E8F460235 for ; Wed, 30 Nov 2016 08:22:40 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 1ECE3283AC for ; Wed, 30 Nov 2016 08:22:40 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 1372128400; Wed, 30 Nov 2016 08:22:40 +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 E16B128409 for ; Wed, 30 Nov 2016 08:22:38 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755160AbcK3IWg (ORCPT ); Wed, 30 Nov 2016 03:22:36 -0500 Received: from esa2.hgst.iphmx.com ([68.232.143.124]:39466 "EHLO esa2.hgst.iphmx.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751148AbcK3IWd (ORCPT ); Wed, 30 Nov 2016 03:22:33 -0500 X-IronPort-AV: E=Sophos;i="5.31,573,1473091200"; d="scan'";a="37911448" Received: from mail-by2nam03lp0053.outbound.protection.outlook.com (HELO NAM03-BY2-obe.outbound.protection.outlook.com) ([216.32.180.53]) by ob1.hgst.iphmx.com with ESMTP; 30 Nov 2016 16:22:31 +0800 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sharedspace.onmicrosoft.com; s=selector1-wdc-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=U1BjwQlKog2x8gx/2VwWhPNH5Twb96mXLNLSzjAX4Rc=; b=VeR5Z8Wh9TBV3NrUtDmlwftcHcrdk+Xhm79J6Qjax2aVgcffM3AqmeM1+R5BgszSRt4sk5tUCFsakn/SV4rLoQ5pFUGGrkQ2cBaXm4l8eWnUrnRHG1B4BkRUBIZACQ2I0TxE9kgqqcMjuJ+IXm9bht/ZpG72aACoZB4QxWlvfsw= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=Damien.LeMoal@wdc.com; Received: from washi.fujisawa.hgst.com (199.255.44.5) by SN1PR04MB1982.namprd04.prod.outlook.com (10.166.69.142) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384) id 15.1.747.13; Wed, 30 Nov 2016 08:22:27 +0000 From: Damien Le Moal To: Jens Axboe Cc: linux-block@vger.kernel.org, Shaun Tancheff , Damien Le Moal Subject: [PATCH] block: Check partition alignment on zoned block devices Date: Wed, 30 Nov 2016 17:22:19 +0900 Message-Id: <1480494139-1658-1-git-send-email-damien.lemoal@wdc.com> X-Mailer: git-send-email 2.7.4 MIME-Version: 1.0 X-Originating-IP: [199.255.44.5] X-ClientProxiedBy: DM5PR12CA0018.namprd12.prod.outlook.com (10.172.32.156) To SN1PR04MB1982.namprd04.prod.outlook.com (10.166.69.142) X-MS-Office365-Filtering-Correlation-Id: 586beecc-8450-44ed-c2ee-08d418fa062c X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(22001); SRVR:SN1PR04MB1982; X-Microsoft-Exchange-Diagnostics: 1; SN1PR04MB1982; 3:fS9TkHiJWAe6hySmioAxn/o/mR4p69YQaI5kGtjWFrWL6fCew4fLKEvLSS+G7eUhGYknkTsiAiU2ho+IoD/iZGCKCEp68sZClvpR7AAP4foGGE+yFBLPAOcpRMpPMxUfrzdqKb7q+VJ9YBvEyZ57TUKeLWubUbr8JA9QYNlmaIJJBXSNGhXd6agp6NiRbq2hPHR80h3hzl2NXHZjIMN7gmTI0Qe8u0tOgJFjmXSzQrUftUMhE4Ra43HaMRRBNcdD82iopRJ/FtOGwl+KSaWAZg==; 25:NPOdRyEXr/UbQu3faV8a7i+tdQYbxy3osjGzrp03Zz83TrRyKB7sMeT/Gh3/bLrt4NUK3msZJcSoNTNoZ0tMcOJcB3uKXd2nBkFh7Wesj1GlD+zfSma1Zsmg20s2UzfXAAwLdsXVJgXRc90cQ1mffo768sSSCCvdu6lIPPjZzX6TdKZ64p0mv/1McljWdqi6cxHL1y0jbbFbfA7oxmBQVpSYNbt12YsYbtJviF8SsfDOST9rCsBJxN/ej3h0LG1Z8p3voJziH8lABFZpp1ZmymzQtc0dE6rT5HQn2lxcsMZDLJobiVRPbmehXr0jkwDnREnXZyvpuGFoIByjzeYRp7xu3UDJ5SmNbkUQ4CGcbN+dTLe9XTaV6wIvvhrtcNBCzc7ghXjeqRJAVJZI19hw7MmHwN8UP3k1LwFX5XmOYFxrI/Du+0tmZ3dWb0VCGVX3R2sj/K1wrvEu6jA7Xz5ZxQ== X-Microsoft-Exchange-Diagnostics: 1; SN1PR04MB1982; 31:IHfDkBY0q2UU7unq8eTg8sw8LHUAor8U2qP0xGU8JliAOtdiCaEHUWwSCdWZgRITprZqhcnVUmkpZBHoucLc1SuvZeWdx6f+U96bhrPqozNJguXisdzz7RCSDceoXsoQfOiuyQADyg5lnCqcslwvBLuXLQNeDWKQ3DRb7ygIkoTwLmqFBayIrvuaP0GRmA8glqzuJeH66tOXSdNkp/p7Y2uxPDAMVmrwZ1E9BrK9Ca5Lw3n0b3Foi1rFFqyGokDV3x2TE/k2y/NbZmwu8dgsbDrih/IGmarwZ/hBI8cnB8E=; 20:0Ku3tBLQzcUPlkwKw8MNVBYagqzggR4b07Jg1LZ66jnBoXoVqyOyouC3+gqZ4lwx+NdyRr/V//Rgz3/lxOvhcK9ZNQm1QgyGbOh1HC1UkoKc3+pyIHnD1XMixkvu6bI0G+I7fVWLtA9+5GdmQEvG3LJkX107cyfFGDB7xtkwMzxb8vn9M9h0zd9CjJIs5RxPNBrj/rtKymwyiH+GACfgsKHqh1qt2sGYgLxopA8Uo7axMvccHOad8d9Pn8T3iQDyZgZfIBMpoFraIrzsEyEPKL5bAZJOVOCDE81BDwLP/6QRzeWHuG+LZOWSdnS79HiTeiIwDruvP0ApoOMN7Gau0nbDDTj+HWK9BC1sBtMzR5jy26ulvA6EK8Zi+HGBYaVZ254YWf+UQxr7U8+DcIPp08hbYGyOuOkNsbT0MWFL99NVGATj31NbwaVAwRTAsLGRnzyDZ7ZibH4IonaA/haf08Uxv691w7mCoxZmRDdnnSd2zIo3R6Quwn3t96521lC9 X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(6040375)(601004)(2401047)(8121501046)(5005006)(10201501046)(3002001)(6055026)(6041248)(20161123564025)(20161123562025)(20161123555025)(20161123560025)(20161123558021)(6072148); SRVR:SN1PR04MB1982; BCL:0; PCL:0; RULEID:; SRVR:SN1PR04MB1982; X-Microsoft-Exchange-Diagnostics: 1; SN1PR04MB1982; 4:jbc3bOluBrUDCtXjr5XoY/XzqPrjW87BXakamFSMyWN+ABQOOQ1/hApbBBT2bi4TS9Kr8qmrpTaLScDlTjPnQ6CHqIiULTQNMfZqOTEo3Hm+D6cQTBsLz4niewdmtnGnbSFHQKn8AqGlWfnTecv1AP4STexy7o35yzTBu91G/tqytkYhSZ+c84UJKkYyQJYmQ39I4QuzyL+Upeu8nVb0jgJBEzGQ6mM72qyGc9oVQYY68sWSy9KBofirk1dL5QYq3E9sGSJ/tbNuW/FVLwoDEaEa2hC0WjEO1WYFnh6+6Ox/9EWoViaaEXB9XE1ksJhTX6NePIXDt1eJxA8LWKSt1ETtVIzPXWnRHToPHYno8UB+xcSmBAXEcwdSTTdXkm76p8ixHp24iE9nHnVj/45zFgFZh4FXtoaat8wX+uzn0fnAmgnmrFIl88w5/IqpQ+Kme9lkzht+fjWLwJDUYNLwPzhkce4cJ/zH7QcYUuSDzsdgC5i9KrbaoAusSuKs0uEe8dKHZN14MXdeeCdPo2kZXvCQKHb+A35apMeAtT3TmuOLd0YHDok/2VjlgJvIKrRIL8jJfSki6HrfcqtP2oSCiH2RkJTGQagB8FbFoPMn2hoA++s4EzjE6Ldy4XHdBi9/ X-Forefront-PRVS: 0142F22657 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10019020)(4630300001)(6009001)(7916002)(189002)(199003)(5003940100001)(50466002)(6666003)(733004)(39450400002)(38730400001)(6486002)(39410400001)(6916009)(36756003)(105586002)(106356001)(48376002)(50226002)(81156014)(81166006)(8676002)(2906002)(5660300001)(4326007)(110136003)(189998001)(47776003)(101416001)(68736007)(7846002)(66066001)(305945005)(7736002)(86362001)(92566002)(42186005)(33646002)(50986999)(3846002)(6116002)(97736004)(7099028)(5005270100013); DIR:OUT; SFP:1102; SCL:1; SRVR:SN1PR04MB1982; H:washi.fujisawa.hgst.com; FPR:; SPF:None; PTR:InfoNoRecords; MX:1; A:1; LANG:en; Received-SPF: None (protection.outlook.com: wdc.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; SN1PR04MB1982; 23:uDi7IJQQ++CxokpX07s4jmN+q2teFLjZqXR3BTYe2?= =?us-ascii?Q?1p9fE1YFoYCj/F8NrELpmCCmFq0SplT6AofTgUMDnJmXh5dI/wDTp07wczX+?= =?us-ascii?Q?XDkqQajTr9bGWmNGIQgiwTR2avIpL/oNISVwQK6BC9LbJLLHta9xeUhKyO/c?= =?us-ascii?Q?3eoT/nhpmKekP3y3QbYqgf2Sxp+ZahdBpli9EWqoNDHO90p5AOG0Pj/YDj++?= =?us-ascii?Q?uhtRMe7ILLlgTQbkovVOaPJWYe5MKMdtGblLbVO3g9Cp7DfS1RT5zPjcaVt2?= =?us-ascii?Q?047tjlFrfCs7SIctDxsM0riy4twKVLPDyNQYKbTUKdE6r3BTIYL2efCQvQdQ?= =?us-ascii?Q?xfim8DeBxf+/uNOibgfCY3IkPgZGm6jr9cYnSe/2GIm6ZzV4mzt17flTpUqT?= =?us-ascii?Q?cNIWE8qlg/d6ndafUBNyoIFw8zgsL9pn6oKzWJP+h1mqJaPKe1xophGVrpKz?= =?us-ascii?Q?QSfcph727xVPMfYpiVc5LmiVpP7LcJ/A7A28JpKaizmMnRnQw2FL+W0U2YBy?= =?us-ascii?Q?fpqmpIi7qnqLgr8aCORclmd6FSjJ+UZQ1zBDJYojv2wGwewkh1st7FY/qoX5?= =?us-ascii?Q?jDVw1j84hbZ2SwyHH/PPy8B88qoWnzFMDKKrmhsoNfxxttmsOeg0y6T+9Ay7?= =?us-ascii?Q?zg86iRfIlGIjPW1rQ/thMnRtcF+KQvtU0CC5Vxnda9c+Yveqb0HZspmxSW2n?= =?us-ascii?Q?8F2m28znes4iwKPGJnpMdr2z/eMcwvhqeJKd6DDZFEWAHiFY3gdCY9qOjGtq?= =?us-ascii?Q?/UrpRtd9cMpZwc06kWLJnysUymDXXnpsotdVevZBuKZoVZ7rfqqe73DQ7mW9?= =?us-ascii?Q?qsexIrNsa8f/HSYIKYR+nqHQfpAyjQfpk8MFjllRYnRdBWSU3Txw7wrHsD4R?= =?us-ascii?Q?kbpJuWrzcLfhYw4Nl7W/i3tlqIUAOaylgne63BpIFsS/rbIUG/QfPMtMr/xW?= =?us-ascii?Q?05kK1j1PHWVMu+X6QU3SDFh7VHe/hoWIeS/poe2EWUBOxU9JiRK7Hb6YoR20?= =?us-ascii?Q?FYNTqwTprynAqP7CQwLFOa7S720bmXiOzpWQwohODdMRS/HniW4vL1xljjMr?= =?us-ascii?Q?pZr5CoNJA0CnA+7hufy9oo4SNUO?= X-Microsoft-Exchange-Diagnostics: 1; SN1PR04MB1982; 6:TTcw9r4axAZGK9mlXjBX5cafcKmyKkCRv08zsiJ2nX/GGHDFBVZp3DQa2X+wQXNFKaJP9n0TipTzyhq40ciTj7di2tm9X+JwUFHCTTOx47cQhS8/uUDQTQGbF3kqQIfL7i3B4Fb4ZgsY99JSSR5S3Urvd2s0SJQRFwHqbU+mu7UwvrnMsTsV8oFdKXrVCrhPWyx2tL2Haeo/7jurtpTBQDeFFVBBQUhz+iRKDc3GWroSBoqLCWTmDGzI78FhmybMaU2BxMsXq6xKTkMNRdh/GYXkM7A7sAi8fvJ30OLMoPFxWs7IGUz2ySn/J4IcwswG0FR6GVo+uMwYpORHdBqwNTGc8OPeetOwPg/Rv5lAqEo8l3q8WUL2Y2T/y5/asu+3zuO3j30ux2PW18kuiD9RcMkc3aLjizd6uWVACyEIbrgy+rzTRCKKW8uJS8Bg64UL7Jos4BsE7ZKj4J0eVET8pwPTcfJUG21xzYw2kd+aazmkE7wNaN2WV0tJK27ANkZ0; 5:YxZJuX5qtIj2yBf68mbJf/4oPHMY25A8558g3s/9fJEPghOMPLRB5J9axOnEtG3eWHG7iyprQFH26Jyj7010hwl1ua/YIlNjEtzdFYEPSVOqNKhDYauFlR9d3p6cxIyBVmYWBUzAjlrOrV3dDK8IQA==; 24:muZ2KvfK4Ul7qFxPC7RXqy1B7N6n3xSiqnn7jsLsdzw06T1xfy0KAbjmMq2gM5IwIZEPqI2Ggix5dbRVOhofHHd4If/bw+LppCxNQWSdDs4= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; SN1PR04MB1982; 7:Yq8YgLDV39XB59tj7TjHbRM7fNegTrS6lPwr6TlOyvgLW2brqfNX5vbalmAfwvORqxUBeMJZcxgZ/BjO6sBG33MZlGPODdM2plgxI6jmcazvULPpsrB8GWbkfKVsXYi0aWbjbnxEuzWsAvoAIXORK93sIE6sKo/JhbGZ9lVYppW6ggUNOOG0XL2YH2Rr5bAd3yd2Qnh9YL9Q7fELgRu8B6BQjseiB5I5V2xFy0ufRciwOKtcdfVyVgtV0ZD4dxriYh3H4iaD9Qpfc77YYW1onVwoIFA7pTWOWi3ZfbSNkbeN1FMOo9jX0P3N6m22bmoLKVN5OdTDHY2I0BxYvvbctLFJieG+kS9VrVH/Frn1EJD0IHyZve/2bGWBUGEufObp9jRt+zD+kCvW8F5i3nJqGhPs2bRaOGIpJcVlwV8kc/CUFoP4OdAOspGbRb4Mve1x5pVu9x2Ypbz2JdjjucbKkg==; 20:6g7/qcnceBLoSjYB9h60dDWWjPOVDgt0M4Nkc4jTCe9vB2RpD4DwWjbaJJPb/Hf+y/q+kMWrCEcu1gXVHyE9tGAQA6Xjcs2vk3Adrlr20r+2mCXW8Mlld4mFcY5x2Vgiruf7nmat+32rwpXFApLuYSMN87qP4PBCK4IhLgguIx/Bnsco/omQgJSUwxK8JY1cXxfomd10wyQ1VlVSV8twYXvL6py1Ho/2X9S0QoM0DBRcK2SPLDXW0wy9HSfiEZnW X-OriginatorOrg: wdc.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 30 Nov 2016 08:22:27.7709 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: SN1PR04MB1982 Sender: linux-block-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-block@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP Both blkdev_report_zones and blkdev_reset_zones can operate on a partition of a zoned block device. However, the first and last zones reported for a partition make sense only if the partition start sector and size are aligned on the device zone size. The same applies for zone reset. Resetting the first or the last zone of a partition straddling zones may impact neighboring partitions. Finally, if a partition start sector is not at the beginning of a sequential zone, it will be impossible to write to the first sectors of the partition on a host-managed device. Avoid all these problems and incoherencies by ignoring partitions that are not zone aligned. Signed-off-by: Damien Le Moal --- block/partition-generic.c | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/block/partition-generic.c b/block/partition-generic.c index 71d9ed9..c5914b2 100644 --- a/block/partition-generic.c +++ b/block/partition-generic.c @@ -430,6 +430,29 @@ static int drop_partitions(struct gendisk *disk, struct block_device *bdev) return 0; } +#ifdef CONFIG_BLK_DEV_ZONED +static bool part_zone_aligned(struct gendisk *disk, + struct block_device *bdev, + sector_t from, sector_t size) +{ + sector_t zone_size = bdev_zone_size(bdev); + + /* Check partition start alignement */ + if (from & (zone_size - 1)) + return false; + + /* + * Check partition end alignement. + * Ignore eventual last smaller zone. + */ + if ((from + size) < get_capacity(disk) && + (size & (zone_size - 1))) + return false; + + return true; +} +#endif + int rescan_partitions(struct gendisk *disk, struct block_device *bdev) { struct parsed_partitions *state = NULL; @@ -529,6 +552,22 @@ int rescan_partitions(struct gendisk *disk, struct block_device *bdev) } } +#ifdef CONFIG_BLK_DEV_ZONED + /* + * On a zoned block device, partitions should be aligned on the + * device zone size (i.e. zone boundary crossing not allowed). + * Otherwise, resetting the write pointer of the last zone of + * one partition may impact the following partition. + */ + if (bdev_is_zoned(bdev) && + !part_zone_aligned(disk, bdev, from, size)) { + printk(KERN_WARNING + "%s: p%d start %llu is not zone unaligned\n", + disk->disk_name, p, (unsigned long long) from); + continue; + } +#endif + part = add_partition(disk, p, from, size, state->parts[p].flags, &state->parts[p].info);