From patchwork Mon Apr 14 11:44:04 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Jared Holzman X-Patchwork-Id: 14050248 Received: from NAM12-DM6-obe.outbound.protection.outlook.com (mail-dm6nam12on2078.outbound.protection.outlook.com [40.107.243.78]) (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 6DC3D26E15F for ; Mon, 14 Apr 2025 11:44:31 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.243.78 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744631075; cv=fail; b=JG4hD/81ZHz+W5iMglvPlLtaNDVkQUjTwjMEd/D7NeHhWc03B6NQRzSWn2WT6cwclCL7fn1/x0C4NulWz8Pvnqj+bk3LjokZKePJlW45UdqzNdDQ5jQAq2CWDUWbeU5j4sJF7OVHIcKYKqQRlZZnfXY65S4WMFaMU9qIieDCiDo= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744631075; c=relaxed/simple; bh=N+g6T3Mth5ioZuslbUygeay1juuthkKmWOMUcz9FknA=; h=Message-ID:Date:To:Cc:From:Subject:Content-Type:MIME-Version; b=CTwM+He4HvTKO6S+ZIxVheXyeWHsZMzb2BBxGyFaumaBOel7UgGC8yyhp28X3cnSFCinegsH9AAxinS5egJ+pHG+6QqWT0K1SLNWwWGV63DmsKyutboIJz2bMnS+fEb7fy9F/VPzqmezxu6vmaXU5otrgl/j9Er4hb4VODdakS0= 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=Zq2c4741; arc=fail smtp.client-ip=40.107.243.78 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="Zq2c4741" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=u7LXiLOuX3lCmXdHjr+zpoDecGhb/ki6GHhefcdu4lFQhCDgk85g24zdpr/zgVWd9JwsZFIW85AIfnH71zVrJ21QvqGN2YuC5RzhPaqBuGQ2Ek00p5Vkx3+SftEujdUne5ChmozUPBF6q005XEWDLGz+hP6LWFKgH05f40L+btQRU2rIVbFxHl3GIteRE5cv/UazSbFHOV5mWvw8ipb81yme9ZR5CkmiKRvxX6zJ0pduChg3Cb4zfVvNj89qLbozvu8u5XWdeHlYFozW0r4pDtXtNPiieyjjNmOFaOTg4omThBafllIMbhpAdUWNzHA7Wri35Ra5Z7H7VWYCpIhegg== 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=lZep1AtpiZOLTUUWtox1jhFbv0tkHiOSnXWs7QoaOTc=; b=YV/E2ev66orNTbwrNiOu1sSR0fnu7KEw191RliyNScfVNj/6J96V+fmcBmHLBVh2O7tcE7PnCFR1xpcIAIjcAfJ4B7VVm7FoUHooYxd+j910n/JffxXgfCDZDvFsT5/gpeiRNLirNoJ9Ig9zcT9qJ1dPEdPtWse3tbMsAlac3LTdjkX4VWjLK+J+lHpVIyuM1/npS1a7kl0oIYO0J0s0XM8nunbIBt0phvInJzc81ZTw5J1v5Z35I+3D8ZjSLcGhXvukcEKpqEgCHSkYlghvzEHLyAmYVWcZCPgDgcRV605BrvcXZLtYf9TRm1WieKcA+rHUNx8kV2t7U/n37qPoAg== 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=lZep1AtpiZOLTUUWtox1jhFbv0tkHiOSnXWs7QoaOTc=; b=Zq2c4741GAQjb+KeOsfJQhvgP5JSh6UFGySSDYeOO2kkdS8AnkgEQYdZ/O4NnnKOpAhKj3VjRoV+DqHtQkdj27X76mzcAyYzF+yLM9xJikOwMaj6RoEgqSQIzGsV4CwH8iMniU17R0/zn+1OXDbuw4wSlXgskYO5KCcOQSI/FEtz9pwBgzZMsoNNFmC753naBMGvNKEuptkdsJV4QrJQjFpdSoClhoMwuAEuEubjg49i7ohNOocvwFrXM/E8TBF5ZYpNJkR30OXDCHJvu9Io+DUKwRNkotD3lwjtFueKPMExVKtcwHtigkPHpwlwQLqMPOEZ7AGaf1ey4YN+1oRABg== 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 PH8PR12MB6674.namprd12.prod.outlook.com (2603:10b6:510:1c1::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8632.34; Mon, 14 Apr 2025 11:44:29 +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; Mon, 14 Apr 2025 11:44:28 +0000 Message-ID: <36ba7ff3-ff0e-4db1-acb1-8e7a60a427cc@nvidia.com> Date: Mon, 14 Apr 2025 14:44:04 +0300 User-Agent: Mozilla Thunderbird Content-Language: en-US To: "linux-block@vger.kernel.org" Cc: Ming Lei , Jens Axboe From: Jared Holzman Subject: [PATCH v3]: ublk: Add UBLK_U_CMD_UPDATE_SIZE Organization: NVIDIA X-ClientProxiedBy: LO4P123CA0402.GBRP123.PROD.OUTLOOK.COM (2603:10a6:600:189::11) 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_|PH8PR12MB6674:EE_ X-MS-Office365-Filtering-Correlation-Id: 1d3eb89f-b03c-43dd-85de-08dd7b49ab3c X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|376014|1800799024; X-Microsoft-Antispam-Message-Info: =?utf-8?q?0cbjjgJkHYOseii3RHi2M3XeQDErja6?= =?utf-8?q?BZ+ZhxoBnZGkv0V9VXwoma5XrfvPUOyn8UFIojSnEuXzbvWJ6V62xa1m88dhsFher?= =?utf-8?q?XQsMkdE6nNOKe1pNMi+C8JBEkSe2te39t9BwJPHWShdxFx14EE/30V7XMrPvS/x4B?= =?utf-8?q?v00YImVy/HMl4zSFRvBFewsmgJRVKjYQBucR2MeCIM6lmBCprmSi72lI/IIagWDsi?= =?utf-8?q?1CEN5ODEOHbYJ32khfeU8/WqPdVHmxHJQbotpcDCcisPpjYFfBuORs1rf6/0TcLkG?= =?utf-8?q?qERxaAg9SERP0se9Fj0K2R4DETBLmHCbz5EuqVWi+/zBLk9jNEELEghn+aJ25dr4Z?= =?utf-8?q?D3F8vfHtBaBCpx8gRJg2/XgncTH1eMnkazip567HqARW7eMM91ImECcCKJELzTkpa?= =?utf-8?q?Cbq5q5DXCX+GKVxvAl2EXKa2e4Fr2UNOjtxZ69gcLCji5iSC5vfu7N9h+NumoW+1i?= =?utf-8?q?EDhfC6p0vh4HCZc0FNWjDv6TQQKfZo8m8NOS1LBKi1M1O+czv/j8VXRbqawO6biT4?= =?utf-8?q?2R60DxM0pq9JaNlxP5TObJLA7XJDWd5alYYrvIAR2bJyRPwr1gluLFPE6Tq/Ow3lK?= =?utf-8?q?uUYMBPiSzKkXPsPRZBs5GXgFDqAQ8EdTJJbXlgqPaNWasbyIjxBPRjULpy8RYntIp?= =?utf-8?q?LGq14nj7c0jY+Jtx3iwDuhL7BS31cs4nQu4MrQGvHzs5LQzEK8zGDxo2d7dPElcXx?= =?utf-8?q?BGRMvgYqJnaoOjJEUwzqpBifP8BLY792hfixD8cj15DRwCQVcaz4wirgTJeDmp3w0?= =?utf-8?q?nqp5SmFyEhGDCvToQylz1nQQ6jJZZ5UtjYzPsTtQ+Clu08h8xE23nPS4GSoXCk2DM?= =?utf-8?q?E9wECxL23RLzWujJLwD9eEXi80YQANkrpuhMmrWp9KLqbjXtXfRAmWRZDKBJfBcwv?= =?utf-8?q?iCrJmurGYTXch9XaqfQ64EqiGaNxnRjiaLWyh5CbQvMZxsRqfgruR/uVJ++PkT1Tm?= =?utf-8?q?vaYQBm4GT26jI1hF2g1fhbvU2Qa5QdkK4UrQz0ipRaH0q5LPy/VpWRwAgBoegAQmy?= =?utf-8?q?SOSTfB518OKcB1BloNHooLf4tg0RKvcxeJT+7/rAo8ccXt62CV4tvO2FB1lI/8r3Z?= =?utf-8?q?2wxwIiBtG0NHmCB3nPIzmsrPiNxmASpMoKecLqulgfWoj6o73miJJZpivMqgP9btz?= =?utf-8?q?PN/sWuk4f9oj2N5zjjWoBYFJzQGQoANHLIpZ693eCkHQclbIX78jZin9P5oBolQZU?= =?utf-8?q?cBocG5+Vnkv1sAw9gDGzA0vbTEAxl8GpmKeBnmH1ERusFCvgDf9tresjVM0sQoVxd?= =?utf-8?q?o4zP/9ClKfYf09WC3kO02d9EQLch8pJ6ifpqL27QK45e7nB5rXAgb1sqX0KKsQDXW?= =?utf-8?q?NGRN76qSw+yfTPpy8q6WqSfVCoYT/qWD4Cmm11G/tfcGkZisf93LiNA=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)(366016)(376014)(1800799024);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?q?irPPKrRVBOTAJ8uz43KfCGO0KMyP?= =?utf-8?q?Gw133IsU/tOBBaE/hC42x+lCOIbGgynlCt/cS/FJBod5eaRMgrmiKjGH+Ixb4QB+w?= =?utf-8?q?L9R4FM4BhNPPOhcKiOvVx/ZGp+xTmEcF3lKiQkC1OqoS8eKz2z5pzi7Vquy/FLs+d?= =?utf-8?q?Wxpg6cJsU/ccjrWLixJ72AKNTWPmKE1Sk5A5V1Dyf/FycS7P5lklZxsqPrEvSKdxN?= =?utf-8?q?tXSMZ1DAr6mrdBkHNxmaPilH1sL4JVIvzcreV5SDjUMr3QDOu2gvv205h8hTHcI/C?= =?utf-8?q?17WvM+IbTmLqDkVEuiiZIqVdG4b21wCCH5HPsmh0WJEO3XHhVc/USZ+3Vh6ewEfUw?= =?utf-8?q?pdtlkvEpX7PRRmh5JPaHkkcMOS426P4QblcaDKtq1BbhLtk3mAGt6BzZXyWMa7Ft/?= =?utf-8?q?rpfN3NkDznEjeupRKOqN0kGfqF151GmiVzOMjYfU3d2ol2PcKvXyBz5I8uIIb63e8?= =?utf-8?q?gCDw0tstUUgdUWZa8GZTfWYGy4oYiWB9GA1ZPsRLGCLC0KspanHtIkUgNe4+45/yN?= =?utf-8?q?q6VVbjg4lT7l492yEcKCfe8W7XH7ZubSoaxAiW4bWcxHSYMGQq14OmuFajjRMJsel?= =?utf-8?q?7dqxHoPITkLfZuqDdQu6M+f0ryFQrUkQTbCQzQQeK8ZCQJ/biLd/YWQFi95w2dCh/?= =?utf-8?q?HlncJH4MVVXYXuhvcS08KYUuyCiiBL4N953eH5d2VvsVEBzrS4EcIMD+DqWjqoaeM?= =?utf-8?q?15qTdyGSkkZtoBE0OTEwPDVj/4OWa1iH+Chm/olW3ArmYVWS8YLjsavE0qoxAOCxv?= =?utf-8?q?euawOYwCkowkh+X0pTpaU98TublKfFNCFTtsYVnBGTMXyLZR7OZb5hA8KNHBbIKlP?= =?utf-8?q?iQcGum2XGn0ImBHRHw9J6W5DsGowWmFeDtTQ3FDylCoKYktjZBasVFp1YKlX8HyrV?= =?utf-8?q?Qxgw+o6dJqAfGgfMrFlMUmzYY8v7a/NtZ6LwTsCgQfVPOHtAwvyxByz6BqkABbQtt?= =?utf-8?q?B5920X+4dSZ4yzcslsCLCbhLO2BlX05Wo6gEDJASeajELOPenZkICdSscp/7E2pl/?= =?utf-8?q?6bKEVjsws4b4fEzr9sfgAVgLog/SEjMzX4ewgh92/U0DloT2aqojDP3gG2Iu6sSYa?= =?utf-8?q?AZ+VVQv0Nw2o3sVGipWu+a5zXxb0dc1R1wAzQQ3t8KkJQYst37+flL/utwD+vPpar?= =?utf-8?q?OCk0q5pDT9FnA8IhKnOLF1QlLJani+5+JzpmDd/JCN7nGXmsftwVO27i0kW+0etyQ?= =?utf-8?q?gQC25Gr7P/eckG7sx9Fc7okTf0iha4MEL6crZu9zuuMuP9LyjBZ+U4qw2Z6Ty/+wa?= =?utf-8?q?jB9rwhRyhIS1QSY0smA31AnqrxzVQ0ZuGLDHCUgLn8K7yN7gnlAK6dni7EoUm2D9U?= =?utf-8?q?KPVt4cnsR61M31FOHIBZJ0k2/PofVVgwptwAJH0T1IZigz+AbQH+tvVUz/8VuDlgP?= =?utf-8?q?zuh7SY/PpvS/7kFBX6AsnkINI5Nfnws4UEV1lptPsaUkgoBX7zyz89kc2MN94LsEv?= =?utf-8?q?QfybB5Ko1JdXI6YVaufvspRc8fXmachi66frMfnMV6ZLLfNz5grnkIl8mJvRf5Bfs?= =?utf-8?q?DYjqNI0+QCaX?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 1d3eb89f-b03c-43dd-85de-08dd7b49ab3c X-MS-Exchange-CrossTenant-AuthSource: SJ1PR12MB6363.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 14 Apr 2025 11:44:28.7514 (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: rJ2Z0cdMbCs0dMk+XDRYdjzfxb99CGOUgLxoQR4BOSI64EvSP5hipuMl3N38gWD94UooRF7CaHXN2HdLlYTrpg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH8PR12MB6674 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      | 19 ++++++++++++++++++-  include/uapi/linux/ublk_cmd.h |  7 +++++++  2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/drivers/block/ublk_drv.c b/drivers/block/ublk_drv.c index 2fd05c1bd30b..2a8d8b864ef9 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 \ @@ -3052,6 +3053,17 @@ static int ublk_ctrl_get_features(struct io_uring_cmd *cmd)         return 0;  } +static void ublk_ctrl_set_size(struct ublk_device *ub, struct io_uring_cmd *cmd) +{ +       const struct ublksrv_ctrl_cmd *header = io_uring_sqe_cmd(cmd->sqe); +       struct ublk_param_basic *p = &ub->params.basic; +       size_t new_size = (int)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 @@ -3137,6 +3149,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: @@ -3228,6 +3241,10 @@ static int ublk_ctrl_uring_cmd(struct io_uring_cmd *cmd,         case UBLK_CMD_END_USER_RECOVERY:                 ret = ublk_ctrl_end_recovery(ub, cmd);                 break; +       case _IOC_NR(UBLK_U_CMD_UPDATE_SIZE): +               ublk_ctrl_set_size(ub, cmd); +               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..0e40e497c28f 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) +/* + * Resisizing 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