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 38B8F8015C for ; Fri, 18 Sep 2026 14:44:19 +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 68IEgwrG000436; Fri, 18 Sep 2026 17:42:59 +0300 DKIM-Filter: OpenDKIM Filter v2.11.0 mail.openvz.org 68IEgwrG000436 Authentication-Results: mail.openvz.org; dkim=fail reason="signature verification failed" (2048-bit key) header.d=virtuozzo.com header.i=@virtuozzo.com header.b="iDfbRW2H" Received: from mail-yx1-f71.google.com (mail-yx1-f71.google.com [74.125.224.71]) by mail.openvz.org (8.14.4/8.14.4) with ESMTP id 68IEgtVv000431 (version=TLSv1/SSLv3 cipher=AES128-GCM-SHA256 bits=128 verify=FAIL) for ; Fri, 18 Sep 2026 17:42:57 +0300 DKIM-Filter: OpenDKIM Filter v2.11.0 mail.openvz.org 68IEgtVv000431 Received: by mail-yx1-f71.google.com with SMTP id 956f58d0204a3-6713ebbca2dso852934d50.2 for ; Fri, 18 Sep 2026 07:42:56 -0700 (PDT) X-Gm-Message-State: AFuF++kTZm6XV/xFKF8wG3KBnOcBi/5+2IFtJU7UydTxOLRTWtYh3kKI IOqaI1Lnu7EFjvk0oDwwQNCNjvb40sYe3KWqaTKhFJNJYfRF6KhnQmjhfopnGsPsojK1N2uiehM 1kmVkpWgoBAqlVXVh1tC4pbnifdxMOb2v2/Hhi3odiWrJUeZtHQy67A== X-Gm-Gg: AYBFou247uzLhE53S6BBsstW+xEF1SAxbAi5UIKJdN50wuietc3AdKOdB+b8iV9yk6j PVOChj7E2lFFQk3jXWtaqevukEgUjY2sakgRDwC/ngkKUPyFecPfzqDuGYzPhxLEpvMXYjTgBz+ Th5cOQhCAJhpipGMx8Ke4qPyNecJLEUs5KwpMpVYNygwIR6TlFsnQfl/7ms8L3Slg84iriL3BHJ QGGuVnEzjnnl3nXKU1LwfpPNRYO/zWP5IsEFECA9ZfFpmwIi2N+Ei2qpC/WnauGTvMEjjt/xVn4 QjxvjkVw4c6YoFqQuaLfvZtIEaBS0Zc2HQRdreyFHuEyr2RnlZIguVh0o0i40ZADHBRJmubmjm/ f4GQXFml9cFehZTOjWLo0xgNvLCssu4lo/kAbiIekELPAviibFCjL8jHnvMnbwyutOtM9m/IeMY TpVEJBHCRXgwIMaC0nlmsGE5ZuW0HDYfj8Yw== X-Received: by 2002:a53:ac82:0:b0:671:2519:a915 with SMTP id 956f58d0204a3-6717fdac7d6mr929369d50.59.1789742575416; Fri, 18 Sep 2026 07:42:55 -0700 (PDT) X-Received: by 2002:a53:ac82:0:b0:671:2519:a915 with SMTP id 956f58d0204a3-6717fdac7d6mr929346d50.59.1789742574596; Fri, 18 Sep 2026 07:42:54 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1789742574; cv=pass; d=google.com; s=arc-20260327; b=HIBKmfmydhciuXuBNw7MP8xjQNfLI/6dU/QUWQ3lO/T7OM5ZIgujHu3uJDjmdiU+kT fTchX9zv/U4bpZvDN1ApxJ4znn0gz5oaOBKSpJYwE7NzLSOC7vvXs84VJDM8y6FXFqmt 8tWxlnqk0BjiNZ7tmawskvBTmFXON5FGeTcDctTj1AyRmtJzUkvC4as9Ozi9/CTvA1SY 81C38HUw6f5Iw+NgvM8SIUXQUTokfMJdd9QXJFK2Ax8RDqW5x2N8UK5qS0MySxbrxyAl 1T9PFQVZhRwHYxbDMUb567HgWd+lk+Q2Hy7DXC21MSLjlUWydReqLPf6gp0d20eSl1s9 VTeQ== 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=aGmYS3dRbng+YfwUs8Ft1kyOMbgOaAFIZatsVuRpz28=; fh=jWAqq0hGIH/vV+Fnu8VAgTGXWmniroiYKNvjUsnkpNg=; b=ZJkHF/BdNk9Mgl017aJmSEyPY+wzSprRx4je1lgREWoXAk4KUAwm22rxpDY2rK4x85 RP7cbNU7DqsnQLipThNsvdUnVmDxYkBh1BRCnmIL7tpbt2BgUU1tIneB5AVF2mPPmOSy YgJlqjjpHz6aVFOsUH3fxFqGlHzoRFElkZd0GLklF+rIZpHrrpzHS2ERKXlgF+i91tPP A1HXm04NeK9Ft8KzIthNzTL/0z9fY5yWnPmOAcVWAVe2ytTyGo+BAMCDRvj6umZajFU6 FmhLCrcmlXvrQSzULkjpLTF4oTRU+X4LDXfUeR7ieRPIEBFtHCFxUbJ1lYMrVg+lzrvL pDZQ==; dara=google.com ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@virtuozzo.com header.s=selector2 header.b=iDfbRW2H; 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 vladimir.riabchun@virtuozzo.com designates 2a01:111:f403:c200::3 as permitted sender) smtp.mailfrom=vladimir.riabchun@virtuozzo.com; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=virtuozzo.com Received: from DU2PR03CU002.outbound.protection.outlook.com (mail-northeuropeazlp170110003.outbound.protection.outlook.com. [2a01:111:f403:c200::3]) by mx.google.com with ESMTPS id 956f58d0204a3-671836ca0d8si613672d50.111.2026.09.18.07.42.54 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 18 Sep 2026 07:42:54 -0700 (PDT) Received-SPF: pass (google.com: domain of vladimir.riabchun@virtuozzo.com designates 2a01:111:f403:c200::3 as permitted sender) client-ip=2a01:111:f403:c200::3; Authentication-Results: mx.google.com; dkim=pass header.i=@virtuozzo.com header.s=selector2 header.b=iDfbRW2H; 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 vladimir.riabchun@virtuozzo.com designates 2a01:111:f403:c200::3 as permitted sender) smtp.mailfrom=vladimir.riabchun@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=f5IuJaz5HpzL7YfUYtxTnsxYDdr1QFsvBJLYaECQ3RpHkFnDWBkJVtkTJkTD7qctjcsJYgsfzf8H3QYOs6QdxlMVcJ4rcMc9rF8iY9Fc3wk2qh6XKkAFxKHLeUrHK0dbhXp6aIoB+xmBDfqSLBViVSYIPquhh5zPtqDkVeAkb/ReH6aZikrELHdShNzxgeVD/451FInHdVXI2faFxi7rhlOgFsrDhzRD+Nr0ky6Cx5KgBBsg5gDfa53z16ud3ozjKER9kouH0Ik3m6V+064229+b6ol3jP3fr5Kyf4u9mDEdjRAeaJZQSqDBi1PJ+FPibjCpgVHjx5wDjKNVgz8hTg== 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=aGmYS3dRbng+YfwUs8Ft1kyOMbgOaAFIZatsVuRpz28=; b=czpJeWLW0rBgJpb5R7P9RSyPzFKHIhQnFJ+U9LRikdsK6jiWODnJOyQ+5vxZ0e5nJj9GoDLP4ytPDV6Pt8OR/3GGXdnjq67yy5us9J98F9qulMOQLXDwtMrbb+dgGC3Ce5RRl8kfRAvOiaeBzHK7r3hJwSlM9wmyuhrv8ESYfajotiSkOJJkIQQe4KS4LpaowDjYVADRdhPKpVtdAg5XfHzb/gW50LbrL+kVNZ4XYntVtcuptHSyyHUkykBFf+RjHKcRD4Dnn9VpoyC30w+88eNAldTTkXp/bXDYYidTio+lQMmF/k0nkx2vX9Ie4uqvjuiujHMsKTOW9E6Ovs9w8A== 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=aGmYS3dRbng+YfwUs8Ft1kyOMbgOaAFIZatsVuRpz28=; b=iDfbRW2HUtVOzZGyYcIB4rnuWkrWff8u7qYM6MBDz2I9PiWm8WiHJG9HKDqWzr7BW66XKxUzQP+kcrrdfRGpk1G0qcCjyPgOQv9kwwz4i7wbdmCbQTfWpJrjjJBNhxzIA9kAngU8nXnhwDFyD3k3TBOa3JP/F2y1lKz7kxqjt7vWnOVdDMbIKaa2EbxPvMSoBT2fcxAVwmvaBu7ZmCGk6eouQfNryUsnI/9nboRtpkC2Mb/Qok3YSzRCPJ0UW5ig22lTD6BFhM07Fae9Eswg16BPOGvMCNcd16FZm8MSVBavS1R0p4QusoTYF7RSkgSdLeBUorrJMomIoNZwI5EaSg== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=virtuozzo.com; Received: from DU0PR08MB8470.eurprd08.prod.outlook.com (2603:10a6:10:406::17) by AS2PR08MB9023.eurprd08.prod.outlook.com (2603:10a6:20b:5ff::8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.428.13; Fri, 18 Sep 2026 14:42:51 +0000 Received: from DU0PR08MB8470.eurprd08.prod.outlook.com ([fe80::3db0:9d70:4641:5f47]) by DU0PR08MB8470.eurprd08.prod.outlook.com ([fe80::3db0:9d70:4641:5f47%4]) with mapi id 15.21.0428.011; Fri, 18 Sep 2026 14:42:51 +0000 Message-ID: <7f56ad16-ab55-41da-816f-075dce583d6e@virtuozzo.com> Date: Fri, 18 Sep 2026 16:42:49 +0200 User-Agent: Mozilla Thunderbird To: devel@openvz.org References: Content-Language: en-US From: Vladimir Riabchun In-Reply-To: X-ClientProxiedBy: VIUP296CA0068.AUTP296.PROD.OUTLOOK.COM (2603:10a6:800:337::12) To DU0PR08MB8470.eurprd08.prod.outlook.com (2603:10a6:10:406::17) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DU0PR08MB8470:EE_|AS2PR08MB9023:EE_ X-MS-Office365-Filtering-Correlation-Id: 845b1406-dd2d-4f62-632a-08df15931d9b X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|376014|366016|23010399003|1800799024|6133799003|10067099003|4143699003|56012099006|22082099003|18002099003; X-Microsoft-Antispam-Message-Info: Ag0qxj2riyyCr7s8xpBgQWsa/GHx7FrwGabDqDd7+hXoXRxfrsjodz9T5Q9xObp0t6Yim8ebITDId+Q3N+Owl1Htyee7810eCoEW1qao8tKPjFb0LyGUJ6EloM6BBc+RtkDG2VS/MV4jQHX3MdsRbkDZYFC8ahPhxK1PAlq83yJi76WNWxStIdrbLgtTJyhxmbxKIxQTGMmKGT3MV+TpgMmbDjJ/y+QV/nvNNIGTm+Rtx4STkdCTr9Yf1JZW+cboaueSPzdttByQhuw7KfaCXecfJ7tuDbOBf47Ep8nPYZ5BVjcGhYmMGufNkagLjaAOQmHzuJA/iHfABOkDGkejgwhUj3NlXThkh6SfgNq/Rj9TGb7W+Q0cRhSZOWzvyr4mQlPeKHYIDmXVv7m2TUnTOtSYAZhNAeSMVbQ0XYmiFVJdZ5lwHuHCpaPe+aATqmUIJIBxsCgFq3Q0hMYM1xynZ8KWn9/jpcpukQyU6cup8BOBsh3iUf4FRDSEk0t/oGtWj6/EH/OyOBKuaNA4U7SjjEqUodIuflAp8x45XIo7K7DNjJDdMjJvcWI3Td4IKnmp4POA3EI5wAAJIe2n5W8Dp1GIqxHQUEGlRHurnSbz+BQcu4rEQugAOLInCA/wppVDoRgD7r2iy19YkJ/JItrCjkfaYRsBWsEIuzQ9CeLY8BY= X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:DU0PR08MB8470.eurprd08.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230040)(376014)(366016)(23010399003)(1800799024)(6133799003)(10067099003)(4143699003)(56012099006)(22082099003)(18002099003); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?VmxMNjQvQ2pYcmRjUzBqWFJ1TzkwYmsyVkl2NlhRNkQycUlXcW94TU5VKzEv?= =?utf-8?B?K1NoZ2pReHJkblJrQ0hZVDZudGdLaVIzRk54SmxrR2pmQmw2T0pJVC95SS9T?= =?utf-8?B?STNKdDdBc3Y2bytMQnVoWWt4T2dyK0RoVmp5ZGJwQldwYlNLSWxJaW5pS2Nq?= =?utf-8?B?UGYxNllUcEJjNFNJdjd1MnIvS3k2V0hFaDJRTml1cXd1NDJTUzIxQ01CQjdK?= =?utf-8?B?cCthOWkyOVN0cTBncjNPUnU0UUNsSGU1S1Q3d01qL1NIcElyZXNiWGJYNXV3?= =?utf-8?B?N284bmlIOHIvRzlMR1BtRlpuUkZmMXZ2K0pFVUVjUmRCQldxQmkxL3ZObC9Y?= =?utf-8?B?MjQ5NHRHR2RPL3VWVm5UQTVuLzE0YS90V05VVlhUQ1RpOTdjVmZONTAwZFVI?= =?utf-8?B?eU9raDhkSU9DOUdCajczaFhhZ3FwdTM5aWlTRXlDWFl5dzd2M2JSOWhSemc5?= =?utf-8?B?QkpHUTdnVytPbFppNGVVeGQyOVpBcFIvU2U3OWJranpKL00wSG5kZzZ5Q2JE?= =?utf-8?B?NlpRa1R2cW5TeDByMnVXOFQ2Q0dybDI1UjdROUw2eThMQkszL0dhaW5iVDhH?= =?utf-8?B?K0ZMaXNRZFJ6K2YranFhdWFwYU9SODBSWVRzbnpaeFdMQkxEVGVCYjFkQVVj?= =?utf-8?B?RVhQRW56R3FNWGZlMStZSU1xWTNFWEpLWjVlUmxDSk16R1BOZktLd29ZejhJ?= =?utf-8?B?eHd5ZkZsc29zak5QK1RQaXk4ZzJDemNNMm01djdMK0s3a2dTeWJPWHBFTTNn?= =?utf-8?B?dkRMSmhpYWhWM1Bsa2o5eitHalVoUCtCYnU5R0xVd3hqeTY3T1NWbGNZdmpL?= =?utf-8?B?UTNVdm9lSXV3d1RxZzg1dEJFbHNPNDJvZm1KKzJPcWVqcWRvdWt2V1VicFlV?= =?utf-8?B?YlFCejJLb05Gbm5CVTVUWUloWmxLQnZmd2IxZVExRGhUV2FOQVVwZ1pFRnFP?= =?utf-8?B?TmFGWndiOExaUTdOTVAxYzBJVDg3M21YSWtlempYQjBMZmlGdWlRdTN6TGhX?= =?utf-8?B?YzM3Q1FxaE1DbUdOREFjbk1YTUsvNnoxUG9yR0p0YU9oek42QjJydDVNWlF2?= =?utf-8?B?WGlJbWppeXJOMm94S3VoVUVCKzY0V25uRnNIbHJMR1ordkgvWnZrV1lmWW9h?= =?utf-8?B?U3IzdGtFaXBaR1hteUd4ajN1OWhkMUJxM3RVQy9iY3l6cFVaRVJJRGxQdkFH?= =?utf-8?B?UGhhVjZRTVB3eUxwenRUNHZiQ0pmeGc4MzRUZks1UVlQQTRKcnNTd1l6VmF6?= =?utf-8?B?WENLYU1YOXlyV2NJQ2toSXpGSmx6ajgxdmwrazNDclNya3ZaVU9IUnNzY1FC?= =?utf-8?B?MkhzOTh1YWhvb0xIYmdmQkRZcVQ4bmUzaktCb3FOd0JTMTZEbnpHdk5lSE5m?= =?utf-8?B?RkZQNllvZkRNN1loRFpHRVhJU3V5eGpMUWo1TnZmYzhFTlRqaXoxbFExOXVY?= =?utf-8?B?U1dpeGtJNEZ4U01SU1lvRU9la1c1U0xvRXNIMzB5ajRtS0ZWc2d5MzVpRkgr?= =?utf-8?B?aXFzejc0SDN4MmhLWW9hbjgveHlENDQrYVRIZzVmbm1rckI0N2Vsai9vaWh6?= =?utf-8?B?amR5eUY1VDh4RHlyTThWTlVhOTRmNkZsbWZxL05sNG9YRThkci82cFQ3Q3Jr?= =?utf-8?B?c2UwTDZFSWpFU05ZQjdSSlRHUTJaTkJ3TklLWXFRZ3cwRThDdDBlYnVDWVgv?= =?utf-8?B?Znd3RENTZ3J1ancyT2dwVlBUOGxIUWdZMjBQVWlJKzJjWHdEWkhGSUljOEsz?= =?utf-8?B?NUNiblcwRENMeTgwZWMrWlh1M0xuTGlxK1lvN09WckloeGgrd2MrUUEzMkhq?= =?utf-8?B?dGhqZWRlbDZCbWl6VDVmUmptVmhpaGYraXdYOGxRMGtqbDlONWwzdDlzWFFQ?= =?utf-8?B?YUg1K3cxK1Q0UnFSQk5BSHRaOFcxMlkwOFRQbHNTbytDaFZ6L0Nhb2FTaTZ3?= =?utf-8?B?UVdzc3NadEZrSEVaZFovRzVCZFF4cERid1pRSVdYSkpTV0Q1ajZkWHdPL3VW?= =?utf-8?B?SldvS2E5T1hCUlhVRFBXS2tmSGdsQmVKbSt5OHRkbkUwZUtBTTRzSURxSlhL?= =?utf-8?B?Y3dvR05qTFlOb2NZcVpJQ3hHMlhZVVZZT1hJb0kwQWtzdzhhUzZ1TUZBRmpD?= =?utf-8?B?Mm85OUE1OUdpK0lETUd4ekd6UitGRnk4WTBERkVLUlF2K2dLODM5UUVzaGdW?= =?utf-8?B?MXZjZ2d1b2JWeWw2aU5PQTEwVTQvL0tRMDAwZ0hQSFZtL1ltcHBrclNDUVpR?= =?utf-8?B?cVNDMkE0VjNDTzJhSlc4eThlRG9GU3pLamJrNFIyRXRGQ0UxZkltNHNRRGtq?= =?utf-8?B?WXVvTGNHZmpSa0tvTFhmZmdoOXAwQitUbVpYLy90azJwWVRPTHRIdWRaSDhR?= =?utf-8?Q?1QyEyRNJaQIL04sw=3D?= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: 845b1406-dd2d-4f62-632a-08df15931d9b X-MS-Exchange-CrossTenant-AuthSource: DU0PR08MB8470.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 18 Sep 2026 14:42:51.2266 (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: aL/jRQg9zSFzDKeXehG8/QYUWr9ekvF7eokxzlwM6rDIeCNuZL2PJCrC9AXnRUnUSfw2Y/rRxPdWuw2FjLeblY4AqaALPpLAXhafXTbBZ1g= X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS2PR08MB9023 X-OZ-Fwd: true Subject: Re: [Devel] [PATCH VZ10 v9 6/8] ve: Introduce per-VE failcount 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-Transfer-Encoding: 7bit Content-Type: text/plain; charset="us-ascii"; Format="flowed" Sender: devel-bounces@openvz.org Errors-To: devel-bounces@openvz.org Sashiko review: On 9/15/26 19:22, Vladimir Riabchun wrote: > It may be useful to have a history of resource limit hits for every VE, > this may simplify debugging and provide some information about the > resources usage. > > This information is provided by ve.failcount file, any write to it > resets all failcounts. > > To add a new failcounter we need to create a new atomic_t field > name_failcount in ve structure and add a new VE_FC_ENTRY in > ve_failcounts array. > > One change, unrelated to failcounts: aio fields are now initialized > in ve0. > > https://virtuozzo.atlassian.net/browse/VSTOR-135520 > > Feature: per-ve failcounters > Signed-off-by: Vladimir Riabchun > --- > fs/aio.c | 1 + > fs/namespace.c | 2 ++ > include/linux/ve.h | 16 +++++++++ > kernel/bpf/syscall.c | 1 + > kernel/ve/ve.c | 70 ++++++++++++++++++++++++++++++++++++++++ > net/core/dev.c | 10 ++---- > net/core/neighbour.c | 3 +- > net/core/net_namespace.c | 4 ++- > 8 files changed, 96 insertions(+), 11 deletions(-) > > diff --git a/fs/aio.c b/fs/aio.c > index cb63416af135..4ae06bcd47f2 100644 > --- a/fs/aio.c > +++ b/fs/aio.c > @@ -814,6 +814,7 @@ static struct kioctx *ioctx_alloc(unsigned nr_events) > spin_lock(&ve->aio_nr_lock); > if (ve->aio_nr + ctx->max_reqs > ve->aio_max_nr || > ve->aio_nr + ctx->max_reqs < ve->aio_nr) { > + ve_failcount_inc(ve, aio); > spin_unlock(&ve->aio_nr_lock); > err = -EAGAIN; > goto err_ctx; > diff --git a/fs/namespace.c b/fs/namespace.c > index 1d6e66cd7174..ea01664ff5f2 100644 > --- a/fs/namespace.c > +++ b/fs/namespace.c > @@ -3380,6 +3380,8 @@ static inline int ve_try_reserve_mount(struct ve_struct *ve) > > if (ret) > get_ve(ve); > + else > + ve_failcount_inc(ve, mnt); > return ret; > } > > diff --git a/include/linux/ve.h b/include/linux/ve.h > index fabc608e31f5..065129b42768 100644 > --- a/include/linux/ve.h > +++ b/include/linux/ve.h > @@ -80,12 +80,15 @@ struct ve_struct { > struct kmapset_key proc_perms_key; > > atomic_t netns_avail_nr; > + atomic_t netns_failcount; > int netns_max_nr; > > atomic_t netif_avail_nr; > + atomic_t netif_failcount; > int netif_max_nr; > > atomic_t bpf_prog_avail_nr; > + atomic_t bpf_prog_failcount; > int bpf_prog_max_nr; > > atomic64_t _uevent_seqnum; > @@ -94,6 +97,7 @@ struct ve_struct { > > atomic_t arp_neigh_nr; > atomic_t nd_neigh_nr; > + atomic_t neigh_tbl_failcount; > unsigned long meminfo_val; > > /* > @@ -102,6 +106,7 @@ struct ve_struct { > * other containers. > */ > atomic_t mnt_avail_nr; /* number of available VE mounts */ > + atomic_t mnt_failcount; > int mnt_max_nr; > > #ifdef CONFIG_COREDUMP > @@ -129,6 +134,7 @@ struct ve_struct { > spinlock_t aio_nr_lock; > unsigned long aio_nr; > unsigned long aio_max_nr; > + atomic_t aio_failcount; > #endif > struct vfsmount *devtmpfs_mnt; > }; > @@ -151,6 +157,16 @@ extern int nr_ve; > #define BPF_PROG_MAX_NR_DEFAULT 256 /* number of loaded BPF progs per-VE */ > #define MNT_MAX_NR_DEFAULT 4096 /* number of mounts per-VE */ > > +#define ve_failcount_inc(ve, name) \ > +do { \ > + struct ve_struct *__ve = (ve); \ > + \ > + atomic_inc(&__ve->name##_failcount); \ > + ve_pr_warn_ratelimited(VE_LOG_BOTH, "CT%s: hits the " #name \ > + " limit, see the '" #name "' counter in ve.failcount " \ > + "of the container's ve cgroup\n", ve_name(__ve)); \ > +} while (0) Sashiko says: How does this handle concurrent modifications? The macro ve_failcount_inc increments the failcount atomically, but when combined with the reset operation in ve_failcount_write, concurrent operations may lead to race conditions affecting data integrity. No. > + > #ifdef CONFIG_VE > static inline void ve_set_state(struct ve_struct *ve, int new_state) > { > diff --git a/kernel/bpf/syscall.c b/kernel/bpf/syscall.c > index c94d4240e3d3..8498bc9df7ea 100644 > --- a/kernel/bpf/syscall.c > +++ b/kernel/bpf/syscall.c > @@ -2891,6 +2891,7 @@ static int bpf_prog_load(union bpf_attr *attr, bpfptr_t uattr, u32 uattr_size) > if (!bpf_cap && type == BPF_PROG_TYPE_CGROUP_DEVICE) { > load_ve = get_exec_env(); > if (atomic_dec_if_positive(&load_ve->bpf_prog_avail_nr) < 0) { > + ve_failcount_inc(load_ve, bpf_prog); > load_ve = NULL; > err = -ENOSPC; > goto put_token; > diff --git a/kernel/ve/ve.c b/kernel/ve/ve.c > index 5ebdb4b7baa7..9261565208e6 100644 > --- a/kernel/ve/ve.c > +++ b/kernel/ve/ve.c > @@ -100,10 +100,13 @@ struct ve_struct ve0 = { > .features = -1, > .sched_lat_ve.cur = &ve0_lat_stats, > .netns_avail_nr = ATOMIC_INIT(INT_MAX), > + .netns_failcount = ATOMIC_INIT(0), > .netns_max_nr = INT_MAX, > .netif_avail_nr = ATOMIC_INIT(INT_MAX), > + .netif_failcount = ATOMIC_INIT(0), > .netif_max_nr = INT_MAX, > .bpf_prog_avail_nr = ATOMIC_INIT(INT_MAX), > + .bpf_prog_failcount = ATOMIC_INIT(0), > .bpf_prog_max_nr = INT_MAX, > .fsync_enable = FSYNC_FILTERED, > ._randomize_va_space = > @@ -115,8 +118,16 @@ struct ve_struct ve0 = { > > .arp_neigh_nr = ATOMIC_INIT(0), > .nd_neigh_nr = ATOMIC_INIT(0), > + .neigh_tbl_failcount = ATOMIC_INIT(0), > .mnt_avail_nr = ATOMIC_INIT(INT_MAX), > .mnt_max_nr = INT_MAX, > + .mnt_failcount = ATOMIC_INIT(0), > +#ifdef CONFIG_AIO > + .aio_nr_lock = __SPIN_LOCK_UNLOCKED(aio_nr_lock), > + .aio_nr = 0, > + .aio_max_nr = AIO_MAX_NR_DEFAULT, > + .aio_failcount = ATOMIC_INIT(0), > +#endif > .meminfo_val = VE_MEMINFO_SYSTEM, > #ifdef CONFIG_X86 > .umh_running_helpers = ATOMIC_INIT(0), > @@ -787,12 +798,15 @@ static struct cgroup_subsys_state *ve_create(struct cgroup_subsys_state *parent_ > ve->fsync_enable = FSYNC_FILTERED; > > atomic_set(&ve->netns_avail_nr, NETNS_MAX_NR_DEFAULT); > + atomic_set(&ve->netns_failcount, 0); > ve->netns_max_nr = NETNS_MAX_NR_DEFAULT; > > atomic_set(&ve->netif_avail_nr, NETIF_MAX_NR_DEFAULT); > + atomic_set(&ve->netif_failcount, 0); > ve->netif_max_nr = NETIF_MAX_NR_DEFAULT; > > atomic_set(&ve->bpf_prog_avail_nr, BPF_PROG_MAX_NR_DEFAULT); > + atomic_set(&ve->bpf_prog_failcount, 0); > ve->bpf_prog_max_nr = BPF_PROG_MAX_NR_DEFAULT; > > err = ve_log_init(ve); > @@ -821,7 +835,9 @@ static struct cgroup_subsys_state *ve_create(struct cgroup_subsys_state *parent_ > > atomic_set(&ve->arp_neigh_nr, 0); > atomic_set(&ve->nd_neigh_nr, 0); > + atomic_set(&ve->neigh_tbl_failcount, 0); > ve->mnt_max_nr = MNT_MAX_NR_DEFAULT; > + atomic_set(&ve->mnt_failcount, 0); > atomic_set(&ve->mnt_avail_nr, MNT_MAX_NR_DEFAULT); > > #ifdef CONFIG_COREDUMP > @@ -834,6 +850,7 @@ static struct cgroup_subsys_state *ve_create(struct cgroup_subsys_state *parent_ > spin_lock_init(&ve->aio_nr_lock); > ve->aio_nr = 0; > ve->aio_max_nr = AIO_MAX_NR_DEFAULT; > + atomic_set(&ve->aio_failcount, 0); > #endif > > return &ve->css; > @@ -1074,6 +1091,53 @@ VE_RESOURCE(mnt); > VE_RESOURCE(netif); > VE_RESOURCE(bpf_prog); > > +static const struct ve_failcount_entry { > + const char *name; > + size_t offset; > +} ve_failcounts[] = { > +#define VE_FC_ENTRY(name) { #name, offsetof(struct ve_struct, name##_failcount) } > + VE_FC_ENTRY(netns), > + VE_FC_ENTRY(mnt), > + VE_FC_ENTRY(netif), > + VE_FC_ENTRY(bpf_prog), > + VE_FC_ENTRY(neigh_tbl), > +#ifdef CONFIG_AIO > + VE_FC_ENTRY(aio), > +#endif > + {} > +}; > + > +static int ve_failcount_read(struct seq_file *sf, void *v) > +{ > + struct ve_struct *ve = css_to_ve(seq_css(sf)); > + const struct ve_failcount_entry *entry; > + atomic_t *fc; > + > + for (entry = ve_failcounts; entry->name; entry++) { > + fc = (void *)ve + entry->offset; > + seq_printf(sf, "%s: %d\n", entry->name, atomic_read(fc)); > + } > + return 0; > +} > + Sashiko says: Could this cause synchronization issues? The function ve_failcount_write resets the failcount, potentially leading to race conditions as it does not account for concurrent increments of the failcount. + Is there a potential for incorrect reads? This loop in the function ve_failcount_read reads the failcount values, but does so without synchronization measures to handle concurrent writes, which might result in stale or inconsistent data being read. It uses atomic operations. The only race that could be is parallel read and flush. Not a big deal - part of failcounts will be 0 and part - original ones. > +static ssize_t ve_failcount_write(struct kernfs_open_file *of, char *buf, > + size_t nbytes, loff_t off) > +{ > + struct ve_struct *ve = css_to_ve(of_css(of)); > + const struct ve_failcount_entry *entry; > + atomic_t *fc; > + > + if (!ve_is_super(get_exec_env()) && !ve->is_pseudosuper) > + return -EPERM; > + > + for (entry = ve_failcounts; entry->name; entry++) { > + fc = (void *)ve + entry->offset; > + atomic_set(fc, 0); > + } > + > + return nbytes; > +} > + > static int ve_os_release_read(struct seq_file *sf, void *v) > { > struct cgroup_subsys_state *css = seq_css(sf); > @@ -1613,6 +1677,12 @@ static struct cftype ve_cftypes[] = { > .flags = CFTYPE_NOT_ON_ROOT, > .write_u64 = ve_rpc_kill_write, > }, > + { > + .name = "failcount", > + .flags = CFTYPE_NOT_ON_ROOT, > + .seq_show = ve_failcount_read, > + .write = ve_failcount_write, > + }, > { } > }; > > diff --git a/net/core/dev.c b/net/core/dev.c > index c7dddb200489..7632ad1fd015 100644 > --- a/net/core/dev.c > +++ b/net/core/dev.c > @@ -10997,10 +10997,7 @@ int register_netdevice(struct net_device *dev) > > ret = -ENOMEM; > if (atomic_dec_if_positive(&net->owner_ve->netif_avail_nr) < 0) { > - ve_pr_warn_ratelimited(VE_LOG_BOTH, > - "CT%s: hits max number of network devices, " > - "increase ve::netif_max_nr parameter\n", > - ve_name(net->owner_ve)); > + ve_failcount_inc(net->owner_ve, netif); > return ret; > } > > @@ -12211,10 +12208,7 @@ int __dev_change_net_namespace(struct net_device *dev, struct net *net, > > err = -ENOMEM; > if (atomic_dec_if_positive(&net->owner_ve->netif_avail_nr) < 0) { > - ve_pr_warn_ratelimited(VE_LOG_BOTH, > - "CT%s: hits max number of network devices, " > - "increase ve::netif_max_nr parameter\n", > - ve_name(net->owner_ve)); > + ve_failcount_inc(net->owner_ve, netif); > goto out; > } > atomic_inc(&dev_net(dev)->owner_ve->netif_avail_nr); > diff --git a/net/core/neighbour.c b/net/core/neighbour.c > index f90deb17fb25..c7d5e6df50c2 100644 > --- a/net/core/neighbour.c > +++ b/net/core/neighbour.c > @@ -520,8 +520,7 @@ static struct neighbour *neigh_alloc(struct neigh_table *tbl, > (glob_entries >= READ_ONCE(tbl->gc_thresh2) && > time_after(now, READ_ONCE(tbl->last_flush) + 5 * HZ))) { > if (!neigh_forced_gc(tbl, ve) && entries >= gc_thresh3) { > - net_info_ratelimited("%s: neighbor table overflow!\n", > - tbl->id); > + ve_failcount_inc(ve, neigh_tbl); > NEIGH_CACHE_STAT_INC(tbl, table_fulls); > goto out_entries; > } > diff --git a/net/core/net_namespace.c b/net/core/net_namespace.c > index b3d54cad984a..328e1c96b6f4 100644 > --- a/net/core/net_namespace.c > +++ b/net/core/net_namespace.c > @@ -486,8 +486,10 @@ void net_drop_ns(void *p) > #ifdef CONFIG_VE > static int dec_netns_avail(struct ve_struct *ve) > { > - if (atomic_dec_if_positive(&ve->netns_avail_nr) < 0) > + if (atomic_dec_if_positive(&ve->netns_avail_nr) < 0) { > + ve_failcount_inc(ve, netns); > return -ENOSPC; > + } > return 0; > } > -- Best regards, Riabchun Vladimir Linux Kernel Developer, Virtuozzo _______________________________________________ Devel mailing list Devel@openvz.org https://lists.openvz.org/mailman/listinfo/devel