From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail.openvz.org (unknown [69.168.225.77]) by lore.virtuozzo.com (Postfix) with ESMTPS id 16F5A8015C for ; Tue, 15 Sep 2026 16:02:22 +0000 (UTC) Received: from mail.openvz.org (localhost [127.0.0.1]) by mail.openvz.org (8.14.4/8.14.4) with ESMTP id 68FG0vHm006060; Tue, 15 Sep 2026 19:00:58 +0300 DKIM-Filter: OpenDKIM Filter v2.11.0 mail.openvz.org 68FG0vHm006060 Authentication-Results: mail.openvz.org; dkim=fail reason="signature verification failed" (2048-bit key) header.d=virtuozzo.com header.i=@virtuozzo.com header.b="fIhV+6IR" Received: from mail-pj1-f71.google.com (mail-pj1-f71.google.com [209.85.216.71]) by mail.openvz.org (8.14.4/8.14.4) with ESMTP id 68FG0ssh006056 (version=TLSv1/SSLv3 cipher=AES128-GCM-SHA256 bits=128 verify=FAIL) for ; Tue, 15 Sep 2026 19:00:55 +0300 DKIM-Filter: OpenDKIM Filter v2.11.0 mail.openvz.org 68FG0ssh006056 Received: by mail-pj1-f71.google.com with SMTP id 98e67ed59e1d1-38e8e864ef0so7954169a91.0 for ; Tue, 15 Sep 2026 09:00:55 -0700 (PDT) X-Gm-Message-State: AFuF++lLCfFfy6ib+WRKmYkguDuYJpk+J8Dc8Z3sUzj7NZU2erKGP2dy xoypIGf9H+q6XRqQmLWsTEYoTUsDvSCYX/7lQLrYUytyATQY6LxSStXQCZiCSLs4KiiT57wrVj5 ISp3M+qZxx94kG4uXUxIDphH9OgBKIbGfUE3lRTCduPlKe3eG3fS/Ug== X-Gm-Gg: AYBFou3GioUpC61O4hoKGVqZPLgduHFMEEFSdJfRasdjU1UHvwQiXaLpXi+KX94125T MaTRmvx6KHgOxt3nim2/tlwRw98cZJLIOzjM0OPWHgTfqKchVXgbdnqACwbAmkSKPmGLNeCNPAC gdKvF1epF4Y9qUDfzFZkWaiMYV/C7XNFKnKuwSYwkVjiCd0AHKo79cVRf2ukq966JZ4cAVnolSt izysANM3rsdpLjmGGO0krp6CnKqQ7iWB+Y4RpG21uSSrbPRPJoDUoIvnbwec9HCa3HzZf0nznOE n0cNGCCdScq0Uued1p8sCCw2hn2pHGQEDUKsa9/zOBGk9tSDz6Bg+gqsJghlsLEgYFw4Z7gyYLy VsLW8KV7NHgaaFxfq5Ntd4O+yjng+6REKnu9ljvWZ46s8jvjmRARizppHUlPwOZXYCF6tFdgoCW RYrwPiJW/zR1iKZwZQ0A== X-Received: by 2002:a17:90b:39cc:b0:398:c150:e7b3 with SMTP id 98e67ed59e1d1-39debf54a04mr18630409a91.4.1789488053821; Tue, 15 Sep 2026 09:00:53 -0700 (PDT) X-Received: by 2002:a17:90b:39cc:b0:398:c150:e7b3 with SMTP id 98e67ed59e1d1-39debf54a04mr18629935a91.4.1789488051611; Tue, 15 Sep 2026 09:00:51 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1789488051; cv=pass; d=google.com; s=arc-20260327; b=LrDXECTqMEPfQgVK6RtaEF7J8ayeyYNI7H0wtEVFKIsyyePQHZMzGNlxZpPHev1C4B WRuapoAbO4Kv1Fen65jJHnNxqm5qEp9LscxytIAER1+NLxKjs4pP69yWUDPeHM5kfBLL /sBikbFSitCiemd4IZjYb65NGbOXwKpi03Otj34Aw4wnJJ5Z9uXmvDd/Bfz33OX/JAed 6NLYyeLb/VUnrYbBJNNbGJzFErjJfvSTExnh6hJ6uH/YEspg6/RObi4GOGNFOEXg8Kic rQhkvaYRlkJ+18oM+gAGgdgT1Y1w1w7++0XEN285DuP6rCWjWeRZ6aGDXw4U2pimgz5k drmw== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20260327; h=mime-version:content-disposition:message-id:subject:to:from:date :dkim-signature; bh=np/KTA9igPmpdDJoVjqUKwRtyEcof5taAdVOoQmvZRc=; fh=DHZ2Y/hE6dhVx0UmP7zWEGZ5iFhKn/velJV5CC1BbgU=; b=OOkSlUlWH6phiVmxq42XwNnC4NNCA4cz7H8ZKI8OvdhBCsfBAKc0Kcf7t+iLjx7hhs sF70j22sIx7gPs20lxfvI5yJPr0B9EFzNPzTQITDH/xUv8PPQRt5EGIcIdac2Rir4hGt XZfXMf/ymfzX6HRF6ozyc1XDBwj8AgRMrhs3jQAECKUTSijRoGxKd1Akw4zkM4naHHgN q3DB87ySU+tWYqPCujUYr8WpE1OrCD3y9gMX1vhY0qruG90EbONOc27CvCdGT2OIILzy a1TeMiF5uKJvElux13kLTehW9qNa/Zyd5g86j2Mf1b82TEpxeTWsyCWG65326Pjw2ehL 9J3Q==; dara=google.com ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@virtuozzo.com header.s=selector2 header.b=fIhV+6IR; arc=pass (i=1 spf=pass spfdomain=virtuozzo.com dkim=pass dkdomain=virtuozzo.com dmarc=pass fromdomain=virtuozzo.com); spf=pass (google.com: domain of kuznet@virtuozzo.com designates 2a01:111:f403:c20f::7 as permitted sender) smtp.mailfrom=kuznet@virtuozzo.com; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=virtuozzo.com Received: from OSPPR02CU001.outbound.protection.outlook.com (mail-norwayeastazlp170130007.outbound.protection.outlook.com. [2a01:111:f403:c20f::7]) by mx.google.com with ESMTPS id 98e67ed59e1d1-39dfdb152d5si8092927a91.5.2026.09.15.09.00.51 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 15 Sep 2026 09:00:51 -0700 (PDT) Received-SPF: pass (google.com: domain of kuznet@virtuozzo.com designates 2a01:111:f403:c20f::7 as permitted sender) client-ip=2a01:111:f403:c20f::7; Authentication-Results: mx.google.com; dkim=pass header.i=@virtuozzo.com header.s=selector2 header.b=fIhV+6IR; arc=pass (i=1 spf=pass spfdomain=virtuozzo.com dkim=pass dkdomain=virtuozzo.com dmarc=pass fromdomain=virtuozzo.com); spf=pass (google.com: domain of kuznet@virtuozzo.com designates 2a01:111:f403:c20f::7 as permitted sender) smtp.mailfrom=kuznet@virtuozzo.com; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=virtuozzo.com ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=Be7a7DELht9qUezQsWZ7XSThGAIZ9zWS1FEySJLL6dk3/rPFxNL63ooQwP5KN63KT1gQEpRGNDTMTyWOGMlYBoY/5+fkBLuhRFntyWvjXWFZE/62bphv2IUkIk8jQqNQD6373IyHuJ5bBL0YrnVtE5J0nPH+2OmJgvmypWW4CwHXJDjX9yWt0uxpeTUVttHKwz9pP1/nfzrBj3IV5f7kwoyw17ZigiEusGLEMXSgy5D2RhsdQwMYKF2oDcG5DBAprKrNtTmDRS3ddU3GXP0XSazKQvI0yNr05+/YeJEx07e2LfNt8C+dA9uj6MH1xLj3+ndvvsSYg/FU7B/WkqWGOg== 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=np/KTA9igPmpdDJoVjqUKwRtyEcof5taAdVOoQmvZRc=; b=NB8Q/pIyXuWjD58OD9B3xwd7ZLRiRUhxt8HjO0zkzPUfa7YBOEDLP5QZyPrZiPfbG5Bu+hHHW0u2dkVPWbCUyfXDNUlnhR/aH9lZSmuqayITnko8+iEdi6FBYuzoyU+rQ8Ly+AdD8WqBwr6hGapq+XuQT1ya84SLNjh13kFrFdLXUNizqLpH+dpj3qtul5A338hYUKVrTDnc1LaNbfrAyl9wG84/aNCTrCTMB1nIGaID7CAHPOJT1iaj1x0Eg7uJW6kPP5dzAMbhL2MUfXO4c9T1mTQDgXSDdQ2wUgtaQvYSMCMoWlGMUd4seehWOabTAK9ilZ+GBQ8XooKwtHUcog== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=virtuozzo.com; dmarc=pass action=none header.from=virtuozzo.com; dkim=pass header.d=virtuozzo.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=virtuozzo.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=np/KTA9igPmpdDJoVjqUKwRtyEcof5taAdVOoQmvZRc=; b=fIhV+6IRwH0MXsWWyYKnNKxXEkocWKuaoe7hGE7A+X/vxEL6ABbmMtNXVSJ59cvrFR0bGYNlCjLlpQ8T55wJWIApHKXcNXYbmCpXLGFSMqSOLtj0alaWLnvyl0AhtOUOT5rKoR94saojRX3jmu9Ia8ZhrYI+ZVh9x+AconR0goiXLPiL+840Lwz5p0hqMTzBsyGU7hKL9eDDvMrXfoJsLHVdDfq3efWwDfx3jonD3vWLKqXBkWibF9WYWXY5xrIYhxJoDRsYXQ3DO1ebvxD/7WWMB0n2iHx2u5QrF0aojpsHlJoTQhv6H/x87mvDcS587ZKY6wOt348+8ALjL3cqBg== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=virtuozzo.com; Received: from DU0PR08MB8254.eurprd08.prod.outlook.com (2603:10a6:10:412::11) by MMZPR08MB266317.eurprd08.prod.outlook.com (2603:10a6:190:54::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.428.9; Tue, 15 Sep 2026 16:00:47 +0000 Received: from DU0PR08MB8254.eurprd08.prod.outlook.com ([fe80::66a7:414d:72e6:4327]) by DU0PR08MB8254.eurprd08.prod.outlook.com ([fe80::66a7:414d:72e6:4327%5]) with mapi id 15.21.0428.004; Tue, 15 Sep 2026 16:00:47 +0000 Date: Wed, 16 Sep 2026 00:00:29 +0800 From: Alexey Kuznetsov To: devel@openvz.org, khorenko@virtuozzo.com, kui.liu@virtuozzo.com, azaitsev@virtuozzo.com Message-ID: Content-Disposition: inline X-ClientProxiedBy: SI2PR01CA0040.apcprd01.prod.exchangelabs.com (2603:1096:4:193::14) To DU0PR08MB8254.eurprd08.prod.outlook.com (2603:10a6:10:412::11) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DU0PR08MB8254:EE_|MMZPR08MB266317:EE_ X-MS-Office365-Filtering-Correlation-Id: a809dca8-0aa5-4b95-f76c-08df1342818c X-LD-Processed: 0bc7f26d-0264-416e-a6fc-8352af79c58f,ExtAddr X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|23010399003|1800799024|376014|366016|3023799007|10067099003|56012099006|5023799004|18002099003; X-Microsoft-Antispam-Message-Info: PdyzJRv5UFFCQmrjg8Uc8DLAdsB0OgrV0e2NoiQOBp1Fi3BxLV4yEOZyTZ9YxALeW8qMLkJ/wRtPNPFxhs1jTNZF+StnAAPVIsLMkJtHDVE9WXpMZLz8hJS4Ny5Ya7vVb6u/KM7clhB4gv3G5ctuQCQwjdiaLILceCw06cqUH6yDKtkDKaDx6az6ufOYgd2YGPGiyi10+d0UBUhWZnHBO+eQgOnpvrybRNabWMrWz+grhv2Gj2Xl7qfRCKt89HNXEym3Mt2bbpO6nq9EqSqMmG/pm+y9gsMoYlHoL+jZ9MP6cPvBv1+0AsWh9G6N3DU3ProX5SbjDwmdBot7QBYUGTBQbY4qZH3yE1qg8W6/UxCWGhjpzBEd17dqPN3mEiUYTjDDn1Q68VhST62bmj7bpt3RQ1Xejj3LEZ4Cc9M8oxXNMdaXxmRXBYhhI+O3xviBLWdr5n4YfmP6ZOOU2+zrbUYVApyeS9VVDLEFd+AvOEn+m4UmoaxJclC48BLCW3bGWYmyEsuWezJYWATC+FRCVKzzx+N2hh6vwYk2tS1pElkX7bWTdePMbltXwQ20Vz3CfFf2Oe0b4oT8/n9uCN1augftTrI7Yv0hAowhK/rbWPuaP6WcuFsX5oNYUP/CcwlEhIU2wiZ5FBSusAYwAYBD5bMMEAvlB+SSF4Wu+9n24sc= X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:DU0PR08MB8254.eurprd08.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230040)(23010399003)(1800799024)(376014)(366016)(3023799007)(10067099003)(56012099006)(5023799004)(18002099003); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?fnblkdNpwWlEX4Yoxeb3k9VjjlbGr12JQSmCRBxfZji8UbIRsQ8ZjCvGVTUA?= =?us-ascii?Q?y7TJavAbMlQ8H97WvoeXZgtiB15Byb9/CJW5KfTnW4wbKZNN62tHi+zI1Bqa?= =?us-ascii?Q?shmotPH0nSiq06+34h4JchJJrSKYnkAQPGBzEPM6AQoSk3FylTZmRLWfzlK0?= =?us-ascii?Q?eulbzsnq10u/rXTuOngIGVjtJHmD5MbDc/QzLR1utFxeRK8Qyb38TVOvS72n?= =?us-ascii?Q?CfXjIyz2XD+v5SPVpQ7bi/vLcbcSWXdeJayCpQxmSKkG2gNZnKu3XPVArgKh?= =?us-ascii?Q?8shhCwmeWhiJVR383bT9p+UEYYBJYWBV0nG6hLuNng100VgBWhnxQrt72yru?= =?us-ascii?Q?KB4HmE3PXL8heg4ecfN01LrVCXc2r6pYu2vqTw8OiFcm4vMiumE0KRnohUCD?= =?us-ascii?Q?WGXJSGTA1lyWhOmNkh2Vx87RYE9SihKqVebgManzkO4EmYWJIDii/6h+yy2T?= =?us-ascii?Q?0T0welcy1uQ/o2dqHs/6o5yJXcA1VfC3Ne+DBPiOLH7GtlKhvdkyWsfaCcHA?= =?us-ascii?Q?9anoTNfjv+J2OcjuYJ2ri5wP5keeFPqLwUMYt6BNthhsCa7npLl8sDJbmmUy?= =?us-ascii?Q?Juy7WK2ys+xEP/4QnxgCA45A7PAiL3ouAWRqQ/Cz3aOBqLUMTyOP4x/QOW34?= =?us-ascii?Q?OYibsR8X728RFdUYsEuk5s/8DFilFGfJiulet4dAV09KpmKLp/Bx/6AXjxQQ?= =?us-ascii?Q?lC0rh+uTk1RXJm6KyspKcSD1mqgrXKg6S1WJHtaIWzVBEBlmVcxkkKhwKj1y?= =?us-ascii?Q?2viW5EKcG9/TRRX+qw8jRvtc8zN+nBZaiar3W++oIkf0ZZ6XxMAbfMd2MqSx?= =?us-ascii?Q?ecnmf/IkapMncAV8QAym2Gp2+98qcEnUku6puaMpJpwocVcvJt4IuIbjhah1?= =?us-ascii?Q?Hp+EjwX77KAQq7BelFw5yOCatdnepNqgpV8gomovHGu619RyRf5W0pSn21C6?= =?us-ascii?Q?HCDUbAAKTtheaOkeZiIdl+k6C7/7ezAQgUFc8XNIyj5vltco3d4pXeaQ0pUY?= =?us-ascii?Q?EF3Ujm3DmsRQv9QRx/E7ah/Yx466uQ64XN3W7vH8F2wFZg0nhvpSwLoD9Ecy?= =?us-ascii?Q?anjM/dgwlDVaYUib3lBmNy8apylhz8gh1HyoQ9IAj9y59NrS3GwW1KCLJaWW?= =?us-ascii?Q?fKJ8oksQdS18eaIl/VEgV/wMgAw6YEKspDpmRqjg72E/v5wx05xHNM+XmV7e?= =?us-ascii?Q?HsoVWgmkadTRLrTCOzgv4l0bFrGMr4sk2ktE292O7s21ZAPlnPT0vntOzPkV?= =?us-ascii?Q?Jp39ChB816LVpcstAjeMn+gInd3pvBC87ara/ubiyGJ8n7iEtjmck20FEQew?= =?us-ascii?Q?Bs5ngjh9l7fd1lybeWCmqabHaOA3hdKH/VD3r5GHdhfSZlwXA5PcXJsZALwn?= =?us-ascii?Q?0Dud2SCc5eufQi6Ap2LAD9F09nMdByJesBe8c5Z3eOEDTtKuHc7NEBq3Gor1?= =?us-ascii?Q?uKH++PwaM2JE0flPKsdmf5KGWO4L1DBawAFV71ZixWmGTCJAbYm8YqwOipl2?= =?us-ascii?Q?NyOB/3rfPyV9H4ZQ+l8tk2DTr0u34scFzOrmTul0FngNEdopXO31pLGPI2rt?= =?us-ascii?Q?BIAl3LQhAN53918hxGuaJpbaN/d9Kvgzf5D7/Pv3txkWcm3aAZEzBFC4rpeV?= =?us-ascii?Q?WJHpGjviXskuF83XQd08GghlXSfIGFdPdJqBpwLcEOZ3UWDCWi/C4uVjB647?= =?us-ascii?Q?MWiJaoIr2SpPzcejm2DC6xlFuzE6at2KmgxHp499Sj0DLHdryzwIbXYPjrBP?= =?us-ascii?Q?CUpbExXRag=3D=3D?= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: a809dca8-0aa5-4b95-f76c-08df1342818c X-MS-Exchange-CrossTenant-AuthSource: DU0PR08MB8254.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 15 Sep 2026 16:00:47.6412 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 0bc7f26d-0264-416e-a6fc-8352af79c58f X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: 8s5RyDAu6CFsS2E1XGWJIK7G8K73ZMzvZm2dQcrVbTjw6mBow5w6hQ7Ye7TmIXp1F8qFxQoShxqKvsB4j0iNWQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: MMZPR08MB266317 X-OZ-Fwd: true Subject: [Devel] [PATCH VZ10] fs/fuse: strictly segregate vstorage features of generic fuse X-BeenThere: devel@openvz.org X-Mailman-Version: 2.1.12 Precedence: list List-Id: OpenVZ development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Sender: devel-bounces@openvz.org Errors-To: devel-bounces@openvz.org 1. Makes explicit use of option "close_wait" as specific to vstorage. The option requires some time to be fully engaged, the support should appear in kernel first then we use it in userspace, then we can get rid of original ugly way relying on special string name [pv]storage:// 2. Option "close_wait" is privileged. It cannot be used inside containers and ordinary users of fusermount are not allowed. 3. Our enhancements like multiple queues, zero-copy transfers, lease invalidate FUSE_NOTIFY_INVAL_FILES etc. are explicitly prohibited w/o close_wait. 4. When close_wait is enabled, we explicitly disallow to use creepy bug prone fuse features like fuse interrupts, resends, we reject all obscure notifications except for supported ones, which is now only FUSE_NOTIFY_INVAL_FILES and value 4, which will be dropped after old user space is washed out Affects: #VSTOR-144529 Signed-off-by: Alexey Kuznetsov --- fs/fuse/dev.c | 32 ++++++++++++++++++-------- fs/fuse/fuse_i.h | 5 ----- fs/fuse/inode.c | 58 ++++++++++++++++++++++++++++++++++++++---------- 3 files changed, 69 insertions(+), 26 deletions(-) diff --git a/fs/fuse/dev.c b/fs/fuse/dev.c index a9de0f815774..6a22fa73330b 100644 --- a/fs/fuse/dev.c +++ b/fs/fuse/dev.c @@ -2019,6 +2019,8 @@ static int fuse_notify_inval_files(struct fuse_dev *fud, unsigned int size, struct fuse_notify_inval_files_out outarg; int err = -EINVAL; + if (!fc->close_wait) + goto err; if (size != sizeof(outarg)) goto err; @@ -2048,8 +2050,19 @@ static int fuse_notify(struct fuse_dev *fud, enum fuse_notify_code code, cs->move_pages = 0; /* ASSUMPTION: pstorage fused doesn't use FUSE_NOTIFY_STORE */ - if (fc->compat_inval_files && code == 4) - code = FUSE_NOTIFY_INVAL_FILES; + if (fc->close_wait) { + if (code == 4) + code = FUSE_NOTIFY_INVAL_FILES; + if (code != FUSE_NOTIFY_INVAL_FILES) { + fuse_copy_finish(cs); + return -EINVAL; + } + } else { + if (code == FUSE_NOTIFY_INVAL_FILES) { + fuse_copy_finish(cs); + return -EINVAL; + } + } switch (code) { case FUSE_NOTIFY_POLL: @@ -2412,10 +2425,11 @@ static ssize_t fuse_dev_do_write(struct fuse_dev *fud, } err = -EINVAL; - if (oh.error != FUSE_OUT_SPLICES && - oh.error != FUSE_OUT_KRPCZC && - (oh.error <= -512 || oh.error > 0)) - goto copy_finish; + if (oh.error <= -512 || oh.error > 0) { + if (!fc->close_wait || + (oh.error != FUSE_OUT_SPLICES && oh.error != FUSE_OUT_KRPCZC)) + goto copy_finish; + } spin_lock(&fpq->lock); req = NULL; @@ -2438,7 +2452,7 @@ static ssize_t fuse_dev_do_write(struct fuse_dev *fud, err = -EINVAL; else if (oh.error == -ENOSYS) fc->no_interrupt = 1; - else if (oh.error == -EAGAIN) + else if (oh.error == -EAGAIN && !fc->no_interrupt) err = queue_interrupt(req->args->fiq, req); fuse_put_request(req); @@ -2455,10 +2469,10 @@ static ssize_t fuse_dev_do_write(struct fuse_dev *fud, if (!req->args->page_replace) cs->move_pages = 0; - if (oh.error == FUSE_OUT_SPLICES) { + if (oh.error == FUSE_OUT_SPLICES && fc->close_wait) { req->out.h.error = 0; err = copy_out_splices(cs, req->args, nbytes); - } else if (oh.error == FUSE_OUT_KRPCZC) { + } else if (oh.error == FUSE_OUT_KRPCZC && fc->close_wait) { req->out.h.error = 0; err = copy_out_krpczc(cs, req->args, nbytes); } else if (oh.error) diff --git a/fs/fuse/fuse_i.h b/fs/fuse/fuse_i.h index 8d90f43f01c9..21f873337627 100644 --- a/fs/fuse/fuse_i.h +++ b/fs/fuse/fuse_i.h @@ -669,8 +669,6 @@ struct fuse_fs_context { bool umount_wait:1; bool close_wait:1; bool disable_close_wait:1; - bool compat_inval_files:1; - bool no_fiemap:1; bool kdirect_io:1; bool destroy:1; bool no_control:1; @@ -1056,9 +1054,6 @@ struct fuse_conn { /** Does the disable synchronous close? */ unsigned disable_close_wait:1; - /** Handle wrong FUSE_NOTIFY_INVAL_FILES from old fused */ - unsigned compat_inval_files:1; - /** No ioctl(FIEMAP) */ unsigned no_fiemap:1; diff --git a/fs/fuse/inode.c b/fs/fuse/inode.c index ea158367a1ef..e70e0eedbb26 100644 --- a/fs/fuse/inode.c +++ b/fs/fuse/inode.c @@ -912,6 +912,7 @@ enum { OPT_ODIRECT, OPT_UMOUNT_WAIT, OPT_DISABLE_CLOSE_WAIT, + OPT_CLOSE_WAIT, OPT_ERR, OPT_KIO_NAME }; @@ -930,11 +931,18 @@ static const struct fs_parameter_spec fuse_fs_parameters[] = { fsparam_flag ("direct_enable", OPT_ODIRECT), fsparam_flag ("umount_wait", OPT_UMOUNT_WAIT), fsparam_flag ("disable_close_wait", OPT_DISABLE_CLOSE_WAIT), + fsparam_flag ("close_wait", OPT_CLOSE_WAIT), fsparam_string ("kdirect", OPT_KIO_NAME), fsparam_string ("subtype", OPT_SUBTYPE), {} }; +static int is_close_wait_allowed(void) +{ + return ve_is_super(get_exec_env()) && capable(CAP_SYS_ADMIN) && + uid_eq(current_uid(), GLOBAL_ROOT_UID); +} + static int fuse_parse_param(struct fs_context *fsc, struct fs_parameter *param) { struct fs_parse_result result; @@ -966,19 +974,22 @@ static int fuse_parse_param(struct fs_context *fsc, struct fs_parameter *param) param->string = NULL; /* Hack to distinguish pcs fuse service and to force - * synchronous close for it. - * - * libfuse is not ready for fiemap autodetection, so disable - * fiemap support check in advance for all FUSE fs except for - * pStorage. + * synchronous close for it. It is on way out, we are going + * to switch to mount option "close_wait", but this requires + * full cycle: support mount option in kernel, switch + * user space, wait till old user space is gone. */ if (fsc->source && (strncmp(fsc->source, "pstorage://", 11) == 0 || strncmp(fsc->source, "vstorage://", 11) == 0)) { - ctx->close_wait = 1; - ctx->compat_inval_files = 1; - } else - ctx->no_fiemap = 1; + if (is_close_wait_allowed()) + ctx->close_wait = 1; + /* If not allowed, just ignore. We can use vstorage mount + * in restricted environment, but with disabled + * features like multiple queues, precise metadata + * tracking and kernel acceleration. + */ + } break; @@ -1066,6 +1077,13 @@ static int fuse_parse_param(struct fs_context *fsc, struct fs_parameter *param) ctx->close_wait = 0; break; + case OPT_CLOSE_WAIT: + if (is_close_wait_allowed()) + ctx->close_wait = 1; + else + return -EPERM; + break; + case OPT_KIO_NAME: { if (!ve_is_super(get_exec_env())) return -EPERM; @@ -1118,6 +1136,8 @@ static int fuse_show_options(struct seq_file *m, struct dentry *root) seq_puts(m, ",umount_wait"); if (fc->disable_close_wait) seq_puts(m, ",disable_close_wait"); + if (fc->close_wait) + seq_puts(m, ",close_wait"); if (fc->max_read != ~0) seq_printf(m, ",max_read=%u", fc->max_read); if (sb->s_bdev && sb->s_blocksize != FUSE_DEFAULT_BLKSIZE) @@ -1241,6 +1261,9 @@ int fuse_install_iq_route(struct fuse_dev *fud, struct fuse_iq_routing *req) &fud->fc->rrt; struct fuse_rtable rtl; + if (!fud->fc->close_wait) + return -EINVAL; + if (rt->type != FUSE_ROUTING_NONE && rt->type != req->type) return -EINVAL; @@ -2182,17 +2205,28 @@ int fuse_fill_super_common(struct super_block *sb, struct fuse_fs_context *ctx) fc->umount_wait = ctx->umount_wait; fc->close_wait = ctx->close_wait; fc->disable_close_wait = ctx->disable_close_wait; - fc->compat_inval_files = ctx->compat_inval_files; - fc->no_fiemap = ctx->no_fiemap; + fc->no_fiemap = 0; fc->writeback_cache = ctx->writeback_cache; fc->destroy = ctx->destroy || ctx->umount_wait; fc->no_control = ctx->no_control; fc->no_force_umount = ctx->no_force_umount; fc->kdirect_io = ctx->kdirect_io; + if (fc->close_wait) { + fc->no_interrupt = 1; + } else { + /* libfuse is not ready for fiemap autodetection, so disable + * fiemap support check in advance for all FUSE fs except for + * pStorage. + * NOTE as of 260912. This might be not true now, yet this + * still makes sense. + */ + fc->no_fiemap = 1; + } + if (fc->kdirect_io) { err = -EINVAL; - if (!fc->writeback_cache) + if (!fc->writeback_cache || !fc->close_wait) goto err_dev_free; fc->kio.cached_op = fuse_kio_get(fc, ctx->kio_name); -- 2.43.0 _______________________________________________ Devel mailing list Devel@openvz.org https://lists.openvz.org/mailman/listinfo/devel