From patchwork Wed Apr 16 10:07:47 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Jared Holzman X-Patchwork-Id: 14053620 Received: from NAM12-MW2-obe.outbound.protection.outlook.com (mail-mw2nam12on2069.outbound.protection.outlook.com [40.107.244.69]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 516DA22157B for ; Wed, 16 Apr 2025 10:07:55 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.244.69 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744798078; cv=fail; b=SSUqTn4aviLfzcd2alxarLJbCYFKyamOjKuKdgnzNAvH6pHFt3/RrgtysKOZkpGdm/gKUVf4QWPrCZbvFrWG8EiKoH8xVIMxNIkYBwFtA95JVcBWl75w9mYBjDqhasNB9iRJmS2s5ROyEPq2JFItQA9l7mOCwMsy9bX9mLgvgSs= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744798078; c=relaxed/simple; bh=nHuabSWzRERxKMbdcFxjp3+svn8BumXKy8DE+zhal44=; h=Message-ID:Date:To:Cc:From:Subject:Content-Type:MIME-Version; b=PNEnuTJKlGTL+lQLzizNmEvVN91S/6ISvEKZDvUdpkIHFrP2y1Y/V2NIhueIntPLBGUlEcxwn8GvGrWriUrT2VHkcaKfZVYL0e91M548rh8eXGt03ZXscL6N8z8+/j3USZTR01hCJANQ2rYitUFOP3hcJK6BtKfkVuc3y3sXme8= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com; spf=fail smtp.mailfrom=nvidia.com; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b=YE3r3yMV; arc=fail smtp.client-ip=40.107.244.69 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=nvidia.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b="YE3r3yMV" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=IaAzQND2Ugc9XIP5ia0SeH5m9YaBi+aMrMJrgMgP7fUyoYPEKtyItR/0Ybrx/fjuPhqbSFu3vZVtQsWDQtLaaMaTGnUaxIv28uMk+/QgaKbsIEaIE++XcxfyMlq0KWnmndwgekDG33pFG0yVqxd8iOBEQhmG/xOsWCL9e153VxYMXHLGj1Jrzrr6chqGlXKI6TOO5aj3fj871cf40ZpTjY9FooQIia/SSxATNZJZBISiKjVCeBOFNjH3zYKD3Qw/OXOEWzZcNLQKcxK0aJa1eYeGs3sqFOKHu8/OPyi20Pt4nyxFAwEZ4KNu6r2JS7dekjv1WgslKPEwNDCXVTrE0w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=H/0iFk6LsGFHZ3kxnsjr6n4OSwUFKgfMwETfRtfqqCI=; b=ySEvzl3i9NXZTCIsuKWJV8dxKwzoSKdw7s3rtf10HAtANiRgkVn1vq6PRB+IwdHslwRdEqvNFhV6hZ858L6+TntJT1oUuRuUXWbubcvC9ueKPXXNMdRn9KNJ20aQDqkd3i6At84gDwZS69PfqpKKsuWDeJIlrMpFLSf4s8mETVy4lrj+KHGnBiAzb+PHYl7HpOCGvuSGjoKyuLsG8IQymqjDxvex+lyeW5wptyrYmYMCZzgLGaQip2LNXZ+tweJIy/XNOwgnlz9YLm9dibjjfAKotrP7FzZABbuAjWP/FsDA+UMxs5++WUPu+DvHMoWFY+SPeloPwQkcXDgTxDqALw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nvidia.com; dmarc=pass action=none header.from=nvidia.com; dkim=pass header.d=nvidia.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=H/0iFk6LsGFHZ3kxnsjr6n4OSwUFKgfMwETfRtfqqCI=; b=YE3r3yMV+WCOxnwAsKl0PiD2y8yv4D2LhNMrWPvhXFAcvjMjAmhnqPRUQhY/KHWHjXKzkNPaEHcVLcC8uiBIYuIpeetZ5SPH7ZEBWFofM5wXJiyB9vrsCXlk/hY1RxBv/a/6q/kDWXaJYdRgquS/0KyWHlVLmb9DOM/GclPu0AOuJ16MbbBRgwWFKoT51/9cflwT0Ltndfot1tLIoLs6Rf31OgFRKQYsNby2FT/svZOg8fPgUnde6p6ve8hSu2EbZyidfgcrdDRt/GH4Zfd1bJZIGLoHAdYmrzelO0Q/k65OIglT+PdAgppx1Z5Ae1CYYzxKtwWeBNXIxs704q8sCg== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from SJ1PR12MB6363.namprd12.prod.outlook.com (2603:10b6:a03:453::9) by PH7PR12MB7209.namprd12.prod.outlook.com (2603:10b6:510:204::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8632.34; Wed, 16 Apr 2025 10:07:52 +0000 Received: from SJ1PR12MB6363.namprd12.prod.outlook.com ([fe80::bec3:4521:c231:d03b]) by SJ1PR12MB6363.namprd12.prod.outlook.com ([fe80::bec3:4521:c231:d03b%3]) with mapi id 15.20.8632.030; Wed, 16 Apr 2025 10:07:52 +0000 Message-ID: <918750ec-42e8-46d4-bbfb-e01d3dce6ed0@nvidia.com> Date: Wed, 16 Apr 2025 13:07:47 +0300 User-Agent: Mozilla Thunderbird Content-Language: en-US To: "linux-block@vger.kernel.org" Cc: Ming Lei , Jens Axboe , csander@purestorage.com From: Jared Holzman Subject: [PATCH v4]: ublk: Add UBLK_U_CMD_UPDATE_SIZE Organization: NVIDIA X-ClientProxiedBy: FR4P281CA0071.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:ce::6) To SJ1PR12MB6363.namprd12.prod.outlook.com (2603:10b6:a03:453::9) Precedence: bulk X-Mailing-List: linux-block@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SJ1PR12MB6363:EE_|PH7PR12MB7209:EE_ X-MS-Office365-Filtering-Correlation-Id: 25558d55-69be-4a6d-07fd-08dd7cce8c8b X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|376014|366016; X-Microsoft-Antispam-Message-Info: =?utf-8?q?DJQ4+un5sihg9BOIFVlQKIqVg86SbqL?= =?utf-8?q?ARSPwr0wWnTsKD3eey7TFA/YUFHL8I7xZGE6LZIzXLFSneKy69iGwKD57KW/Cry/5?= =?utf-8?q?D/mbk8VB9ctkENN9w98KOGGs1/L0Cgs4J+dzYKi+0G6r+rhL6bB5p/2OndJkW3Ncr?= =?utf-8?q?lYGE8yYgcBjfV6PWvOJUixSC7oIkdQ65JknKhy0oE174m97hNzzWfm3kd2xuc4f4N?= =?utf-8?q?IOhsH8lHPf0DDx7oFU5CHsl9NdS2k7LwRK1giUCILiNzmfzcmLvgdk8DS7DH5ml5Z?= =?utf-8?q?10lIVookz7MUAjf2VhCL85R3TTBhQq4bJKGVmjYye7OiQFHtMPF8QupQ36ezeCNEz?= =?utf-8?q?aAMAYnAwOlXTIndUQygciGfjW5LwlfRrUWeXKsM+ixNis8Gy722EPdcxt7y9xr7bh?= =?utf-8?q?Q4yx1opSJNaBN6YDUq5628WU3hslNRIsEyTJRnNlawieBnnt8b8V55Ho1lLu//RuY?= =?utf-8?q?0tCNalH6Ic0+XhvMlWckxru5dyjQYJtAHZbNWODJY2hDKxUTUcXzjaQv9TEkE+AQO?= =?utf-8?q?o46jf5ChW+D4D55UjYkEmUY9H+e9xL1336rQHO26Q8fDQISiKRIViDSyC+iR1QBlo?= =?utf-8?q?vyxXn+f9K73CtesTNdCciGVdRrR/1gMXutFiceJgw3qeKPnXJI3tsGzEDZXlRMfVJ?= =?utf-8?q?n+oOiQ6RTSYQ9X8DUsqGr6c11pVq177JR21coLVEd4gv9aFaU6m2/e8KZz+evJJwz?= =?utf-8?q?8y72GvlLv8z+REAa4r09jK4nuhF9pjxMFCbn2D09+8+fCrQFLh968xWlM/XZudPQs?= =?utf-8?q?GU0Sxzegh73V6z+P+x2O1X26PWSBSmTRXMQPu91vT9BKqq4Y3stFpzxcICoFS2LTl?= =?utf-8?q?ZLAafQDqRkadHNejQoOF/XElquMOkIAWmjjYZJuCF815YyyUdtckgSTqQoVx6N4HP?= =?utf-8?q?NXPgfiBidg+2PQk2ISNqxLJBmYspSeudHv0AsULzMJi8RDAQz+hoUnjjzCIII742j?= =?utf-8?q?UEZr38xW3gBPH6trbbw+dDrgD2LL8QaOquzNqknVyhqa67NO1momQ1Ho8RT15UwP2?= =?utf-8?q?jlTxd7o8K6piRGUCx2kOj1HIaX2MhDXFF/EFfHA1iB4lckzW2CGoMKnOpM+/X3FVs?= =?utf-8?q?T1L0/9zLeUMp/V/RE/QqKNxCi1ybpUvO6tAo/kb+l+ZPyzRP5hy3yUeSkfSgGYwto?= =?utf-8?q?WphFJ8so2jK8p6YMgrTJ5wbtd3TRQqB6PZsp5tfQ/mX7tpKxVqqe6lDIQcoVUnfQ7?= =?utf-8?q?kDVj6DPu7fo5QewnaphXbzIaQuKk8wNJFiYBrzeE3TUEAmRAkUHgxBflI3c5Vox1z?= =?utf-8?q?hhhDECplZiYnfhO3b1Udlb53X9jvrB9YemRAg2Qydjk+ryApm/dlKUrVUgxZGuuMH?= =?utf-8?q?kwE0gNAhr+j/vac+tmRovibyZdIJQxjlmOWrw3gq4smTHb6X+VQag5c=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:SJ1PR12MB6363.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(376014)(366016);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?q?tCM8pfNex+xJkTQvjut7P1+Ohaiu?= =?utf-8?q?J32hkcU+Tsla6mrjL63fUjE/WEDO9q18iZn5XPeHg6eunAwQPPMP6Jx2XfMkQ+c4N?= =?utf-8?q?liL2NFaC4R04bbobdSN8beCrMxSZ8GsMsbjudYs1jmZE/b2K2VbcUUOPKCtSM5sNg?= =?utf-8?q?3V/VjnIDDpn1TY9prEPl6Tod3/tKCjd5J2SB2EbHLLeBpKh8tbpj4AM/vipXqtX+D?= =?utf-8?q?vkELWNba3Vc3f6AvDhPYfabp9CSaQ1u6knbn7r7JhfgblV8K/P5MZ7pHBdIUBpJiW?= =?utf-8?q?z3fxzhwCrNQLKxNXqE0+KFirtXS91at++4+1SC0DRAQA3rgHeJVjtnBqdo60ow1Kl?= =?utf-8?q?tqMYOwID5MyAHU4lZer5/XDhVaK0yutkJSO0lTeCPgYrJCG686kjg1PQFmPbMJR3C?= =?utf-8?q?UzgX7MqTwun2i0q6j+7qKG/6Xq8cOJe/bHGQn2LN2NtmwdB9eust8v6E0EUj145Ax?= =?utf-8?q?8dSjaMZ4ah7TV53Xvx4INjY8Jz/inXYuJB+5IUGa1LBApy/IRG043nq43ZtwgPsPK?= =?utf-8?q?EwHMGmS8bEyRKHMMa/6ZILcoGw1Hap3lcgq5/8aOClHIOmMROX/IEI5746T/KateU?= =?utf-8?q?eHHvoqohxTTToQredZYrNvvqEgfT5jjOzr8aFsArPTfQlNdkTcPYuYq7byz6jxl6F?= =?utf-8?q?0bn7ovp0vLCBkuN1XBOGbHE2LF4RxQDoI3CWO3mz9Q5E4YdMBjfwFpx94BOlLUw+I?= =?utf-8?q?PwZravdpnEwSc5xoGs2nYuO5lqqhfmBXCm8IEcitHAeh9vkiknjJfH7CX+5m4w70K?= =?utf-8?q?hIjuipeZE1J4mxjhMNlwzIwWDg3EI1msdk1uk6ftbAbIIlsulZg8nqORxzsPHjikS?= =?utf-8?q?fq3Qmm5wF76bHcN2qlIMXFNNTTDoCz3/Tz9ZH39lSLmFgkZFi3sBK6xQk6C6xA8WB?= =?utf-8?q?Zhf1K9WgnJcZ0cr/BVHia2cKYRk5OLnHH4/cUfCdSA1nge8ntjgKYUOkQMHQ7osvU?= =?utf-8?q?JttVMoCtbh+KUm2wekmZ/taHbvcl4dO0MQRM1B0oUGWbv4cfTctISixS2NJ0r9PNv?= =?utf-8?q?mfoqNe+mhHImbO0pCieC6BkK5JNTLjxfALC3BerE6GtCQfbZkdKckF27rR220XJwZ?= =?utf-8?q?HBv2n4Ieum8i6rGm4LQ8rL44Gbz8hbUHRmxx5jcOKaIvEuy3/qJGa9utJuorbMQsp?= =?utf-8?q?aopU/Ji832WDM2t6WRoBAschbdCS59g75H4TzpYdbs3dXb5o/CzVUNHC+dZMpbbOB?= =?utf-8?q?IF41dp3ENbKK+R3GpmWKgvRtrRvnsyAEkp+rc60ClP+x8o/5aJ63WTWaOa9tnsKs0?= =?utf-8?q?+o81hj4+jTqzkRl9gWRa0+t9WpKdg8AVF+FCgGgi0Sf5pplwXPoUL835M7gfDlJD1?= =?utf-8?q?nhF9sE55gFirflUOQKyr27pKsLCOGdGMcVl/tbIMSWBBsI4bAFayUoiVl2E92OWMt?= =?utf-8?q?9zdgQdgtO6K5dHXQf1+9WezM+FgszlHOvYi0nHHCdOLnHeGOl2JRcg+wmns0ImX3X?= =?utf-8?q?UPj5Y+Fdol7WqVrfPVkzRTb9/oCwfCVQCI+67qLLHT835VTK9OGIRf4SXd/Vy5+/T?= =?utf-8?q?MOjyc2WACHjK?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 25558d55-69be-4a6d-07fd-08dd7cce8c8b X-MS-Exchange-CrossTenant-AuthSource: SJ1PR12MB6363.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 16 Apr 2025 10:07:52.1049 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: /n96e9gngxoCh9ksI1rS9Qr2ZOAKZJyZAGi7+5Ub6PKbI451kjCr0uqZp7VbCdMaSdmTsBmA0HXCvtvIQh7BTw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH7PR12MB7209 Currently ublk only allows the size of the ublkb block device to be set via UBLK_CMD_SET_PARAMS before UBLK_CMD_START_DEV is triggered. This does not provide support for extendable user-space block devices without having to stop and restart the underlying ublkb block device causing IO interruption. This patch adds a new ublk command UBLK_U_CMD_UPDATE_SIZE to allow the ublk block device to be resized on-the-fly. Feature flag UBLK_F_UPDATE_SIZE is also added to indicate support for this command. Signed-off-by: Omri Mann ---  drivers/block/ublk_drv.c      | 18 +++++++++++++++++-  include/uapi/linux/ublk_cmd.h |  7 +++++++  2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/drivers/block/ublk_drv.c b/drivers/block/ublk_drv.c index cdb1543fa4a9..128f094efbad 100644 --- a/drivers/block/ublk_drv.c +++ b/drivers/block/ublk_drv.c @@ -64,7 +64,8 @@          | UBLK_F_CMD_IOCTL_ENCODE \          | UBLK_F_USER_COPY \          | UBLK_F_ZONED \ -        | UBLK_F_USER_RECOVERY_FAIL_IO) +        | UBLK_F_USER_RECOVERY_FAIL_IO \ +        | UBLK_F_UPDATE_SIZE)  #define UBLK_F_ALL_RECOVERY_FLAGS (UBLK_F_USER_RECOVERY \          | UBLK_F_USER_RECOVERY_REISSUE \ @@ -3067,6 +3068,16 @@ static int ublk_ctrl_get_features(const struct ublksrv_ctrl_cmd *header)      return 0;  } +static void ublk_ctrl_set_size(struct ublk_device *ub, const struct ublksrv_ctrl_cmd *header) +{ +    struct ublk_param_basic *p = &ub->params.basic; +    u64 new_size = header->data[0]; + +    mutex_lock(&ub->mutex); +    p->dev_sectors = new_size; +    set_capacity_and_notify(ub->ub_disk, p->dev_sectors); +    mutex_unlock(&ub->mutex); +}  /*   * All control commands are sent via /dev/ublk-control, so we have to check   * the destination device's permission @@ -3152,6 +3163,7 @@ static int ublk_ctrl_uring_cmd_permission(struct ublk_device *ub,      case UBLK_CMD_SET_PARAMS:      case UBLK_CMD_START_USER_RECOVERY:      case UBLK_CMD_END_USER_RECOVERY: +    case _IOC_NR(UBLK_U_CMD_UPDATE_SIZE):          mask = MAY_READ | MAY_WRITE;          break;      default: @@ -3243,6 +3255,10 @@ static int ublk_ctrl_uring_cmd(struct io_uring_cmd *cmd,      case UBLK_CMD_END_USER_RECOVERY:          ret = ublk_ctrl_end_recovery(ub, header);          break; +    case _IOC_NR(UBLK_U_CMD_UPDATE_SIZE): +        ublk_ctrl_set_size(ub, header); +        ret = 0; +        break;      default:          ret = -EOPNOTSUPP;          break; diff --git a/include/uapi/linux/ublk_cmd.h b/include/uapi/linux/ublk_cmd.h index 583b86681c93..587a54b3cfe1 100644 --- a/include/uapi/linux/ublk_cmd.h +++ b/include/uapi/linux/ublk_cmd.h @@ -51,6 +51,8 @@      _IOR('u', 0x13, struct ublksrv_ctrl_cmd)  #define UBLK_U_CMD_DEL_DEV_ASYNC    \      _IOR('u', 0x14, struct ublksrv_ctrl_cmd) +#define UBLK_U_CMD_UPDATE_SIZE        \ +    _IOWR('u', 0x15, struct ublksrv_ctrl_cmd)  /*   * 64bits are enough now, and it should be easy to extend in case of @@ -211,6 +213,11 @@   */  #define UBLK_F_USER_RECOVERY_FAIL_IO (1ULL << 9) +/* + * Resizing a block device is possible with UBLK_U_CMD_UPDATE_SIZE + */ +#define UBLK_F_UPDATE_SIZE         (1ULL << 10) +  /* device state */  #define UBLK_S_DEV_DEAD    0  #define UBLK_S_DEV_LIVE    1