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 853DD8015B for ; Mon, 21 Sep 2026 15:56:48 +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 68LFtQ6t008494; Mon, 21 Sep 2026 18:55:27 +0300 DKIM-Filter: OpenDKIM Filter v2.11.0 mail.openvz.org 68LFtQ6t008494 Authentication-Results: mail.openvz.org; dkim=fail reason="signature verification failed" (2048-bit key) header.d=virtuozzo.com header.i=@virtuozzo.com header.b="a2pjkr8K" Received: from mail-pf1-f199.google.com (mail-pf1-f199.google.com [209.85.210.199]) by mail.openvz.org (8.14.4/8.14.4) with ESMTP id 68LFtNHt008490 (version=TLSv1/SSLv3 cipher=AES128-GCM-SHA256 bits=128 verify=FAIL) for ; Mon, 21 Sep 2026 18:55:24 +0300 DKIM-Filter: OpenDKIM Filter v2.11.0 mail.openvz.org 68LFtNHt008490 Received: by mail-pf1-f199.google.com with SMTP id d2e1a72fcca58-854f274dd69so3246760b3a.1 for ; Mon, 21 Sep 2026 08:55:24 -0700 (PDT) X-Forwarded-Encrypted: i=3; AKwUvBxw/UvRvmBtat1d3g9L9ZJrVIFJ/DpKUJWNCAg6eOD5XJn4SlVXugaeYgaB/Ad7VgrhA3MmGw==@openvz.org X-Gm-Message-State: AFuF++nC+MN9H5PQfMHL61AEg0cqdxzzpVa/rpVho8l0nzBVJQfkye3b BFNfaj1LiJORMnsUfWQqFjZB/ft+uK/WHGwgFXrI/GFQu2F5rhRGfMzf0Rpq4YR9HPI3wTsno/L YKj/MLj34DJWGULLDlvd8cg/XuX9So1MKNkeQLMo82n4At6uPIk8VeQ== X-Gm-Gg: AYBFou3gI/MPc+BqpNHw//ygjGjISDAG7KyEqMtFzVckCMpcDeA5vt7aah5zsKA5kLU TEyQ4LDT5GlcVEa1Lx3M9vMUQ3k6C7hPXoaXGWfyOZHzwzHl4i6uXs2kAouwy65U99fnnwSLPF7 wBDJb8noJwW7tWutTIrBjiar2amuzTSicWtOv+7oS69dLdZJMOhU0CBmxsACUftiSjb7cUdz07W NkR5T5hOqK0DLgBN0vUy75bolb/xTTA2t4W8zK/juokCPHbBx+Fjsy4+qPNOY6zsgrA8mjVvQIM +bV5F0ms4kq/eTMnXezk+LI9ZJWjz+XiStuWSurQW7QU8shMPRUkXyQbWgoXFXlD0P3Z6w2gcrO ymqG/TX7/Kbq88RXCfebuHuD7kuy0ACsRDK4khWfGeBjAwqbtrZvrecY00BwBP6TUmZbA08cJXa ehumNr7qcXkqSPP8SDEeIreQ== X-Received: by 2002:a05:6300:279a:10b0:3dd:a195:fa25 with SMTP id adf61e73a8af0-3dda195fd8amr6624400637.74.1790006123075; Mon, 21 Sep 2026 08:55:23 -0700 (PDT) X-Received: by 2002:a05:6300:279a:10b0:3dd:a195:fa25 with SMTP id adf61e73a8af0-3dda195fd8amr6624378637.74.1790006122551; Mon, 21 Sep 2026 08:55:22 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1790006122; cv=pass; d=google.com; s=arc-20260327; b=eMPyDeVoieP7uhe227YMnbKLUKr2KevZi1uf2KcItXkHfENYqjd+HmLK+s6M7/Vy2m Qst2doH4/Q2qaY9hA2YP1qJ/oFGIys8oszevSaJGrGpmMzf9U/LwjPdrGvwZzn+syRSa 5jAjjjOyYheeNwNf0PsUCR0qxa3ccGrlndx+/z5FsSMr3Vu7iJJfulqFj33F+rOAPZso bnwatQ3HQn+WRhLAK13GhzYQHp85JC1JMtAbh3bRiQluCkVMrrJCSZRTooVkL32GJQnS 42SCdnA7X15HbqmhpviecrclQrmBbAAJOP8/qeicXYs1riRClkiZz12D/niJJCKzMi/a 32RA== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20260327; h=mime-version:content-transfer-encoding:in-reply-to:from :content-language:references:cc:to:subject:user-agent:date :message-id:dkim-signature; bh=9d6/qivfjbmod7b2NgNTJ9FSzCtPgTta1NIQ6AbLReU=; fh=648212T30SenLTpCfcGpq7uy/UVbjRatXMWsQnIU/pM=; b=VgQVc/nWJSIlLnc/u7ZFxiTBbVio318KWO0ZGCegnOzlPFJxAb7IuWHfr/fzg/FSgA BGdHEk3roeMKLUMI7u4n/pNivKHpWn9STxDsvZ0H4ae4qMsfQgw/VP4t7ZUJ1wQV/Pst ZQF5kqdUuVoeyCu+NLFt+OBy4MGoA/tQxGgDBQyWBvY+wJHhPG+rwT841YCumPoHOUpY XAAQ1JcuuZ5n7kLn092VV867mf5CdWVG4xWCYTxaFRhyDEvGbE+t+TqXZbJY7vSsr2+4 XP+YkAxfBepj5heMLa+v6/JNUbChNjHPKZBBacNmSj74paPN8rSfl534cyznbAQKHutg jQ/Q==; dara=google.com ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@virtuozzo.com header.s=selector2 header.b=a2pjkr8K; 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 khorenko@virtuozzo.com designates 2a01:111:f403:c200::5 as permitted sender) smtp.mailfrom=khorenko@virtuozzo.com; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=virtuozzo.com Received: from DUZPR83CU001.outbound.protection.outlook.com (mail-northeuropeazlp170120005.outbound.protection.outlook.com. [2a01:111:f403:c200::5]) by mx.google.com with ESMTPS id 41be03b00d2f7-cc72b0d45fcsi13235447a12.338.2026.09.21.08.55.22 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 21 Sep 2026 08:55:22 -0700 (PDT) Received-SPF: pass (google.com: domain of khorenko@virtuozzo.com designates 2a01:111:f403:c200::5 as permitted sender) client-ip=2a01:111:f403:c200::5; Authentication-Results: mx.google.com; dkim=pass header.i=@virtuozzo.com header.s=selector2 header.b=a2pjkr8K; 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 khorenko@virtuozzo.com designates 2a01:111:f403:c200::5 as permitted sender) smtp.mailfrom=khorenko@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=pwWNfqD42ErUxDqtdTCTxlbzc5iarGkr7zluGaSqfiPukL4UtSxryKOozAesrSAgURRxGqMaVKgspMQO2DeF3/w9MTpCjF2GKwjULZ8hR5no5M/Ft2O46Maon7Z/dXdlh296y/A3fgFm9TO030MMdkR2z0Fmd+XQ6oS2X6vh6dW1f3vh80YcRDYRih2edhWrXRdWZmezUcK7otNVeTM1i9k+j3PsteNv/hn/5jp3GcA9loNI9JNWwOPK9sZPYaIo32G9nlxlQtFVUb6CfhvBKXNZmVG+UMenYHkDm8hnKfz784kiUxqJbsIH7tqfywr/CYqEQt88PLWC/75eZ7OWxw== 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=9d6/qivfjbmod7b2NgNTJ9FSzCtPgTta1NIQ6AbLReU=; b=dbrUqGr0k6Nutoynr8pcmLoYIw8MjXv7/1RNNyYx4yZeDS+wf2whF8OQzuCJDWX6uIEx0g9ansiXxTjHYE/v7Txal+eEve9vvTuXy9+vliAMjQfL1u0sB/SOyV6+fxK9b0usuDZRpftM2d9SrlzVAJ2pkGNznBVb47jNj1Nq3tR5J1IogBhFra5J1O6Wb3iJYH+zBwa/ewXlB8e8qO+nIGjb9JK5Z7YQEHDpe2zs6q/3WWdEZJQzWf9hCYmiiwRGRdHsYMtHkpCToHG5mM4e2jqOEZeNCMqH04DP8r0SVnSzbvPF7jeN0vciRetqMOp/Psb2D/juKVYpljUqmLl8xA== 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=9d6/qivfjbmod7b2NgNTJ9FSzCtPgTta1NIQ6AbLReU=; b=a2pjkr8Kv67zcaXKxoyZkdOGuY50Cszi0U8FujNF5qQ6lATintOJYVFZzQA2YKXQbuS5R+aLXpGl5LLMWKOIrdDakAehCI1w7S99a5lEZymEM0xRvJAziXjomDS5VeKy6IUGU74Fyo5orJjIWmRwSumKPxBEzGEE91yXKCj1noRAYXoi37J+N0SJZUrsn4LSjCI0Bug3SD+ecQUZWG6I0U7TVokmMzZoA53VoC4pOQDyvp6kltlHxJByqrlUFqshLcRC+cyT53IVgjW9bkg/8VsftjTk6RLlLXd3OO+RmL5S3RrWh/Ew9h+vEk5maiOgX8jlHqmeXqAGYom/uabbNQ== Authentication-Results: mx.microsoft.com 1; dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=virtuozzo.com; Received: from PA6PR08MB10708.eurprd08.prod.outlook.com (2603:10a6:102:3c7::20) by AS2PR08MB8287.eurprd08.prod.outlook.com (2603:10a6:20b:556::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.451.13; Mon, 21 Sep 2026 15:55:18 +0000 Received: from PA6PR08MB10708.eurprd08.prod.outlook.com ([fe80::1999:c6db:dc55:494a]) by PA6PR08MB10708.eurprd08.prod.outlook.com ([fe80::1999:c6db:dc55:494a%5]) with mapi id 15.21.0451.012; Mon, 21 Sep 2026 15:55:14 +0000 Message-ID: Date: Mon, 21 Sep 2026 17:55:12 +0200 User-Agent: Mozilla Thunderbird To: Liu Kui , Alexey Kuznetsov References: <20260918-vstor-145614-writectr-v1-1-588a9eff3aa3@virtuozzo.com> <179000337661.2953935.5887806686603853170.b4-review@b4> Content-Language: en-US, ru, sr From: Konstantin Khorenko In-Reply-To: <179000337661.2953935.5887806686603853170.b4-review@b4> X-ClientProxiedBy: AS4P189CA0026.EURP189.PROD.OUTLOOK.COM (2603:10a6:20b:5db::13) To PA6PR08MB10708.eurprd08.prod.outlook.com (2603:10a6:102:3c7::20) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: PA6PR08MB10708:EE_|AS2PR08MB8287:EE_ X-MS-Office365-Filtering-Correlation-Id: bc8bfc2e-c227-46a2-ee99-08df17f8b957 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|376014|366016|1800799024|23010399003|10067099003|56012099006|5023799004|22082099003|17002099007|18002099003|4143699003; X-Microsoft-Antispam-Message-Info: i+ltqxYNjISTcvCtkv/ENZZFKLEDBzVrWQuFueXh9uCVYbzuuYjURP1AQwNWGfQJVLsFqlAGOC6m29RVINpDSJVX+biOK7Dp09/MYFkaFTbKfFVujFVaPAyqD0h/ZTBlwZF/JFTXPb1HDyIIE5OmHDOaFSgrkZPuVgMNbLy3xuvvTItIXbKynO5ZTai5FF5Jh094wW0k0tGnEZMgAc1GR9ja25gfoEvPeQhZu5enbdVs/RDay8TFh4p/k3EKI/0WvWiCtZUrETuBwazWy2HRFqLDnIRg1o6X4CY4AOmrhLX1AmMZGj2SAmdwMi7nlunmPhKkio7F2DxS1Lfu+xgVrYeOJa7nG5ASYpiK97vxy51OJGhaTqPUc2KoDL8iLGislvENfPZNZoOppapGWqqRWkk54K0RYIlTdqBIDTJz5bp+WHvY7KFJ6wuzefV8R6zgHPG6kANP2JlgA5VhY2WXHehIt7QbcRxtoOWEnBK/sbscyEXVWnSGZ871ZNDgWNC8rk0gRjSGReI3skw1JGIzQMsmifNQseMuXbWBBksxQwBfxcvLiXVMcNwLd2ZAeqHcKkBL6VTuysLSOwc1L+Y4ymOhfvJdztoZoGMDQbhe5FEs7ARBEqRIEvPe5hlD5z/THEKUnzop3JvCGcgCIDEmObft9Ra/ELv38ODQUzvsNY0= X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:PA6PR08MB10708.eurprd08.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230040)(376014)(366016)(1800799024)(23010399003)(10067099003)(56012099006)(5023799004)(22082099003)(17002099007)(18002099003)(4143699003); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?eXhOY3dJbi9zSGJKYnBJalRhQ2JMaEhnZjdOWFFiN0JwQUpIQUkvVktEU2JO?= =?utf-8?B?YlNXTGlSbHdyaUtEY0huZnJJSUJPazdpTlpoR1NvTTF6UWpvUXl3QTZqMWJL?= =?utf-8?B?OWp5bW1SK3IrY2h2a29Rb2daMG5FbU1ySDF0aHUxVUhjdldKaUVqbmdaV05J?= =?utf-8?B?OEx5TlZBeEFaZzlGeVZGWktCR0pYWURRMFFSbzB4elV0cGlDTmpSMFB3RW5H?= =?utf-8?B?Wmd4Tng2YldhUWlmTUhxZmt6OUVWWGFUR0ZUd2JnN2phVHp6bkNtUjZCcTJ2?= =?utf-8?B?UUE1dDY4aVU5Qm43bkVyTG8vQ2IvRjc5eTBRYkhDMER0UitJQTY1QXcrZm1K?= =?utf-8?B?c2YvYXJaOFZTaURZUldKQkpYQmpyWmZ1Y0ZKcGcxZTZ1bzI2MU9ndEdENzA2?= =?utf-8?B?S1N4ODBhUGVWc2NHK3FIZThFeTV3b0lJMjFGODBwajRNVElRK1FCMkI5dFl1?= =?utf-8?B?NG1HeEF3TkkrY0U3WlgrNzk2cUJYem1vYzlqK1VBTlBhd1RIaElHeUtqZjl5?= =?utf-8?B?MlA1dWs0YktPbFlpSko4bEpjS1lwRVRVUEdobzVjdG5IU3FXSjJYSVJ1VGk0?= =?utf-8?B?YVpoeTJVb2tTamR1bVY5eERMY2xuQU4zZkFsVk5NbjlUSHNqY0svVzBMTjNt?= =?utf-8?B?VEUrNmw2NzYxUll3Y3h0OFN3bTl4OUJBVDM5VS9yOVB1Rk95SDZ4d2pEQjFh?= =?utf-8?B?RkpKb0JsaXVIU3pnTlRzOWRmcS82VkZxeVNxNGZ3dll5M2c4dUtoczBWdFR2?= =?utf-8?B?eUVtb2hCM1RFa1B3cEV3VzluamxPd2szb0NMUWtBeXYybzFxWU1JUnZUWjdv?= =?utf-8?B?TlVvUUxzNzJIY2poZXJDZ0V0cnBRbTF1UlRVWmJzeXAzaytzeGFvMmc2b1Mw?= =?utf-8?B?a2x3bWE5ejA3VzlPRXRCaHRyb3hGQnlhOEp1U3hRbGpxV25nQ056MXZHc3Q1?= =?utf-8?B?aXRFa2w2U2lFclAxVU1QQjZjWFROTm9oTmZ1S3ZTRUR6UlhxN3FTSXFFWTcz?= =?utf-8?B?T2thWmdrMkYwa05ONUtmVDBrYS8wRm10ZXNLZGNLbTIzNWtGekFoZzFNSDNW?= =?utf-8?B?aDh1a0dDV3pZVWJtUlNqSFh0T1MvNFlEWWRSVXQwbUdRemdtc3p2M0FCaTJo?= =?utf-8?B?UFBiWEpLTXE1dGxWbmlReWQzVk5ndWFEQmsxbkc2SDFqNHF4MjhuOSs0Q1hs?= =?utf-8?B?ckxNdzdFRE9MOTFiMTJERmdaRTRpZ0hDTTNUU2Z1Y2VwS3lxc2FZNjR0M2hJ?= =?utf-8?B?Y1Ercmg4ZTF3SGVmNTUvK3lxem1sZkVZWS9HUmc5QjZiNGtGdk5qZm1jdjlM?= =?utf-8?B?TVd5YkU3Ujk1TnB3aVFzcGJOZElKajM0MFB4dy9rS1d5RGJlRm9BKzRoWnFk?= =?utf-8?B?UXRvTmJvK3ZqbXluREdYa3AzSkhIK3lQZG9LUkN6R0t1V3owK3I2bnk4cHZq?= =?utf-8?B?VDBET0RCcnRXd0FWb0VKWG4rajdPR0RVbVlsYkEyZFpJTGVxTkFiOVR3M0U5?= =?utf-8?B?elJKVk1jMVVHa0ZoU3NMRFpWeHhYQXJFc2lMbUJpclFxdTVwRXo5MGxDOE9w?= =?utf-8?B?andTMkg2K1JDL0J2Mng4N3hIUUJQMlltdFBxRzlQMzZWZUtVSVZvaG5JR3cw?= =?utf-8?B?VldjOStBdUFOVmtCWmZvUkdHSDlXMzA3K2VzakNsZkxBVGtWeEl4NUNpRURz?= =?utf-8?B?d2tLU0U2VnMzZGt4b2NJUm5MbitGTGo2NjRDSGZsMVFha0N1MVV5VHI4TzlC?= =?utf-8?B?OXh4SGhSZzdzM1VVUjFMTEVPc0JiT1hyUkUxMWpUMGMvQ0lwb1hGNjgrdGlj?= =?utf-8?B?T0ZPeEx2bGtFMTE4dGQ4cTFQenZzbFhZZXFsbGoxTlRIN09YWGFwcjZKNnhN?= =?utf-8?B?NnlHVy9oU3FCNm9BVTY4Y1FsWFJZakl6Z1F3M1ZNWm5nYXozdzJNdlA3eDAw?= =?utf-8?B?RHk5dlhJYkxjS1dIMnFTTmlhQzVTY0lQdHFycGVtVjJkc0pUVXdGR1FwcHdk?= =?utf-8?B?bVhCdWhleXFOdVM5V2ZieHVabWpONFJoc0dJZWJMMms1MjJENXV3akdjLzZj?= =?utf-8?B?K3JMQ0FtRGg0SjE5N0trdnFGV2o4L2hXY2t3amY3RkVEVW9GR2oyeG81U0gw?= =?utf-8?B?dFd5c3ltUklHZThKU3Zpejc5REVFdkVzUG9zZEF0Q2ZEK0Fvc3RnVWd3SXls?= =?utf-8?B?OWx5Q09MazBNTUViWDh6ajQxQUVZQlJMVEtjZkRKcUpZS2pHajFSMGNJc0Va?= =?utf-8?B?NEM3Q1hsNjZxNGdOaUZydS94MlhrU2NWNWRNa0VKL0k0VzRhOEh5TnRTOWpJ?= =?utf-8?B?TmhSRTBKVkJZOUd6Yng3ckNiRnFITzN0dVJ3V3FId25lNWlQTlVPUT09?= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: bc8bfc2e-c227-46a2-ee99-08df17f8b957 X-MS-Exchange-CrossTenant-AuthSource: PA6PR08MB10708.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 21 Sep 2026 15:55:14.3345 (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: hKHPsIaFwDQQXbX43zUYpRIdc/AJHfctkz7Op94+t0Ip3w52OAVEZng3SxDX0exRanxhPlP4SNud/xgFEcclAw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS2PR08MB8287 X-OZ-Fwd: true Cc: devel@openvz.org, azaitsev@virtuozzo.com Subject: Re: [Devel] [PATCH hci-8.0] fs/fuse: fix writectr imbalance when failing writeback of invalidated file 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 Actors: T1 opens and later closes the file through ff B; T2 writes and truncates through ff C; T3 does an O_DIRECT read into C's mmap; flusher is background writeback; fused is the userspace daemon; kworker runs fuse_inval_files_work(). Inode I, page P, vstorage mount (close_wait=1, writeback_cache=1). Part 1. Setup: a stale open makes B the head of write_files step who what happens state after the step ---- ------- ---------------------------------------------------------- ------------------------------------ 1 T1 open(f) -> fuse_send_open(): FUSE_OPEN for B sent to fused, B: open_seq = N, no reply yet waiting for the reply 2 fused writes FUSE_NOTIFY_INVAL_FILES(I) to /dev/fuse fi->inval_files_seq = N+1 -> fuse_invalidate_files(): every ff on fi->rw_files (old ones): set_bit(FAIL_IMMEDIATELY) on every ff in fi->rw_files FAIL_IMMEDIATELY set_bit(FUSE_I_INVAL_FILES, &fi->state) INVAL bit set queue_delayed_work(inval_files_work) 3 kworker fuse_inval_files_work(): page cache of I is empty truncate_pagecache_range(I, 0, -1) INVAL bit cleared clear_bit(FUSE_I_INVAL_FILES) 4 T2 open(f) -> FUSE_OPEN for C, fused replies C: open_seq = N+2 > N+1, not stale fuse_finish_open() -> fuse_link_write_file(): list_add fi->write_files = [C, ...] fuse_link_rw_file(): open_seq >= inval_files_seq, fine 5 fused replies to FUSE_OPEN for B (step 1) T1 fuse_finish_open() -> fuse_link_write_file(): list_add fi->write_files = [B, C, ...] fuse_link_rw_file(): B->open_seq N < inval_files_seq N+1 B: FAIL_IMMEDIATELY -> set_bit(FUSE_S_FAIL_IMMEDIATELY, &B->ff_state) B->count = 1 (the open only) From here on __fuse_write_file_get() for I returns B: it is first in the list and it is "dead". This is old behaviour, unrelated to the patch. Part 2. Concurrent part: primary waits in the queue, aux attaches to it, out_free One column per thread, time runs top to bottom. Rightmost column is shared state. T2 (ff C) T3 (ff C, mmap) flusher state ------------------------------ ---------------------------- ----------------------------------- ---------------------------- 6. mmap(C); writes into P P dirty, PTE writable page_mkwrite() ok, C not FAIL 7. read(X, addr(P), O_DIRECT) GUP: FOLL_WRITE, P already dirty and writable, pinned request sent to disk, waiting 8. ftruncate(C) fuse_do_setattr(): inode_lock(I) fuse_set_nowrite(): writectr += FUSE_NOWRITE writectr = FUSE_NOWRITE wait writectr == NOWRITE (nothing in flight, returns) FUSE_SETATTR -> fused, waiting for the reply 9. fuse_writepages(I) fill(P): INVAL bit clear -> proceed data->ff = write_file_get() = B B->count = 2 clear_page_dirty_for_io(P) PTE of P write-protected wpa1 = args_setup(P, B) fuse_file_get(B) B->count = 3 tree_insert(wpa1) P in fi->writepages fuse_writepages_send(): list_add_tail(queued_writes) wpa1 queued fuse_flush_writepages(): writectr < 0 -> nothing end_page_writeback(P) fuse_release_ff(B) B->count = 2 (before the patch: shoot on sight, wpa1 completed at once, never queued) 10. disk replied, DIO read completes: unpin_user_pages_dirty_lock() -> set_page_dirty(P) P dirty again, no page_mkwrite, hence no fuse_page_is_writeback(P) fuse_wait_on_page_writeback = true (wpa1 in the tree) 11. fuse_writepages(I), next pass fill(P): data->ff = B B->count = 3 wpa2 = args_setup(P, B) fuse_file_get(B) B->count = 4 fuse_writepage_add(wpa2, P): insert_writeback finds wpa1 no P among wpa1->next wpa1->next = wpa2 wpa2 = aux of wpa1 return false folio_end_writeback(P) fuse_release_ff(B) B->count = 3 (1 open + wpa1 + wpa2) 12. fused replied to SETATTR fuse_do_setattr(): spin_lock(fi->lock) __fuse_release_nowrite(): writectr = 0 fuse_flush_writepages(): fuse_send_writepage(wpa1): writectr++ writectr = 1 fail_immediately(B) -> true <== new check from the patch mapping_set_error(-EIO) goto out_free: writectr-- writectr = 0 rb_erase(wpa1) fuse_writepage_finish(wpa1): close_wait -> __fuse_file_put(B) B->count = 2 spin_unlock for aux = wpa1->next (wpa2): fuse_writepage_finish_stat(wpa2) fuse_writepage_free(wpa2): close_wait -> put is NOT done <== the leak B->count = 2, should be 1 kfree(wpa2) fuse_writepage_free(wpa1): no put (close_wait), kfree spin_unlock(fi->lock) inode_unlock(I) Part 3. Outcome step who what happens result ---- ---- -------------------------------------------------------------- --------------------------------- 13 T1 close(B) -> fuse_release(): write_inode_now(I, 1) no dirty pages left list_del_init(&B->write_entry) wait_event(fi->page_waitq, refcount_read(&B->count) == 1) B->count = 2 forever, no timeout, nobody to wake it: close() never returns i think the leak is not that probable and i can commit the current patch as is and we can go production without fixing that leak. What do you think? -- Best regards, Konstantin Khorenko, Virtuozzo Linux Kernel Team _______________________________________________ Devel mailing list Devel@openvz.org https://lists.openvz.org/mailman/listinfo/devel