From nobody Thu Sep 24 12:53:50 2026 Received: from mail-wm2-f13.google.com (mail-wm2-f13.google.com [74.125.225.141]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id D49935383EC for ; Wed, 23 Sep 2026 14:06:39 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.225.141 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790172402; cv=none; b=l3wuTvZ5BKpmp6LIZqjw/m1hO5maIH8rNw8O+bUvQPMVxgUAZ5R7rCJTFuVJ/INwamt9AwRuTlzDbktcsbsT69l8DYQo5NGwBnYgAsutFl4B1e+fDCZGOO8PnlHpsVPiZUsgeGoNE4mSYRLWCZLzonjW2COw605O6f48kKrRgGI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790172402; c=relaxed/simple; bh=rmGcpoIKRjU/t1b9m5XR4fyG3dTYuOf8eWB6EDUthNs=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=W3CBq9SapCat67xJGi/sK0tvQNEsCkOAQwbFtkFvm50sG9Rv10Ti5Bntq5jLKEgYVR3bzwxYMJIeAmcXXz6Fse7Xcg7RdQtZNsgKIUR1MGK/aP/sX27d/14ju+++b7udy5oPvUJOCMf+p5EyBmAGjzQErmL1DS90fN/qAXGRzqI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linbit.com; spf=pass smtp.mailfrom=linbit.com; dkim=pass (2048-bit key) header.d=linbit-com.20251104.gappssmtp.com header.i=@linbit-com.20251104.gappssmtp.com header.b=H37oPexO; arc=none smtp.client-ip=74.125.225.141 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linbit.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linbit.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linbit-com.20251104.gappssmtp.com header.i=@linbit-com.20251104.gappssmtp.com header.b="H37oPexO" Received: by mail-wm2-f13.google.com with SMTP id 5b1f17b1804b1-49d097b4939so5255425e9.0 for ; Wed, 23 Sep 2026 07:06:39 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linbit-com.20251104.gappssmtp.com; s=20251104; t=1790172398; x=1790777198; darn=vger.kernel.org; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:from:to:cc:subject :date:message-id:reply-to:content-type; bh=vL+K9FciO0t0sxXo6V8h49AzokhOlta0lk/EZzHWy48=; b=H37oPexOvEFoEw8qFERT9dsom/peKVNGEkGSdEIgFUYBZ0dA8bE0B+bTEa7zrU70Ok N8udaaEcnHXz7Ize0nspriP5Zv62P7eRzWCXpr758vS19CEYpVtzWLz+JzfJXc3Jj5ge HMe+/HCg8A96mKAJ1hNsjrBeXGFErhwLlMPYyDWDWi3EiDuavLuySnqnMPclX98Tvccl 98HyPKztkd5bKD89b+r4793lR9ahyQrxSyo5zQK7mlwBUvh3AllCFBY0o2U017ejRnSM 4qVouAFfce5LcJfnMLnMTh+aj9Xnr08NhdQqgdw4/OlXkq2a7E0yf2TWUtQPR2Fnf52j 5LXQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1790172398; x=1790777198; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=vL+K9FciO0t0sxXo6V8h49AzokhOlta0lk/EZzHWy48=; b=rOrNaY0iBLl26uacfiia9v+hOFJllIYUTCq7i5flxsg8z3donQl2IfqXUMAFNQ4SKQ ApP2K97l8cneyBZOl1rf84N9n+BBlhNcRtBgZu+0NE8JXkEPj9jbSwg5GsEzvENu5Xfr cK10N+jIH7Ln8FQDo8ybysf4VC6ZkrChKAGNyiBv6iEcMAPUgwtiaYY3AoTxctfqH+px duof7mDRo3knagas9JQf0dTuuVfJqVRiGNHms1qT+MRcoRBZSg/3Ew6XaTN4P1Z6bmhb 3khPGZ/l199jQob3TYXFHNwpzJXvuXvfv8AhoOn4HhGjhAlmNqFL94qRoZcEnrjzZzEY iL0g== X-Forwarded-Encrypted: i=1; AKwUvByHtJpmWftsoqiHc6vg8sO6lrlLwksvykKQDIxQYCe5YXfSb9XceFj/SdwjzQIB80AadqowDosXSm++AQM=@vger.kernel.org X-Gm-Message-State: AFuF++lC+P0tEfnUeVQap/bQlOM4q/ayAaLjdb2lr8cMgXzuaR5QiY0T blmRT1IvHWc4PQ1VTr0RDHDBfdMMaZDhI9Vv0epnsA+jx2fTU4ixExz3gdX97c8pESY= X-Gm-Gg: AYBFou2oCuybbaxrN15WAYHY62aug9NxmlXeVvuGRAf6M8nxeW77/USe4FbXpwGYaqh ZCX04D6YQaF07Bis+UkHd98GR43+K2GYrpMUNHsW53oLn9GKYmvUAK/imSa/TS1KyU3hSFi94e3 3WRO4Fpn+5PPtNUUG0/gsJ2CsiKboR2NHHQLsvcBnT0naS8sUK6pGRwWNUoTQM5l1KxmpaEGFCF EA7tieHUo9huyYes6B31H4ArD9iCwiNFBDcmonmwVie59E/g/+b7Rovj4+DMutWzBKFM4K1SWgs p4ATQ14TZw1aJLZKVLWIsIKG/rIWOrwBt73ru8ejh9Bgj2I1uHgQlYpW68WuFGfRDoybVyUCMHT SDtlTOPOOxTgcg86ynFLMH41K5ZpRLMIRZ2HNhBl2630Zonb6W7LfYas8tJ11SSJoJsNdNe2auI fZbfWN3Jnm4GvLbn31wiTTWc5ZR1jFZQxP1hqX+c9CUCBDN5V+ml+aeXySz4+DnKgtbgA1RS94x TRMO4WF8Ab2y4ov/yToNfuu7sjLJUE= X-Received: by 2002:a05:600c:198e:b0:49e:642a:4f6f with SMTP id 5b1f17b1804b1-49fdf151742mr33674895e9.33.1790172397954; Wed, 23 Sep 2026 07:06:37 -0700 (PDT) Received: from localhost.localdomain ([2001:4bc9:b01f:2334:39d8:9506:1776:f780]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-49fde18a8a0sm78087455e9.5.2026.09.23.07.06.36 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 23 Sep 2026 07:06:37 -0700 (PDT) From: =?UTF-8?q?Christoph=20B=C3=B6hmwalder?= To: Jens Axboe Cc: Philipp Reisner , Lars Ellenberg , drbd-dev@lists.linux.dev, linux-block@vger.kernel.org, linux-kernel@vger.kernel.org, =?UTF-8?q?Christoph=20B=C3=B6hmwalder?= , Lars Ellenberg Subject: [PATCH 1/7] drbd: rename drbd_worker.c to drbd_sender.c Date: Wed, 23 Sep 2026 16:06:02 +0200 Message-ID: <20260923140608.1116713-2-christoph.boehmwalder@linbit.com> X-Mailer: git-send-email 2.55.0 In-Reply-To: <20260923140608.1116713-1-christoph.boehmwalder@linbit.com> References: <20260923140608.1116713-1-christoph.boehmwalder@linbit.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable The "worker" thread has long since become the thread that sends data and resync requests to the peer; the receiving side lives in drbd_receiver.c. The out-of-tree DRBD 9 code base has called this file drbd_sender.c for years. Rename the file up front, with no content change, so that the upcoming DRBD 9 rework of this thread shows up as a modification of one file instead of the removal of one file and the addition of another. Signed-off-by: Christoph B=C3=B6hmwalder --- drivers/block/drbd/Makefile | 2 +- drivers/block/drbd/{drbd_worker.c =3D> drbd_sender.c} | 0 2 files changed, 1 insertion(+), 1 deletion(-) rename drivers/block/drbd/{drbd_worker.c =3D> drbd_sender.c} (100%) diff --git a/drivers/block/drbd/Makefile b/drivers/block/drbd/Makefile index 5faaa8a8e7f0..1a6dc0f482f5 100644 --- a/drivers/block/drbd/Makefile +++ b/drivers/block/drbd/Makefile @@ -1,6 +1,6 @@ # SPDX-License-Identifier: GPL-2.0-only drbd-y :=3D drbd_buildtag.o drbd_bitmap.o drbd_proc.o -drbd-y +=3D drbd_worker.o drbd_receiver.o drbd_req.o drbd_actlog.o +drbd-y +=3D drbd_sender.o drbd_receiver.o drbd_req.o drbd_actlog.o drbd-y +=3D drbd_main.o drbd_strings.o drbd_nl.o drbd-y +=3D drbd_interval.o drbd_state.o drbd-y +=3D drbd_nl_gen.o diff --git a/drivers/block/drbd/drbd_worker.c b/drivers/block/drbd/drbd_sen= der.c similarity index 100% rename from drivers/block/drbd/drbd_worker.c rename to drivers/block/drbd/drbd_sender.c --=20 2.55.0 From nobody Thu Sep 24 12:53:50 2026 Received: from mail-wr2-f12.google.com (mail-wr2-f12.google.com [74.125.225.76]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 3CAAE538D72 for ; Wed, 23 Sep 2026 14:06:42 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.225.76 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790172405; cv=none; b=Oygc2o3z5RtFZX50sOzrDDOXByMVi4s60kNHo0lsKXcGLIqxaLaYfglUe39vRSYkPXiEwxaWuLLArvYCL4NX2/HGzTpRbJXvO0BL6vE9rhzNlwC4bqGPYa3Y9cJ7DayiFr3CK7ZcPGGldjNDVYzSb1hUVsuNWupb71ITDaPopSw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790172405; c=relaxed/simple; bh=GlB3Y2tQPHLzYKtxFX/9Dq0VZmwRG2B6cqN7HfVlLCQ=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=DnVQRaLL8EL+a200LD1qlJtAqMPOb4CvSxAQBkQsq9wJiw6zomkQaeQ2paX1PCqDRhjC+LXpWZTT1xWxfFY6S+AqhQDKwM+3IVIXGsEldGAtNv8LkH1ytKYCDRziN0YNo9UUyOMKwiNDpxb9hW+LOAbgttCUtYG1ZDMx1mVxoe0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linbit.com; spf=pass smtp.mailfrom=linbit.com; dkim=pass (2048-bit key) header.d=linbit-com.20251104.gappssmtp.com header.i=@linbit-com.20251104.gappssmtp.com header.b=w5nDBzhN; arc=none smtp.client-ip=74.125.225.76 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linbit.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linbit.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linbit-com.20251104.gappssmtp.com header.i=@linbit-com.20251104.gappssmtp.com header.b="w5nDBzhN" Received: by mail-wr2-f12.google.com with SMTP id ffacd0b85a97d-482f633ece3so814552f8f.3 for ; Wed, 23 Sep 2026 07:06:42 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linbit-com.20251104.gappssmtp.com; s=20251104; t=1790172400; x=1790777200; darn=vger.kernel.org; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:from:to:cc:subject :date:message-id:reply-to:content-type; bh=4Jv+EBHDHVTqvAzcDsBTs/b5ikUux5eKi9OrKqTVCnM=; b=w5nDBzhNEip1jK2A9UqPzUUj2NNo/f8RGTo0iFgSiX/LsisKqnNClMS9LztwUyGKy3 XxQPvRCU+NjY02KrBigyq/SnBms8nx/Y12KNwDuuB+/QjKu7qhxdxF7oZNgeifV6rXDg XO+1t3gq2oeiaQnbCZySehBU074/5BavdIVeBbBdquAQKvs+5mn1E4xvxUNE/MLGdCWQ k506d1wMuucPdjPjADiygP6s+w0XR5oW+tSAE+PKcP2GxfpuHUdyHmQm+AmmxCAUVeNZ HVq5PP6OXpsfDYTT441FEAClmsF29ThSDBMzF1fRWiq8Ga05/w9GaFsqekisHmXvQh8n s12g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1790172400; x=1790777200; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=4Jv+EBHDHVTqvAzcDsBTs/b5ikUux5eKi9OrKqTVCnM=; b=zvn65cHZ9RtSAogt94N+6ea6i0O13TFpfPUT2eRrHKJCNJh/5A2NK+4aewvui0UwwL Bc3LhO2k6XOQrFGZB5FPWHUPjUxSQ087r1LymovCUC9sRldZE5+mIQqbtG/Vo5ZNm+PS 9REz8jhPkANL5KBX9idx0TL1KBTSH0vjvb2nnLXI6vCCmaFruFhdy1jfeMm7SLtsm1fv PClcdFfPD4tJwjLIYzGY9FFSP5D4Mk935iCALazFEXrWAsG23B0dBO3JZSRt4HEOrbAB PIAccuG4G+iwfJXj3F2FyEchoQJ/5Eoo09grtiIaCKCnbRsXKdml4zOnptH5HJo/lASd RMqw== X-Forwarded-Encrypted: i=1; AKwUvBzcB08SHHgOSbYb7ACHqVXA4tWnw4V5unGaCl2gsG4qOGJOTAYBi3+R8uDvXiebkTB4T9SBWN29hAyWJzw=@vger.kernel.org X-Gm-Message-State: AFuF++ni43CGCfAqGCiN74RcbWIoPba40w2ZQbrqxmN1ra1/I/QFfwXY UtAm+6VA3FnB6MC/KX9aTP4pvYEt3qpDAhMRO6vxhqC86yUg9IwDG5gDFeMeG8PAJLCsKKT/Rf+ Zm5IKgFk= X-Gm-Gg: AYBFou1KToNvxC13BzdZJ84Ei1L3yK/2V1t6KP5ma2AccwPf4OwWGkatoIV1HzDKrN6 zQqIaLLB1WpF+EXyyK4uN6MP3Mw5+qB0ErgXMuuXPZ3X6M/TxrMsj1oUVzFermzJflCp59QLDih sGke4JucsSIIzsZlcBXH13G3oJF/hEYTSNbtEJMCZfRpJyOlLOXpRYb7iTLaJNLTejYh03sRnpm BTphfid/HWUCjkJTQXHXCAyQ+lMTVUqESqoCl4a/Gv8btliFDpqQjfoWzvSkPzk3COGp5fFoPha NnG/MsZVTDePo4jLYVXC1uk7B41CaKyvkyyzW/m/oEl6Yk/L3HmfqFM+Rftppq61HjisATE1+nX XZAFC8qGV7gDTGGhdjLfStgsCy91wp3eTdj0bWsrw9ep+5XqDpJsGyPrrlKD4x3A4X4BisnoJuc VfJo1PJZ6Iq8U6VwA54cXV7lJrNoRq0owaEyZ9pIQbYMU/M8F0a/olDq2dXgm8+31xT/sLT/Gs5 8Uhnk7v/8aVZikAIaJxhAetOjJOydg= X-Received: by 2002:a05:600c:34c1:b0:49e:6e94:7cae with SMTP id 5b1f17b1804b1-49fdf148205mr37610215e9.28.1790172399746; Wed, 23 Sep 2026 07:06:39 -0700 (PDT) Received: from localhost.localdomain ([2001:4bc9:b01f:2334:39d8:9506:1776:f780]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-49fde18a8a0sm78087455e9.5.2026.09.23.07.06.38 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 23 Sep 2026 07:06:39 -0700 (PDT) From: =?UTF-8?q?Christoph=20B=C3=B6hmwalder?= To: Jens Axboe Cc: Philipp Reisner , Lars Ellenberg , drbd-dev@lists.linux.dev, linux-block@vger.kernel.org, linux-kernel@vger.kernel.org, =?UTF-8?q?Christoph=20B=C3=B6hmwalder?= , Lars Ellenberg Subject: [PATCH 2/7] drbd: modernize the file header comments Date: Wed, 23 Sep 2026 16:06:03 +0200 Message-ID: <20260923140608.1116713-3-christoph.boehmwalder@linbit.com> X-Mailer: git-send-email 2.55.0 In-Reply-To: <20260923140608.1116713-1-christoph.boehmwalder@linbit.com> References: <20260923140608.1116713-1-christoph.boehmwalder@linbit.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Replace the pre-SPDX "This file is part of DRBD by ..." blocks with plain kernel-style copyright notices, and add the missing ones. The license is carried by the SPDX identifier since commit 93c68cc46a07 ("drbd: use consistent license"), so the prose about it in every file is redundant. The file name lines were partly wrong anyway (drbd_vli.h calls itself drbd_receiver.c, drbd_strings.c calls itself drbd.h). This is the header layout the out-of-tree DRBD 9 sources carry, so the upcoming rework no longer touches the first lines of every file. No functional change. Signed-off-by: Christoph B=C3=B6hmwalder --- drivers/block/drbd/drbd_actlog.c | 13 ++++--------- drivers/block/drbd/drbd_bitmap.c | 12 ++++-------- drivers/block/drbd/drbd_debugfs.c | 4 ++++ drivers/block/drbd/drbd_debugfs.h | 4 ++++ drivers/block/drbd/drbd_int.h | 15 +++++---------- drivers/block/drbd/drbd_interval.c | 4 ++++ drivers/block/drbd/drbd_interval.h | 4 ++++ drivers/block/drbd/drbd_main.c | 16 ++++------------ drivers/block/drbd/drbd_nl.c | 13 ++++--------- drivers/block/drbd/drbd_proc.c | 10 +--------- drivers/block/drbd/drbd_protocol.h | 4 ++++ drivers/block/drbd/drbd_receiver.c | 13 ++++--------- drivers/block/drbd/drbd_req.c | 13 ++++--------- drivers/block/drbd/drbd_req.h | 12 ++++-------- drivers/block/drbd/drbd_sender.c | 15 +++++---------- drivers/block/drbd/drbd_state.c | 15 ++++----------- drivers/block/drbd/drbd_strings.c | 12 ++---------- drivers/block/drbd/drbd_strings.h | 4 ++++ drivers/block/drbd/drbd_vli.h | 12 ++++-------- include/uapi/linux/drbd.h | 12 ++---------- include/uapi/linux/drbd_limits.h | 5 ++--- 21 files changed, 77 insertions(+), 135 deletions(-) diff --git a/drivers/block/drbd/drbd_actlog.c b/drivers/block/drbd/drbd_act= log.c index b3dbf6c76e98..04b8d50e4e9e 100644 --- a/drivers/block/drbd/drbd_actlog.c +++ b/drivers/block/drbd/drbd_actlog.c @@ -1,14 +1,9 @@ // SPDX-License-Identifier: GPL-2.0-only /* - drbd_actlog.c - - This file is part of DRBD by Philipp Reisner and Lars Ellenberg. - - Copyright (C) 2003-2008, LINBIT Information Technologies GmbH. - Copyright (C) 2003-2008, Philipp Reisner . - Copyright (C) 2003-2008, Lars Ellenberg . - - + * Copyright (C) 2003-2008, LINBIT Information Technologies GmbH. + * Copyright (C) 2003-2008, Philipp Reisner . + * Copyright (C) 2003-2008, Lars Ellenberg . + * Copyright (C) 2008, LINBIT HA-Solutions GmbH. */ =20 #include diff --git a/drivers/block/drbd/drbd_bitmap.c b/drivers/block/drbd/drbd_bit= map.c index 65ea6ec66bfd..8416c7e8257c 100644 --- a/drivers/block/drbd/drbd_bitmap.c +++ b/drivers/block/drbd/drbd_bitmap.c @@ -1,13 +1,9 @@ // SPDX-License-Identifier: GPL-2.0-only /* - drbd_bitmap.c - - This file is part of DRBD by Philipp Reisner and Lars Ellenberg. - - Copyright (C) 2004-2008, LINBIT Information Technologies GmbH. - Copyright (C) 2004-2008, Philipp Reisner . - Copyright (C) 2004-2008, Lars Ellenberg . - + * Copyright (C) 2004-2008, LINBIT Information Technologies GmbH. + * Copyright (C) 2004-2008, Philipp Reisner . + * Copyright (C) 2004-2008, Lars Ellenberg . + * Copyright (C) 2008, LINBIT HA-Solutions GmbH. */ =20 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt diff --git a/drivers/block/drbd/drbd_debugfs.c b/drivers/block/drbd/drbd_de= bugfs.c index 371abcd7e880..b8e698dbb475 100644 --- a/drivers/block/drbd/drbd_debugfs.c +++ b/drivers/block/drbd/drbd_debugfs.c @@ -1,4 +1,8 @@ // SPDX-License-Identifier: GPL-2.0-only +/* + * Copyright (C) 2014, LINBIT HA-Solutions GmbH. + */ + #define pr_fmt(fmt) "drbd debugfs: " fmt #include #include diff --git a/drivers/block/drbd/drbd_debugfs.h b/drivers/block/drbd/drbd_de= bugfs.h index ee3d66eb40c6..e02960c6ec35 100644 --- a/drivers/block/drbd/drbd_debugfs.h +++ b/drivers/block/drbd/drbd_debugfs.h @@ -1,4 +1,8 @@ /* SPDX-License-Identifier: GPL-2.0-only */ +/* + * Copyright (C) 2014, LINBIT HA-Solutions GmbH. + */ + #include #include #include diff --git a/drivers/block/drbd/drbd_int.h b/drivers/block/drbd/drbd_int.h index 48b45c3142f7..d3ca2b730a11 100644 --- a/drivers/block/drbd/drbd_int.h +++ b/drivers/block/drbd/drbd_int.h @@ -1,15 +1,10 @@ /* SPDX-License-Identifier: GPL-2.0-only */ /* - drbd_int.h - - This file is part of DRBD by Philipp Reisner and Lars Ellenberg. - - Copyright (C) 2001-2008, LINBIT Information Technologies GmbH. - Copyright (C) 1999-2008, Philipp Reisner . - Copyright (C) 2002-2008, Lars Ellenberg . - - -*/ + * Copyright (C) 1999-2008, Philipp Reisner . + * Copyright (C) 2002-2008, Lars Ellenberg . + * Copyright (C) 2001-2008, LINBIT Information Technologies GmbH. + * Copyright (C) 2008, LINBIT HA-Solutions GmbH. + */ =20 #ifndef _DRBD_INT_H #define _DRBD_INT_H diff --git a/drivers/block/drbd/drbd_interval.c b/drivers/block/drbd/drbd_i= nterval.c index 873beda6de24..2c12297ffdaf 100644 --- a/drivers/block/drbd/drbd_interval.c +++ b/drivers/block/drbd/drbd_interval.c @@ -1,4 +1,8 @@ // SPDX-License-Identifier: GPL-2.0-only +/* + * Copyright (C) 2011, LINBIT HA-Solutions GmbH. + */ + #include #include #include "drbd_interval.h" diff --git a/drivers/block/drbd/drbd_interval.h b/drivers/block/drbd/drbd_i= nterval.h index 5d3213b81eed..9d290ac120cd 100644 --- a/drivers/block/drbd/drbd_interval.h +++ b/drivers/block/drbd/drbd_interval.h @@ -1,4 +1,8 @@ /* SPDX-License-Identifier: GPL-2.0-only */ +/* + * Copyright (C) 2011, LINBIT HA-Solutions GmbH. + */ + #ifndef __DRBD_INTERVAL_H #define __DRBD_INTERVAL_H =20 diff --git a/drivers/block/drbd/drbd_main.c b/drivers/block/drbd/drbd_main.c index a2a841c89201..590ac5cb84f5 100644 --- a/drivers/block/drbd/drbd_main.c +++ b/drivers/block/drbd/drbd_main.c @@ -1,17 +1,9 @@ // SPDX-License-Identifier: GPL-2.0-only /* - drbd.c - - This file is part of DRBD by Philipp Reisner and Lars Ellenberg. - - Copyright (C) 2001-2008, LINBIT Information Technologies GmbH. - Copyright (C) 1999-2008, Philipp Reisner . - Copyright (C) 2002-2008, Lars Ellenberg . - - Thanks to Carter Burden, Bart Grantham and Gennadiy Nerubayev - from Logicworks, Inc. for making SDP replication support possible. - - + * Copyright (C) 1999-2008, Philipp Reisner . + * Copyright (C) 2002-2008, Lars Ellenberg . + * Copyright (C) 2001-2008, LINBIT Information Technologies GmbH. + * Copyright (C) 2008, LINBIT HA-Solutions GmbH. */ =20 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt diff --git a/drivers/block/drbd/drbd_nl.c b/drivers/block/drbd/drbd_nl.c index b77f901fc3ef..51ba8e542928 100644 --- a/drivers/block/drbd/drbd_nl.c +++ b/drivers/block/drbd/drbd_nl.c @@ -1,14 +1,9 @@ // SPDX-License-Identifier: GPL-2.0-only /* - drbd_nl.c - - This file is part of DRBD by Philipp Reisner and Lars Ellenberg. - - Copyright (C) 2001-2008, LINBIT Information Technologies GmbH. - Copyright (C) 1999-2008, Philipp Reisner . - Copyright (C) 2002-2008, Lars Ellenberg . - - + * Copyright (C) 1999-2008, Philipp Reisner . + * Copyright (C) 2002-2008, Lars Ellenberg . + * Copyright (C) 2001-2008, LINBIT Information Technologies GmbH. + * Copyright (C) 2008, LINBIT HA-Solutions GmbH. */ =20 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt diff --git a/drivers/block/drbd/drbd_proc.c b/drivers/block/drbd/drbd_proc.c index 6d0c12c10260..fb2b68c5c5f7 100644 --- a/drivers/block/drbd/drbd_proc.c +++ b/drivers/block/drbd/drbd_proc.c @@ -1,14 +1,6 @@ // SPDX-License-Identifier: GPL-2.0-only /* - drbd_proc.c - - This file is part of DRBD by Philipp Reisner and Lars Ellenberg. - - Copyright (C) 2001-2008, LINBIT Information Technologies GmbH. - Copyright (C) 1999-2008, Philipp Reisner . - Copyright (C) 2002-2008, Lars Ellenberg . - - + * Copyright (C) 2001, LINBIT HA-Solutions GmbH. */ =20 #include diff --git a/drivers/block/drbd/drbd_protocol.h b/drivers/block/drbd/drbd_p= rotocol.h index 56bbca9d7700..be7dacac5a86 100644 --- a/drivers/block/drbd/drbd_protocol.h +++ b/drivers/block/drbd/drbd_protocol.h @@ -1,4 +1,8 @@ /* SPDX-License-Identifier: GPL-2.0-only */ +/* + * Copyright (C) 2014, LINBIT HA-Solutions GmbH. + */ + #ifndef __DRBD_PROTOCOL_H #define __DRBD_PROTOCOL_H =20 diff --git a/drivers/block/drbd/drbd_receiver.c b/drivers/block/drbd/drbd_r= eceiver.c index 2135c14354a8..2c4507add143 100644 --- a/drivers/block/drbd/drbd_receiver.c +++ b/drivers/block/drbd/drbd_receiver.c @@ -1,16 +1,11 @@ // SPDX-License-Identifier: GPL-2.0-only /* - drbd_receiver.c - - This file is part of DRBD by Philipp Reisner and Lars Ellenberg. - - Copyright (C) 2001-2008, LINBIT Information Technologies GmbH. - Copyright (C) 1999-2008, Philipp Reisner . - Copyright (C) 2002-2008, Lars Ellenberg . - + * Copyright (C) 1999-2008, Philipp Reisner . + * Copyright (C) 2002-2008, Lars Ellenberg . + * Copyright (C) 2001-2008, LINBIT Information Technologies GmbH. + * Copyright (C) 2008, LINBIT HA-Solutions GmbH. */ =20 - #include =20 #include diff --git a/drivers/block/drbd/drbd_req.c b/drivers/block/drbd/drbd_req.c index 70f75ef07945..1648d0dabcbd 100644 --- a/drivers/block/drbd/drbd_req.c +++ b/drivers/block/drbd/drbd_req.c @@ -1,14 +1,9 @@ // SPDX-License-Identifier: GPL-2.0-only /* - drbd_req.c - - This file is part of DRBD by Philipp Reisner and Lars Ellenberg. - - Copyright (C) 2001-2008, LINBIT Information Technologies GmbH. - Copyright (C) 1999-2008, Philipp Reisner . - Copyright (C) 2002-2008, Lars Ellenberg . - - + * Copyright (C) 1999-2008, Philipp Reisner . + * Copyright (C) 2002-2008, Lars Ellenberg . + * Copyright (C) 2001-2008, LINBIT Information Technologies GmbH. + * Copyright (C) 2008, LINBIT HA-Solutions GmbH. */ =20 #include diff --git a/drivers/block/drbd/drbd_req.h b/drivers/block/drbd/drbd_req.h index 9ae860e7591b..51b12a960e45 100644 --- a/drivers/block/drbd/drbd_req.h +++ b/drivers/block/drbd/drbd_req.h @@ -1,13 +1,9 @@ /* SPDX-License-Identifier: GPL-2.0-only */ /* - drbd_req.h - - This file is part of DRBD by Philipp Reisner and Lars Ellenberg. - - Copyright (C) 2006-2008, LINBIT Information Technologies GmbH. - Copyright (C) 2006-2008, Lars Ellenberg . - Copyright (C) 2006-2008, Philipp Reisner . - + * Copyright (C) 2006-2008, Lars Ellenberg . + * Copyright (C) 2006-2008, Philipp Reisner . + * Copyright (C) 2006-2008, LINBIT Information Technologies GmbH. + * Copyright (C) 2008, LINBIT HA-Solutions GmbH. */ =20 #ifndef _DRBD_REQ_H diff --git a/drivers/block/drbd/drbd_sender.c b/drivers/block/drbd/drbd_sen= der.c index 0697f99fed18..df0b6c99a59f 100644 --- a/drivers/block/drbd/drbd_sender.c +++ b/drivers/block/drbd/drbd_sender.c @@ -1,15 +1,10 @@ // SPDX-License-Identifier: GPL-2.0-only /* - drbd_worker.c - - This file is part of DRBD by Philipp Reisner and Lars Ellenberg. - - Copyright (C) 2001-2008, LINBIT Information Technologies GmbH. - Copyright (C) 1999-2008, Philipp Reisner . - Copyright (C) 2002-2008, Lars Ellenberg . - - -*/ + * Copyright (C) 1999-2008, Philipp Reisner . + * Copyright (C) 2002-2008, Lars Ellenberg . + * Copyright (C) 2001-2008, LINBIT Information Technologies GmbH. + * Copyright (C) 2008, LINBIT HA-Solutions GmbH. + */ =20 #include #include diff --git a/drivers/block/drbd/drbd_state.c b/drivers/block/drbd/drbd_stat= e.c index adcba7f1d8ea..f1a5d899fd54 100644 --- a/drivers/block/drbd/drbd_state.c +++ b/drivers/block/drbd/drbd_state.c @@ -1,16 +1,9 @@ // SPDX-License-Identifier: GPL-2.0-only /* - drbd_state.c - - This file is part of DRBD by Philipp Reisner and Lars Ellenberg. - - Copyright (C) 2001-2008, LINBIT Information Technologies GmbH. - Copyright (C) 1999-2008, Philipp Reisner . - Copyright (C) 2002-2008, Lars Ellenberg . - - Thanks to Carter Burden, Bart Grantham and Gennadiy Nerubayev - from Logicworks, Inc. for making SDP replication support possible. - + * Copyright (C) 1999-2008, Philipp Reisner . + * Copyright (C) 2002-2008, Lars Ellenberg . + * Copyright (C) 2001-2008, LINBIT Information Technologies GmbH. + * Copyright (C) 2008, LINBIT HA-Solutions GmbH. */ =20 #include diff --git a/drivers/block/drbd/drbd_strings.c b/drivers/block/drbd/drbd_st= rings.c index 0a06f744b096..a35ff87a93b1 100644 --- a/drivers/block/drbd/drbd_strings.c +++ b/drivers/block/drbd/drbd_strings.c @@ -1,15 +1,7 @@ // SPDX-License-Identifier: GPL-2.0-only /* - drbd.h - - This file is part of DRBD by Philipp Reisner and Lars Ellenberg. - - Copyright (C) 2003-2008, LINBIT Information Technologies GmbH. - Copyright (C) 2003-2008, Philipp Reisner . - Copyright (C) 2003-2008, Lars Ellenberg . - - -*/ + * Copyright (C) 2014, LINBIT HA-Solutions GmbH. + */ =20 #include #include "drbd_strings.h" diff --git a/drivers/block/drbd/drbd_strings.h b/drivers/block/drbd/drbd_st= rings.h index 0201f6590f6a..397c2eb9b666 100644 --- a/drivers/block/drbd/drbd_strings.h +++ b/drivers/block/drbd/drbd_strings.h @@ -1,4 +1,8 @@ /* SPDX-License-Identifier: GPL-2.0-only */ +/* + * Copyright (C) 2014, LINBIT HA-Solutions GmbH. + */ + #ifndef __DRBD_STRINGS_H #define __DRBD_STRINGS_H =20 diff --git a/drivers/block/drbd/drbd_vli.h b/drivers/block/drbd/drbd_vli.h index 941c511cc4da..609a91c68a86 100644 --- a/drivers/block/drbd/drbd_vli.h +++ b/drivers/block/drbd/drbd_vli.h @@ -1,13 +1,9 @@ /* SPDX-License-Identifier: GPL-2.0-only */ /* --*- linux-c -*- - drbd_receiver.c - This file is part of DRBD by Philipp Reisner and Lars Ellenberg. - - Copyright (C) 2001-2008, LINBIT Information Technologies GmbH. - Copyright (C) 1999-2008, Philipp Reisner . - Copyright (C) 2002-2008, Lars Ellenberg . - + * Copyright (C) 1999-2008, Philipp Reisner . + * Copyright (C) 2002-2008, Lars Ellenberg . + * Copyright (C) 2001-2008, LINBIT Information Technologies GmbH. + * Copyright (C) 2008, LINBIT HA-Solutions GmbH. */ =20 #ifndef _DRBD_VLI_H diff --git a/include/uapi/linux/drbd.h b/include/uapi/linux/drbd.h index cf1ec3eb872f..b7d6b1c52df0 100644 --- a/include/uapi/linux/drbd.h +++ b/include/uapi/linux/drbd.h @@ -1,16 +1,8 @@ /* SPDX-License-Identifier: GPL-2.0-or-later WITH Linux-syscall-note */ /* - drbd.h - Kernel module for 2.6.x Kernels - - This file is part of DRBD by Philipp Reisner and Lars Ellenberg. - - Copyright (C) 2001-2008, LINBIT Information Technologies GmbH. - Copyright (C) 2001-2008, Philipp Reisner . - Copyright (C) 2001-2008, Lars Ellenberg . - + * Copyright (C) 2014, LINBIT HA-Solutions GmbH. + */ =20 -*/ #ifndef _UAPI_LINUX_DRBD_H #define _UAPI_LINUX_DRBD_H #include diff --git a/include/uapi/linux/drbd_limits.h b/include/uapi/linux/drbd_lim= its.h index acefe84bc602..65d3ebf2437b 100644 --- a/include/uapi/linux/drbd_limits.h +++ b/include/uapi/linux/drbd_limits.h @@ -1,8 +1,7 @@ /* SPDX-License-Identifier: GPL-2.0-only WITH Linux-syscall-note */ /* - drbd_limits.h - This file is part of DRBD by Philipp Reisner and Lars Ellenberg. -*/ + * Copyright (C) 2014, LINBIT HA-Solutions GmbH. + */ =20 /* * Our current limitations. --=20 2.55.0 From nobody Thu Sep 24 12:53:50 2026 Received: from mail-wr2-f12.google.com (mail-wr2-f12.google.com [74.125.225.76]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id BAC9D5383F9 for ; Wed, 23 Sep 2026 14:06:43 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.225.76 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790172406; cv=none; b=M4lfo+Tj7kCwVMafi2gsqanpxG/Bxfw1x1/P3c+v6d6pYHyAph6cmstaDOkqQbqUBQ5kNKpjq7oXZPKcaPtcRbkyxvX+WwEZ5Qp4kx7PxPzp759LCg7Jx0V7LHQxdCUJIVumrDmOQSjHQk0GFTQd6g1qMK64NGWSorNl2YuAvJM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790172406; c=relaxed/simple; bh=7u/4OZ1/l/ZMeEzMXgKr3J6dGgbI5M81i34WvI+iInE=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=SpKMAf0ng+SFStfqTDQiYBPAycL2tXJZX8awVu0Pd4LRCMf4UcTM65erG+Cv4nX6lBmp4ELSltlTklknCqd6rysa8mO6tNCzp+K7q9gyLMrwI12hqPyGfJ4seTA2DHQ19pUbqOWPbeRUj69d2Bd+PayZTXuJrPoCzRIWMJ7uqWY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linbit.com; spf=pass smtp.mailfrom=linbit.com; dkim=pass (2048-bit key) header.d=linbit-com.20251104.gappssmtp.com header.i=@linbit-com.20251104.gappssmtp.com header.b=coS0Tmg2; arc=none smtp.client-ip=74.125.225.76 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linbit.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linbit.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linbit-com.20251104.gappssmtp.com header.i=@linbit-com.20251104.gappssmtp.com header.b="coS0Tmg2" Received: by mail-wr2-f12.google.com with SMTP id ffacd0b85a97d-482f6351831so652262f8f.1 for ; Wed, 23 Sep 2026 07:06:43 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linbit-com.20251104.gappssmtp.com; s=20251104; t=1790172401; x=1790777201; darn=vger.kernel.org; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:from:to:cc:subject :date:message-id:reply-to:content-type; bh=aPV2CdE/Dht4I+/gbqIepOjn1d13cJdz8dQIBlNjv9g=; b=coS0Tmg2ocMg9PfUnAceDPm3ZsMcgHIOsFCftSPuF9UVUwoCVvFVNFDy5GDGLlmPfK Jh5EzA2xCqvEr9NCVk6pg3QanMEZkU+aOvOFUra2IYGkxV4jxq7t2GyKjPCiAlzVZWzl PjCq7HATdWrHCWYi5/D44zpnP2gFMj2ScdLnHCZqRqekMwNLAMmiUdfimjXOoPV/QOYG 3BDcnNvHCgYUf+esu1KVkzdEprjDVsw3EzFL6z3N4bNxTu4/oasJT3eLmFbwqU0h4n22 nZxcwJiwLa6ImcHloQyfX2/RGrODDSvmqC3kYX1eFy7UiPkcp5Rji/E86K2Jlzq+C+f7 FoPg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1790172401; x=1790777201; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=aPV2CdE/Dht4I+/gbqIepOjn1d13cJdz8dQIBlNjv9g=; b=QdSQmZEVkQGKygJzBXVtTYnHBdsgJUlwTP5g5OgcsfTW2lnGcEuPpVj/J0belNZy8x +QOuclvwMTBhxGC7NADc5kykIPwZVkJRzKFueY+cX4k9aK/qGMefwidlUW34TVOi6T0y E6jJJEvBJMcHgZcRPODAl9tNx798rsoS2ETExhTmBFe8BAzAKpwFAJEk4jeedB0eD1A8 eN07Dz8OdfdTTKSdbnCdR8iuH2W/wVGPyKmH1EG64s0S0dqQHomLcpPfWo8GkADgTAnV 5K5C/zH8D8xV4xHBfXJ+Iog8mII9H5cebHd3Nllj5b/31pK5DaI7Kw2oWNcmjn6UoN6M yxQw== X-Forwarded-Encrypted: i=1; AKwUvBxNolJzdjPxGwpW7e9VDAp4iB7S/C0Ud7BAKkFKhEkHpY7Cj/B5NAPqyw9TRZr5Bp5yhb2ZlL/rhhEA6+c=@vger.kernel.org X-Gm-Message-State: AFuF++mDIzM7TpN0J38dnoG4nj8j228or4n9w0MwUiL7h1MSlNJjwvDa noGqlTyNd3upUYn9JYmpMjRAJUxeqh3zNoeQ57BQxjN5ZgLZAaRlgb3n65wHWTu6Nmo= X-Gm-Gg: AYBFou3qdcx53nM/+X8DALIlRt8dd3vhb0ZLZu/U+C8Iw/BA/IeFH4KjHPeLFyQwQXc UywpxV/27OoWcGNr6Kw64UPDQyFo74tCTjq3EbU+Y+Tss64ERLtxUzjN6TZLHiyF3WWzCwDiE2B 2CxpnBvMsr7JgCKmuE0LrZPRF/avfxdN9GoHIhw3GUZ31TCgpzMGYTnGB60w6WfeSDTvS7wKPoE iMqlt43XcBR0A4W6ia3uRO0X+zuPAjyS1AceKxb44ktPwbVQQkrpjnHiubDOaQAdaa+OsxEb23E zy4vvo4ogoo6FVipRDelZfnJMkWKcwxxDGlSLJC/WgUgCiuCIw4idfCVsxGj+4/Bh+tMeRXaesl WkSnWHA3pmitV+2epdwK0pWT4XGL9jLRnYzjXpfb1M7XdLiJ/gVl0HsmKxAEkXMh+oVDH+i/1Lt szWkbZthuoPPH6wgfld6K3Sdlem+Ic0Nx15iv9XDZ+2ee5oO/4N5w/ysMJzjua5bs8LWDhWUVid HgP0ByiMPZ035xHd1fXpXyaXHXOsGq1yysL1IwNdQ== X-Received: by 2002:a05:600c:35c5:b0:49e:7d69:83b7 with SMTP id 5b1f17b1804b1-49fdeffff85mr48917285e9.13.1790172401441; Wed, 23 Sep 2026 07:06:41 -0700 (PDT) Received: from localhost.localdomain ([2001:4bc9:b01f:2334:39d8:9506:1776:f780]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-49fde18a8a0sm78087455e9.5.2026.09.23.07.06.39 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 23 Sep 2026 07:06:40 -0700 (PDT) From: =?UTF-8?q?Christoph=20B=C3=B6hmwalder?= To: Jens Axboe Cc: Philipp Reisner , Lars Ellenberg , drbd-dev@lists.linux.dev, linux-block@vger.kernel.org, linux-kernel@vger.kernel.org, =?UTF-8?q?Christoph=20B=C3=B6hmwalder?= , Lars Ellenberg Subject: [PATCH 3/7] drbd: raise the socket buffer size limits to 128 MiB Date: Wed, 23 Sep 2026 16:06:04 +0200 Message-ID: <20260923140608.1116713-4-christoph.boehmwalder@linbit.com> X-Mailer: git-send-email 2.55.0 In-Reply-To: <20260923140608.1116713-1-christoph.boehmwalder@linbit.com> References: <20260923140608.1116713-1-christoph.boehmwalder@linbit.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable sndbuf-size and rcvbuf-size are capped at 10 MiB, with a comment that a larger TCP buffer is not useful. That was written for the networks of 2008. On today's long-haul 25G+ links the bandwidth-delay product of a single DRBD connection easily exceeds 10 MiB, and the cap then limits replication throughput regardless of how the rest of the stack is tuned. Raise both limits to 128 MiB, the value DRBD 9 has used for years. The defaults are unchanged: 0 keeps the kernel's auto-tuning. Signed-off-by: Christoph B=C3=B6hmwalder --- include/uapi/linux/drbd_limits.h | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/include/uapi/linux/drbd_limits.h b/include/uapi/linux/drbd_lim= its.h index 65d3ebf2437b..4132b619376c 100644 --- a/include/uapi/linux/drbd_limits.h +++ b/include/uapi/linux/drbd_limits.h @@ -87,14 +87,13 @@ #define DRBD_MAX_EPOCH_SIZE_DEF 2048U #define DRBD_MAX_EPOCH_SIZE_SCALE '1' =20 - /* I don't think that a tcp send buffer of more than 10M is useful */ #define DRBD_SNDBUF_SIZE_MIN 0U -#define DRBD_SNDBUF_SIZE_MAX (10U<<20) +#define DRBD_SNDBUF_SIZE_MAX (128U << 20) #define DRBD_SNDBUF_SIZE_DEF 0U #define DRBD_SNDBUF_SIZE_SCALE '1' =20 #define DRBD_RCVBUF_SIZE_MIN 0U -#define DRBD_RCVBUF_SIZE_MAX (10U<<20) +#define DRBD_RCVBUF_SIZE_MAX (128U << 20) #define DRBD_RCVBUF_SIZE_DEF 0U #define DRBD_RCVBUF_SIZE_SCALE '1' =20 --=20 2.55.0 From nobody Thu Sep 24 12:53:50 2026 Received: from mail-wm2-f13.google.com (mail-wm2-f13.google.com [74.125.225.141]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id B0BB553A89D for ; Wed, 23 Sep 2026 14:06:45 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.225.141 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790172408; cv=none; b=NmnDRHadJEBX8NncF9JyEnlfzvZy44Iee1TBIF3jlcbsXpBBZYEhSBBtL7+SSR+HVqGwNqPE6qhfMstz+bkpqAniX7ZLpCvsmsMt8yPyXwMbLXdEyJHLWTAg5WBq8BMS1AoXjFxRFthJiOCV11thHgaO+wjksICqNsJO+MNfjlg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790172408; c=relaxed/simple; bh=oQMVU8CpkA9s5kiL5H6wuFFn6MAbCEqOUv5Twc3UmE0=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=NnaUdyMiB1Z1WQHEgHiHOtEKqM9nmG58ppkf2uOXMucZ0NJ0PeQf9+9v3b25sE45ahwjy3wdd71eeZsPEqsbBaJCSRYroSPtLxmclhLQaEO9RnWFX/0XXpJC+CHq26Ptlbeyo0pJuql+reBEl0ZSoMk9XSogYiUcC8qP/KEJ3Ao= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linbit.com; spf=pass smtp.mailfrom=linbit.com; dkim=pass (2048-bit key) header.d=linbit-com.20251104.gappssmtp.com header.i=@linbit-com.20251104.gappssmtp.com header.b=RhKC+9ML; arc=none smtp.client-ip=74.125.225.141 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linbit.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linbit.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linbit-com.20251104.gappssmtp.com header.i=@linbit-com.20251104.gappssmtp.com header.b="RhKC+9ML" Received: by mail-wm2-f13.google.com with SMTP id 5b1f17b1804b1-49e6c0fce17so4963255e9.1 for ; Wed, 23 Sep 2026 07:06:45 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linbit-com.20251104.gappssmtp.com; s=20251104; t=1790172403; x=1790777203; darn=vger.kernel.org; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:from:to:cc:subject :date:message-id:reply-to:content-type; bh=R4doGn8NmMxWa1rKrQkSd1esBv7W7hOO/WeyOJxuxR8=; b=RhKC+9ML2XEh05Hq4asmq2tSoLVZYM7hMZiUmHPeca8AsAlLVRlf09cNIfDXxJv8k9 /k+wmoEKqcqg/+LcZtyg0jc+ip00oCnaSwIc2fqrqZ6vhcVzVeNnZyCCW6DRfCHYI+dR McoReN4Xu3ShiEXZ42GoiFZGxrfX46XuqMsmFEnF89giGqbMANKvp+LjxYYLUVwqngAn QSlHa0nB5vnIKsXvffiLQdOc/0maopwotBOEXhi2kFF0xHG8eWO3pJvs0kq5QsPdD5vT a8bCsa5DoKKo0GKCt2lUfI0Y//hcScwc2aLas6kw1/FQKj6WXcTbtdMDAAkjmGWdv73E 9PmQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1790172403; x=1790777203; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=R4doGn8NmMxWa1rKrQkSd1esBv7W7hOO/WeyOJxuxR8=; b=DTZcDcSBOBnAPdiQCsRsmQRyGgpkbk/IVfbk0ony5SNKBZakL7gb4pq+aAmGTeX8xv 89eZ5oO+1s1TJaXjMG7TDIoLXQuSfkHPAZgSFFQZ8MJm/tm8eZvuWvF19PMiYy97Ss23 WitF/UuNKAaMpcoQW2U3J8GRb0nGbTpHBYvlnwzr7wxD9X8rD4SakeP+izrsMnCyucqQ a4G4P+XUQMlg44OBtMWv0AV9ktP4zl2xK+a3ClySObK59tMGRULgCqJHZTMkkp/aKp5w O8emVOnjspZirxDSF8H07h9Agez8bQeRVzMdO5dZn04UeYUKsVqc66XTEj5SVfDJV+Qj sxWw== X-Forwarded-Encrypted: i=1; AKwUvBx3QHesDv579ePWJPEVlMb61A+Kzaxl6P3M2BENmODr+Ys4Vu041vg0upe2kwKDCg6RdgGZlBba638Jl1s=@vger.kernel.org X-Gm-Message-State: AFuF++kzoNG8mWjV6uqjTR71Un3eRZCsXOUy5jATgm1Cv05jjpFJKZ0n H8iE9TfcJVkRiwgrqewg81GZrghG7jm4nNczeMoHw480EpDuwJWTJjovLqCQlASPvC4= X-Gm-Gg: AYBFou2l0AmCvZl9E4JM6g26sCDcPvfzFD+iLgjK5ZWNOiJ/n8bdl3SREJP/X2VBL64 E6+0YGcN6EhT0OgscPZqaash3jXJkPua+E30sCynzWQ1Q7Xi1b7l7ydlUu2iNMyLitQ4O1sl4ip VVCNRnxxp4AJD3GlN+KfV7qO02WpvByhleqBpT3cjs2hEAPI56mUG5Ht6T2aAX8o0ZpZdpO45eD 0t+j6S2SeDfkMuvS9JPv69szuWFApqQS1ZM2GD7PLicvv5WyfEdCiOgYF6Q7WeHBrk3nU/d87T3 +x16mYCovKDvhASQoxIZYcm5/8Csytzw4xQxVIEIzA1fNqrc/oiMv9K8pUr/6d5vslbjmvZ+McG ilrBH7XRIUIIzGGNYCQ3jjH2RL4BZ6/KOAVS1jdUpMhOt5K4HzPJUh4OnCh6J/8GlgqoifU4sg8 +M3hlB58iDd2gfPUVmCkHAspLN8hCU3AvSV1MWDk7sMYOUIf7AH07k718+PD+hxbmIYQ4yRaPdW lU6PzXIxQlxpZyiGdeY5pRW0wtL1vY= X-Received: by 2002:a05:600c:46d1:b0:49d:15b9:2a2a with SMTP id 5b1f17b1804b1-49fdefffe1fmr40005835e9.10.1790172403175; Wed, 23 Sep 2026 07:06:43 -0700 (PDT) Received: from localhost.localdomain ([2001:4bc9:b01f:2334:39d8:9506:1776:f780]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-49fde18a8a0sm78087455e9.5.2026.09.23.07.06.41 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 23 Sep 2026 07:06:42 -0700 (PDT) From: =?UTF-8?q?Christoph=20B=C3=B6hmwalder?= To: Jens Axboe Cc: Philipp Reisner , Lars Ellenberg , drbd-dev@lists.linux.dev, linux-block@vger.kernel.org, linux-kernel@vger.kernel.org, =?UTF-8?q?Christoph=20B=C3=B6hmwalder?= , Lars Ellenberg Subject: [PATCH 4/7] drbd: raise the maximum resync rate to 8 GiB/s Date: Wed, 23 Sep 2026 16:06:05 +0200 Message-ID: <20260923140608.1116713-5-christoph.boehmwalder@linbit.com> X-Mailer: git-send-email 2.55.0 In-Reply-To: <20260923140608.1116713-1-christoph.boehmwalder@linbit.com> References: <20260923140608.1116713-1-christoph.boehmwalder@linbit.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable The resync-rate limit tops out at 4 GiB/s, which was chosen for bonded 10 GbE. Current hardware exceeds that with a single link. Double the limit to 8 GiB/s, matching DRBD 9, and make the constant unsigned like its neighbours. Signed-off-by: Christoph B=C3=B6hmwalder --- include/uapi/linux/drbd_limits.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/uapi/linux/drbd_limits.h b/include/uapi/linux/drbd_lim= its.h index 4132b619376c..bba0a0aa8792 100644 --- a/include/uapi/linux/drbd_limits.h +++ b/include/uapi/linux/drbd_limits.h @@ -121,7 +121,7 @@ /* FIXME allow rate to be zero? */ #define DRBD_RESYNC_RATE_MIN 1U /* channel bonding 10 GbE, or other hardware */ -#define DRBD_RESYNC_RATE_MAX (4 << 20) +#define DRBD_RESYNC_RATE_MAX (8U << 20) #define DRBD_RESYNC_RATE_DEF 250U #define DRBD_RESYNC_RATE_SCALE 'k' /* kilobytes */ =20 --=20 2.55.0 From nobody Thu Sep 24 12:53:50 2026 Received: from mail-wm2-f12.google.com (mail-wm2-f12.google.com [74.125.225.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 687EE53A89A for ; Wed, 23 Sep 2026 14:06:47 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.225.140 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790172410; cv=none; b=HZkGll8oBwBZSfn+qI60EYRR8+Jp6NYWdUoXJIl/2OBYKf3dd3L1Redc9E1lraVHQnIAdyr4D1xdQjK+tDHp7Y3qEe3gIWYVirDBKa+Nv0aqLQuwxF2VG9lqLQU61qvycUdU8GNG0sgJ4jRyOVRvTSPxWYocOo/9GAY3ni3iDP4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790172410; c=relaxed/simple; bh=oQLeGHcFOEBKvK/KV/6VDCr5DCiylKfNZ+hZkYzkONE=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=E2eX2WAr5i1zDvWIsJM3vH68YMLvq2ur6mKw5PlzK10QDq1m1I+WpjXkwLaHVq+Zb7uY3kBrntJaAKzglAJFD/Hh+7A0oECbz+tS0KZQ2+zlXZZHeP93SyvqbLkWkDbIIvJ5ILxKA8u8leWK4ASPUjjk/yWLWsMbV3SFhAkV/LE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linbit.com; spf=pass smtp.mailfrom=linbit.com; dkim=pass (2048-bit key) header.d=linbit-com.20251104.gappssmtp.com header.i=@linbit-com.20251104.gappssmtp.com header.b=McXd+yH4; arc=none smtp.client-ip=74.125.225.140 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linbit.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linbit.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linbit-com.20251104.gappssmtp.com header.i=@linbit-com.20251104.gappssmtp.com header.b="McXd+yH4" Received: by mail-wm2-f12.google.com with SMTP id 5b1f17b1804b1-49cd38e0e5dso12552425e9.2 for ; Wed, 23 Sep 2026 07:06:47 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linbit-com.20251104.gappssmtp.com; s=20251104; t=1790172405; x=1790777205; darn=vger.kernel.org; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:from:to:cc:subject :date:message-id:reply-to:content-type; bh=OT8DknvFkt3c/QwXXWqPTd2AqnUqoQwgm3MlbzbyL9g=; b=McXd+yH4BeVNHTdAPqnTJD50AIsWxS75cMXu/pZBp60UDU3jq8v765fKW3NqR8iA8c DkRDJspUeMyZIW43asLdmZXo0oSeS4eB/ouuHw58plgKKDwxnIznZ6tPy53pd/DKYF0O S93p7sfjgWrXF0v0iCZSQFq93AImRfxArnsGgv17tIBAAvDYYaJy9yKyZo2SDmF3LZRP hr2qCy5DDSCl8X0NWcmxGRqARER3jVqOzHUtnAs749XH/OZox+ksAYS9yPPe1luElEmJ BQ5BnzlaF4j81gKuYowGYvTDM8HnJrDSXAMB2vsTlRNAH07FdHSRg2Hspb0Z3OyHP8EF GQ7g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1790172405; x=1790777205; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=OT8DknvFkt3c/QwXXWqPTd2AqnUqoQwgm3MlbzbyL9g=; b=i+jOtdXLeDrwGCrLZm4lnHc1+NKCwVDbC0tS3y9lPgqx9VSRpvcK4SWeHCshLU0bUY rmUkXToBA5N8TtYRCZjzREgGypMSh5gTk63ZSPVPZPNaBe24O2Z0CLkMAtJKFUlomFxp BNaba8GuR5shvwSYO+U7e13l/YFOskDuyAqGKub42sIFhgFHxx6IUpBXvwUTE28OCS4X adc4erU692vtUzhVoJ67su3WKhPzPf5+DxTx8Tm9I2S/hgdQtvxFzCco/x39L78+BBmT tQPfBA0WpEMsg5oheyW3JXtzDOOsh/iDIhYKKY7lxwHLLN7GTD5vwSFGdwsN3uGttixu W1og== X-Forwarded-Encrypted: i=1; AKwUvBxPSkpmzlmMZ7qmUx0lpp2Wp18cZoN8wXYrFOI9YB8dfOXajAXa6Im8cTJiyN6OIDHf9hwTX9mmAKJSBd0=@vger.kernel.org X-Gm-Message-State: AFuF++nYcLUMvnxm6/ObaNVwMiAqg5JVDr2rRK41lQ9TL+kRSNZ3wgYt OvaINlU+XJSOkAseGXO4wwvdFWjYTVeYkENRDmWbSjdVLQxzR2cRdYWne5UePuN5qiI= X-Gm-Gg: AYBFou0i4B5rVk1T2w1nM6JObPwrn+JCxAfFUCUv0Wb2wewlAWmgoVAh48cliv+4A5a OmD16nlHO0fqH5UGlm2jEqI12DkZWF459Iv3qRHdomVF0lj61HH3yTUYc77JP8qeHtvA4Ly4We6 8ppG7U/EFDIXsA+IJHSUzLkLnzas3Bgub9AUom/x2k6X1M4j01WfpQ15o44gtAwt+MmFn6Es3tf PEFQ5SrZZkDjzLvwNkAnwmZEhXcuWtLFunNawUWcX0K3SoL+VgDNl3/SN0mhMdxFw/YB1R6FaAk qhysKu2OSJtJEph+CoU4tHBz7xIyYIQ2DQVPFBka5E3QU0WdQ/+CR/X+PbuhPY+m2FSekMWKMc2 dNQmKsegAmdSjjSdwS4OuML5SygnN4Xv/rc9eMF59IyUZtCuhWJCV4H94gPs3VTgheZt6H6kUmZ n8dfyFatK9snzcOLxBqxraEnIvabpj2NVV0p0UieQFh7Ju+MsmoSoDtAEHzPrK2gB5qgYNUGE+H OXLhKxP2pWljdE8U4C4YmDcxurUt9NlX4pIbRpyL0M= X-Received: by 2002:a05:600c:354e:b0:49f:bd3c:bc18 with SMTP id 5b1f17b1804b1-49fdf137081mr40436105e9.19.1790172404980; Wed, 23 Sep 2026 07:06:44 -0700 (PDT) Received: from localhost.localdomain ([2001:4bc9:b01f:2334:39d8:9506:1776:f780]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-49fde18a8a0sm78087455e9.5.2026.09.23.07.06.43 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 23 Sep 2026 07:06:44 -0700 (PDT) From: =?UTF-8?q?Christoph=20B=C3=B6hmwalder?= To: Jens Axboe Cc: Philipp Reisner , Lars Ellenberg , drbd-dev@lists.linux.dev, linux-block@vger.kernel.org, linux-kernel@vger.kernel.org, =?UTF-8?q?Christoph=20B=C3=B6hmwalder?= , Lars Ellenberg Subject: [PATCH 5/7] drbd: replace the drbd_interval bitfields with a type and flags Date: Wed, 23 Sep 2026 16:06:06 +0200 Message-ID: <20260923140608.1116713-6-christoph.boehmwalder@linbit.com> X-Mailer: git-send-email 2.55.0 In-Reply-To: <20260923140608.1116713-1-christoph.boehmwalder@linbit.com> References: <20260923140608.1116713-1-christoph.boehmwalder@linbit.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable struct drbd_interval carries three single-bit fields: whether the request is local, whether someone waits for it, and whether it has completed. They only say "local or not", so every user that needs to know what kind of request an interval belongs to has to look at the containing object. Record the kind of request in the interval itself as an enum drbd_interval_type, set by whoever allocates the request, and turn the remaining bits into an atomic flags word so they can be tested and set with the usual bit operations. drbd_interval_is_local() replaces the open-coded tests of the "local" bit. This is the representation the DRBD 9 conflict handling is built on; the types are the ones it uses, so the rework only has to add flags. No functional change. Signed-off-by: Christoph B=C3=B6hmwalder --- drivers/block/drbd/drbd_interval.h | 51 +++++++++++++++++++++++------- drivers/block/drbd/drbd_main.c | 2 +- drivers/block/drbd/drbd_receiver.c | 21 ++++++++---- drivers/block/drbd/drbd_req.c | 17 +++++----- drivers/block/drbd/drbd_sender.c | 5 +++ 5 files changed, 68 insertions(+), 28 deletions(-) diff --git a/drivers/block/drbd/drbd_interval.h b/drivers/block/drbd/drbd_i= nterval.h index 9d290ac120cd..3749377ec172 100644 --- a/drivers/block/drbd/drbd_interval.h +++ b/drivers/block/drbd/drbd_interval.h @@ -9,20 +9,47 @@ #include #include =20 +/* + * Interval types stored directly in drbd_interval so that we can handle + * conflicts without having to inspect the containing object. The value 0 = is + * reserved for uninitialized intervals. + */ +enum drbd_interval_type { + INTERVAL_LOCAL_WRITE =3D 1, + INTERVAL_PEER_WRITE, + INTERVAL_LOCAL_READ, + INTERVAL_PEER_READ, + INTERVAL_RESYNC_WRITE, /* C_SYNC_TARGET */ + INTERVAL_RESYNC_READ, /* C_SYNC_SOURCE */ + INTERVAL_OV_READ_SOURCE, /* C_VERIFY_S */ + INTERVAL_OV_READ_TARGET, /* C_VERIFY_T */ +}; + +enum drbd_interval_flags { + /* Someone is waiting on device->misc_wait for this to make progress. */ + INTERVAL_WAITING, + + /* This has been completed already; ignore for conflict detection. */ + INTERVAL_COMPLETED, +}; + struct drbd_interval { struct rb_node rb; sector_t sector; /* start sector of the interval */ sector_t end; /* highest interval end in subtree */ unsigned int size; /* size in bytes */ - unsigned int local:1 /* local or remote request? */; - unsigned int waiting:1; /* someone is waiting for completion */ - unsigned int completed:1; /* this has been completed already; - * ignore for conflict detection */ + enum drbd_interval_type type; /* what type of interval this is */ + unsigned long flags; =20 /* to resume a partially successful drbd_al_begin_io_nonblock(); */ unsigned int partially_in_al_next_enr; }; =20 +static inline bool drbd_interval_is_local(struct drbd_interval *i) +{ + return i->type =3D=3D INTERVAL_LOCAL_READ || i->type =3D=3D INTERVAL_LOCA= L_WRITE; +} + static inline void drbd_clear_interval(struct drbd_interval *i) { RB_CLEAR_NODE(&i->rb); @@ -33,14 +60,14 @@ static inline bool drbd_interval_empty(struct drbd_inte= rval *i) return RB_EMPTY_NODE(&i->rb); } =20 -extern bool drbd_insert_interval(struct rb_root *, struct drbd_interval *); -extern bool drbd_contains_interval(struct rb_root *, sector_t, - struct drbd_interval *); -extern void drbd_remove_interval(struct rb_root *, struct drbd_interval *); -extern struct drbd_interval *drbd_find_overlap(struct rb_root *, sector_t, - unsigned int); -extern struct drbd_interval *drbd_next_overlap(struct drbd_interval *, sec= tor_t, - unsigned int); +bool drbd_insert_interval(struct rb_root *root, struct drbd_interval *this= ); +bool drbd_contains_interval(struct rb_root *root, sector_t sector, + struct drbd_interval *interval); +void drbd_remove_interval(struct rb_root *root, struct drbd_interval *this= ); +struct drbd_interval *drbd_find_overlap(struct rb_root *root, sector_t sec= tor, + unsigned int size); +struct drbd_interval *drbd_next_overlap(struct drbd_interval *i, + sector_t sector, unsigned int size); =20 #define drbd_for_each_overlap(i, root, sector, size) \ for (i =3D drbd_find_overlap(root, sector, size); \ diff --git a/drivers/block/drbd/drbd_main.c b/drivers/block/drbd/drbd_main.c index 590ac5cb84f5..09e42706c83e 100644 --- a/drivers/block/drbd/drbd_main.c +++ b/drivers/block/drbd/drbd_main.c @@ -3656,7 +3656,7 @@ int drbd_wait_misc(struct drbd_device *device, struct= drbd_interval *i) rcu_read_unlock(); =20 /* Indicate to wake up device->misc_wait on progress. */ - i->waiting =3D true; + set_bit(INTERVAL_WAITING, &i->flags); prepare_to_wait(&device->misc_wait, &wait, TASK_INTERRUPTIBLE); spin_unlock_irq(&device->resource->req_lock); timeout =3D schedule_timeout(timeout); diff --git a/drivers/block/drbd/drbd_receiver.c b/drivers/block/drbd/drbd_r= eceiver.c index 2c4507add143..3ebe18535fcf 100644 --- a/drivers/block/drbd/drbd_receiver.c +++ b/drivers/block/drbd/drbd_receiver.c @@ -1540,7 +1540,7 @@ static void drbd_remove_epoch_entry_interval(struct d= rbd_device *device, drbd_clear_interval(i); =20 /* Wake up any processes waiting for this peer request to complete. */ - if (i->waiting) + if (test_bit(INTERVAL_WAITING, &i->flags)) wake_up(&device->misc_wait); } =20 @@ -1878,6 +1878,8 @@ static int recv_resync_read(struct drbd_peer_device *= peer_device, sector_t secto if (!peer_req) goto fail; =20 + peer_req->i.type =3D INTERVAL_RESYNC_WRITE; + dec_rs_pending(peer_device); =20 inc_unacked(device); @@ -1916,7 +1918,7 @@ find_request(struct drbd_device *device, struct rb_ro= ot *root, u64 id, =20 /* Request object according to our peer */ req =3D (struct drbd_request *)(unsigned long)id; - if (drbd_contains_interval(root, sector, &req->i) && req->i.local) + if (drbd_contains_interval(root, sector, &req->i) && drbd_interval_is_loc= al(&req->i)) return req; if (!missing_ok) { drbd_err(device, "%s: failed to find request 0x%lx, sector %llus\n", fun= c, @@ -1999,7 +2001,7 @@ static void restart_conflicting_writes(struct drbd_de= vice *device, struct drbd_request *req; =20 drbd_for_each_overlap(i, &device->write_requests, sector, size) { - if (!i->local) + if (!drbd_interval_is_local(i)) continue; req =3D container_of(i, struct drbd_request, i); if (req->rq_state & RQ_LOCAL_PENDING || @@ -2239,7 +2241,7 @@ static void fail_postponed_requests(struct drbd_devic= e *device, sector_t sector, struct drbd_request *req; struct bio_and_error m; =20 - if (!i->local) + if (!drbd_interval_is_local(i)) continue; req =3D container_of(i, struct drbd_request, i); if (!(req->rq_state & RQ_POSTPONED)) @@ -2275,10 +2277,10 @@ static int handle_write_conflicts(struct drbd_devic= e *device, drbd_for_each_overlap(i, &device->write_requests, sector, size) { if (i =3D=3D &peer_req->i) continue; - if (i->completed) + if (test_bit(INTERVAL_COMPLETED, &i->flags)) continue; =20 - if (!i->local) { + if (!drbd_interval_is_local(i)) { /* * Our peer has sent a conflicting remote request; this * should not happen in a two-node setup. Wait for the @@ -2409,6 +2411,7 @@ static int receive_Data(struct drbd_connection *conne= ction, struct packet_info * return -EIO; } =20 + peer_req->i.type =3D INTERVAL_PEER_WRITE; peer_req->w.cb =3D e_end_block; peer_req->submit_jif =3D jiffies; peer_req->flags |=3D EE_APPLICATION; @@ -2687,6 +2690,7 @@ static int receive_DataRequest(struct drbd_connection= *connection, struct packet =20 switch (pi->cmd) { case P_DATA_REQUEST: + peer_req->i.type =3D INTERVAL_PEER_READ; peer_req->w.cb =3D w_e_end_data_req; /* application IO, don't drbd_rs_begin_io */ peer_req->flags |=3D EE_APPLICATION; @@ -2700,6 +2704,7 @@ static int receive_DataRequest(struct drbd_connection= *connection, struct packet peer_req->flags |=3D EE_RS_THIN_REQ; fallthrough; case P_RS_DATA_REQUEST: + peer_req->i.type =3D INTERVAL_RESYNC_READ; peer_req->w.cb =3D w_e_end_rsdata_req; /* used in the sector offset progress display */ device->bm_resync_fo =3D BM_SECT_TO_BIT(sector); @@ -2722,6 +2727,7 @@ static int receive_DataRequest(struct drbd_connection= *connection, struct packet =20 if (pi->cmd =3D=3D P_CSUM_RS_REQUEST) { D_ASSERT(device, peer_device->connection->agreed_pro_version >=3D 89); + peer_req->i.type =3D INTERVAL_RESYNC_READ; peer_req->w.cb =3D w_e_end_csum_rs_req; /* used in the sector offset progress display */ device->bm_resync_fo =3D BM_SECT_TO_BIT(sector); @@ -2730,6 +2736,7 @@ static int receive_DataRequest(struct drbd_connection= *connection, struct packet } else if (pi->cmd =3D=3D P_OV_REPLY) { /* track progress, we may need to throttle */ atomic_add(size >> 9, &device->rs_sect_in); + peer_req->i.type =3D INTERVAL_OV_READ_SOURCE; peer_req->w.cb =3D w_e_end_ov_reply; dec_rs_pending(peer_device); /* drbd_rs_begin_io done when we sent this request, @@ -2754,6 +2761,7 @@ static int receive_DataRequest(struct drbd_connection= *connection, struct packet drbd_info(device, "Online Verify start sector: %llu\n", (unsigned long long)sector); } + peer_req->i.type =3D INTERVAL_OV_READ_TARGET; peer_req->w.cb =3D w_e_end_ov_req; break; =20 @@ -4786,6 +4794,7 @@ static int receive_rs_deallocated(struct drbd_connect= ion *connection, struct pac return -ENOMEM; } =20 + peer_req->i.type =3D INTERVAL_RESYNC_WRITE; peer_req->w.cb =3D e_end_resync_block; peer_req->opf =3D REQ_OP_DISCARD; peer_req->submit_jif =3D jiffies; diff --git a/drivers/block/drbd/drbd_req.c b/drivers/block/drbd/drbd_req.c index 1648d0dabcbd..f16b925fecc1 100644 --- a/drivers/block/drbd/drbd_req.c +++ b/drivers/block/drbd/drbd_req.c @@ -35,8 +35,7 @@ static struct drbd_request *drbd_req_new(struct drbd_devi= ce *device, struct bio drbd_clear_interval(&req->i); req->i.sector =3D bio_src->bi_iter.bi_sector; req->i.size =3D bio_src->bi_iter.bi_size; - req->i.local =3D true; - req->i.waiting =3D false; + req->i.type =3D bio_data_dir(bio_src) =3D=3D WRITE ? INTERVAL_LOCAL_WRITE= : INTERVAL_LOCAL_READ; =20 INIT_LIST_HEAD(&req->tl_requests); INIT_LIST_HEAD(&req->w.list); @@ -59,7 +58,7 @@ static void drbd_remove_request_interval(struct rb_root *= root, drbd_remove_interval(root, i); =20 /* Wake up any processes waiting for this request to complete. */ - if (i->waiting) + if (test_bit(INTERVAL_WAITING, &i->flags)) wake_up(&device->misc_wait); } =20 @@ -270,10 +269,10 @@ void drbd_req_complete(struct drbd_request *req, stru= ct bio_and_error *m) * write-acks in protocol !=3D C during resync. * But we mark it as "complete", so it won't be counted as * conflict in a multi-primary setup. */ - req->i.completed =3D true; + set_bit(INTERVAL_COMPLETED, &req->i.flags); } =20 - if (req->i.waiting) + if (test_bit(INTERVAL_WAITING, &req->i.flags)) wake_up(&device->misc_wait); =20 /* Either we are about to complete to upper layers, @@ -505,7 +504,7 @@ static void mod_rq_state(struct drbd_request *req, stru= ct bio_and_error *m, /* potentially complete and destroy */ =20 /* If we made progress, retry conflicting peer requests, if any. */ - if (req->i.waiting) + if (test_bit(INTERVAL_WAITING, &req->i.flags)) wake_up(&device->misc_wait); =20 drbd_req_put_completion_ref(req, m, c_put); @@ -786,7 +785,7 @@ int __req_mod(struct drbd_request *req, enum drbd_req_e= vent what, */ D_ASSERT(device, req->rq_state & RQ_NET_PENDING); req->rq_state |=3D RQ_POSTPONED; - if (req->i.waiting) + if (test_bit(INTERVAL_WAITING, &req->i.flags)) wake_up(&device->misc_wait); /* Do not clear RQ_NET_PENDING. This request will make further * progress via restart_conflicting_writes() or @@ -957,7 +956,7 @@ static void complete_conflicting_writes(struct drbd_req= uest *req) for (;;) { drbd_for_each_overlap(i, &device->write_requests, sector, size) { /* Ignore, if already completed to upper layers. */ - if (i->completed) + if (test_bit(INTERVAL_COMPLETED, &i->flags)) continue; /* Handle the first found overlap. After the schedule * we have to restart the tree walk. */ @@ -968,7 +967,7 @@ static void complete_conflicting_writes(struct drbd_req= uest *req) =20 /* Indicate to wake up device->misc_wait on progress. */ prepare_to_wait(&device->misc_wait, &wait, TASK_UNINTERRUPTIBLE); - i->waiting =3D true; + set_bit(INTERVAL_WAITING, &i->flags); spin_unlock_irq(&device->resource->req_lock); schedule(); spin_lock_irq(&device->resource->req_lock); diff --git a/drivers/block/drbd/drbd_sender.c b/drivers/block/drbd/drbd_sen= der.c index df0b6c99a59f..69b3676961d2 100644 --- a/drivers/block/drbd/drbd_sender.c +++ b/drivers/block/drbd/drbd_sender.c @@ -394,6 +394,11 @@ static int read_for_csum(struct drbd_peer_device *peer= _device, sector_t sector, if (!peer_req) goto defer; =20 + /* + * This will be a resync write once we receive the data back from the + * peer, assuming the checksums differ. + */ + peer_req->i.type =3D INTERVAL_RESYNC_WRITE; peer_req->w.cb =3D w_e_send_csum; peer_req->opf =3D REQ_OP_READ; spin_lock_irq(&device->resource->req_lock); --=20 2.55.0 From nobody Thu Sep 24 12:53:50 2026 Received: from mail-wm2-f12.google.com (mail-wm2-f12.google.com [74.125.225.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 59A7553B35E for ; Wed, 23 Sep 2026 14:06:50 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.225.140 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790172413; cv=none; b=t0RIko3Y12HV+ejj/geka0O6YVfy9pq4Q8BJceZsk84vEABc3Zd+r8tDH6JnR4aItK3SUppz95mPmcMTfsSSwqMd3scRHnJmdOYaXWzRI42vNup1x2nZy8hCYWUsLJsW59aoRqCho3kHuBeac2TpzQnjBNhHBBhqKoJpOkwfQlA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790172413; c=relaxed/simple; bh=QECkCCtFgmexVFOQEBEMUMlJ5mdLy8sLeezmjSt0bC4=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=Xv6dvylaNsnOcQKNKapuhSvwKTi9nyUOqJkGgAJZL5HEY9EMudmcRvcHWwSUGWN4ikq57ZcevXN9xMFFdGgByPF5itR6i3Hh/nYjeXnsfYuWJwHQtde6f7BXnKduOOqyA5uYt6+x4smNqD+I1iZZ9k/JOcNqN0vQp3gWq6kFCiI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linbit.com; spf=pass smtp.mailfrom=linbit.com; dkim=pass (2048-bit key) header.d=linbit-com.20251104.gappssmtp.com header.i=@linbit-com.20251104.gappssmtp.com header.b=tDLYEirA; arc=none smtp.client-ip=74.125.225.140 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linbit.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linbit.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linbit-com.20251104.gappssmtp.com header.i=@linbit-com.20251104.gappssmtp.com header.b="tDLYEirA" Received: by mail-wm2-f12.google.com with SMTP id 5b1f17b1804b1-49e620fa473so5733045e9.1 for ; Wed, 23 Sep 2026 07:06:49 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linbit-com.20251104.gappssmtp.com; s=20251104; t=1790172408; x=1790777208; darn=vger.kernel.org; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:from:to:cc:subject :date:message-id:reply-to:content-type; bh=HjDgwYC7WS+fns6snJ5SpMXxfL8DgMKhiYl1lDgWvSQ=; b=tDLYEirAUwBWE5zpLgmnqhGNHsLiFyrJM51W5NTAqqpdgcvUZ19YP5/a1YV9NwmuDi oECQQbe8KeHzCoXyeCmLADyB6EXScEuMTo0xe71UgTpT8xtMmuE7vYb0xz/oE8bvAEtD hE5eyHegIXHGQol/9QDdMtCuEakzV01LZk5TnYZ2sN2tC6lfAJQ34OKuW4GFxALR2H4d syfC7KntZpVN329HQ3T8b+P+fgwHw/nrVocYRFaKitlkHE64M6NGi2gq0RNaoUTzSFUM kFqBTekihxzNThvMdna1qgqjFEehjMTuzlZXeINCdUNdm27oI7GXLLTy3Q/YRd42llyS t89g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1790172408; x=1790777208; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=HjDgwYC7WS+fns6snJ5SpMXxfL8DgMKhiYl1lDgWvSQ=; b=jpMnAXKYKS0XXwV6kwu+IzoUfQFgHKI8K9jLkZfTYy0R86KMo3vMXD1s7tza5Ywev6 Kc6FmKhzyqXwxQBapLhEFdiYHVi1H+9n0KBy7mCwXtwcmGqMsMpooMRCaf2Am6BScHgG boWCNXlVMmoDVuMI8Sklk4wT3KUxCcEgG4sgnTpA7BjF1HzFAHPztKIcvTWYMdactMFW lJyUzJ6fJoTbhv8RmkFHywE+EIqU2+/d6YA6QFCTWeDu5pCbOvogBeWO7UPHLzrK5F99 qFygzLMd4SQHE8S/0KQ1noWTnsd+utHeT1FRRS1H3YNpfjm4zVItQLjVs0TyQxyIl4dG M1tQ== X-Forwarded-Encrypted: i=1; AKwUvBwLRt+nsZPabFmG+PInu2JBtzl2Ey2w/ijRXv4qE4EUdzIHkdAzScH2EggjwDLenrI1XMq11WLNCQ4CeU0=@vger.kernel.org X-Gm-Message-State: AFuF++l+GOeWXJkEV9ZqA2dQaRZ3eY7rzCgZiRJMFd7ORHb0taWwa3eH NTTDkdaQStOL6G2Av1NffnNSih0prMsL8XbFAliX2hjF8IDsaD0FPxYwaEsf/RKZz2M= X-Gm-Gg: AYBFou37DX7xSImpomViMVU6tU0XoMXFFm3uPQiRDDW+wg4HsdI4k5muJlbE7F4ph8/ WQ3KrBB6HwBizf+92yR6WRNLfPFkjEJMf/sY1pn9khgboj3jyZowjheXHEp9nJXF4nTWPnVCwDh KiDZinyrWE77BRTE+/1Ni+vgO8iT64OWcBPvLY3/GKWJnq1Q6kzZTjum83nhZHz3rBpvefZQHlQ TRxnIM1Eu0lC9HCHHNMS4AcggVe0lF8/gZLW+k1OTk0RRP/aRCO0+0gXrcMly4HqcQqex5eNLDH fPCPGh9dMU8OEroRhVlfUal0sMMmnj5GRdlJ/oZy5WmREIMK3Hp7DWJTfDmmNeWpFFdPfN8tCTP nwo4vwNMJhJRzOabWsOZwzGimjBlzBB/3hI8TfHvJDvcND6R1+jge2Zebsfm0bRSGYvO6zb/nQ5 eXK+MCZ7uQcgu/TQlyoDlO7sEF9dD881rhCuSuJt/15esd7URtgITNIwUknKKYpf1d4Um8RClZB 0x0MwgQTAQ5JfCOlvAydW9SuaOJ7+c= X-Received: by 2002:a05:600c:8b53:b0:49f:cbae:3414 with SMTP id 5b1f17b1804b1-49fe4ad6cffmr6974335e9.4.1790172407660; Wed, 23 Sep 2026 07:06:47 -0700 (PDT) Received: from localhost.localdomain ([2001:4bc9:b01f:2334:39d8:9506:1776:f780]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-49fde18a8a0sm78087455e9.5.2026.09.23.07.06.45 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 23 Sep 2026 07:06:47 -0700 (PDT) From: =?UTF-8?q?Christoph=20B=C3=B6hmwalder?= To: Jens Axboe Cc: Philipp Reisner , Lars Ellenberg , drbd-dev@lists.linux.dev, linux-block@vger.kernel.org, linux-kernel@vger.kernel.org, =?UTF-8?q?Christoph=20B=C3=B6hmwalder?= , Lars Ellenberg Subject: [PATCH 6/7] drbd: move the packet name table to drbd_strings.c Date: Wed, 23 Sep 2026 16:06:07 +0200 Message-ID: <20260923140608.1116713-7-christoph.boehmwalder@linbit.com> X-Mailer: git-send-email 2.55.0 In-Reply-To: <20260923140608.1116713-1-christoph.boehmwalder@linbit.com> References: <20260923140608.1116713-1-christoph.boehmwalder@linbit.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable The string tables for the state enums live in drbd_strings.c, but the one for the wire protocol commands is a static array hidden inside cmdname() in drbd_main.c. Move it next to the others as drbd_packet_name(), and use the enum names themselves as the strings, so a log message names exactly the constant a reader will grep for. While at it, describe each table by a struct state_names, and make the lookup helpers uniform: every one of them range-checks against the table size and returns "?" for an index without a name, instead of three different "TOO_LARGE"/"TOO_SMALL" strings. This is the layout drbd_strings.[ch] have in DRBD 9. Signed-off-by: Christoph B=C3=B6hmwalder --- drivers/block/drbd/drbd_int.h | 1 - drivers/block/drbd/drbd_main.c | 74 ----------------- drivers/block/drbd/drbd_receiver.c | 18 ++--- drivers/block/drbd/drbd_strings.c | 126 ++++++++++++++++++++++++++--- drivers/block/drbd/drbd_strings.h | 23 +++++- 5 files changed, 142 insertions(+), 100 deletions(-) diff --git a/drivers/block/drbd/drbd_int.h b/drivers/block/drbd/drbd_int.h index d3ca2b730a11..297deac20f7e 100644 --- a/drivers/block/drbd/drbd_int.h +++ b/drivers/block/drbd/drbd_int.h @@ -104,7 +104,6 @@ extern struct ratelimit_state drbd_ratelimit_state; extern struct idr drbd_devices; /* RCU, updates: genl_lock() */ extern struct list_head drbd_resources; /* RCU, updates: genl_lock() */ =20 -extern const char *cmdname(enum drbd_packet cmd); =20 /* for sending/receiving the bitmap, * possibly in some encoding scheme */ diff --git a/drivers/block/drbd/drbd_main.c b/drivers/block/drbd/drbd_main.c index 09e42706c83e..fc674acf8bd4 100644 --- a/drivers/block/drbd/drbd_main.c +++ b/drivers/block/drbd/drbd_main.c @@ -3560,80 +3560,6 @@ static void md_sync_timer_fn(struct timer_list *t) drbd_device_post_work(device, MD_SYNC); } =20 -const char *cmdname(enum drbd_packet cmd) -{ - /* THINK may need to become several global tables - * when we want to support more than - * one PRO_VERSION */ - static const char *cmdnames[] =3D { - - [P_DATA] =3D "Data", - [P_DATA_REPLY] =3D "DataReply", - [P_RS_DATA_REPLY] =3D "RSDataReply", - [P_BARRIER] =3D "Barrier", - [P_BITMAP] =3D "ReportBitMap", - [P_BECOME_SYNC_TARGET] =3D "BecomeSyncTarget", - [P_BECOME_SYNC_SOURCE] =3D "BecomeSyncSource", - [P_UNPLUG_REMOTE] =3D "UnplugRemote", - [P_DATA_REQUEST] =3D "DataRequest", - [P_RS_DATA_REQUEST] =3D "RSDataRequest", - [P_SYNC_PARAM] =3D "SyncParam", - [P_PROTOCOL] =3D "ReportProtocol", - [P_UUIDS] =3D "ReportUUIDs", - [P_SIZES] =3D "ReportSizes", - [P_STATE] =3D "ReportState", - [P_SYNC_UUID] =3D "ReportSyncUUID", - [P_AUTH_CHALLENGE] =3D "AuthChallenge", - [P_AUTH_RESPONSE] =3D "AuthResponse", - [P_STATE_CHG_REQ] =3D "StateChgRequest", - [P_PING] =3D "Ping", - [P_PING_ACK] =3D "PingAck", - [P_RECV_ACK] =3D "RecvAck", - [P_WRITE_ACK] =3D "WriteAck", - [P_RS_WRITE_ACK] =3D "RSWriteAck", - [P_SUPERSEDED] =3D "Superseded", - [P_NEG_ACK] =3D "NegAck", - [P_NEG_DREPLY] =3D "NegDReply", - [P_NEG_RS_DREPLY] =3D "NegRSDReply", - [P_BARRIER_ACK] =3D "BarrierAck", - [P_STATE_CHG_REPLY] =3D "StateChgReply", - [P_OV_REQUEST] =3D "OVRequest", - [P_OV_REPLY] =3D "OVReply", - [P_OV_RESULT] =3D "OVResult", - [P_CSUM_RS_REQUEST] =3D "CsumRSRequest", - [P_RS_IS_IN_SYNC] =3D "CsumRSIsInSync", - [P_SYNC_PARAM89] =3D "SyncParam89", - [P_COMPRESSED_BITMAP] =3D "CBitmap", - [P_DELAY_PROBE] =3D "DelayProbe", - [P_OUT_OF_SYNC] =3D "OutOfSync", - [P_RS_CANCEL] =3D "RSCancel", - [P_CONN_ST_CHG_REQ] =3D "conn_st_chg_req", - [P_CONN_ST_CHG_REPLY] =3D "conn_st_chg_reply", - [P_PROTOCOL_UPDATE] =3D "protocol_update", - [P_TRIM] =3D "Trim", - [P_RS_THIN_REQ] =3D "rs_thin_req", - [P_RS_DEALLOCATED] =3D "rs_deallocated", - [P_WSAME] =3D "WriteSame", - [P_ZEROES] =3D "Zeroes", - - /* enum drbd_packet, but not commands - obsoleted flags: - * P_MAY_IGNORE - * P_MAX_OPT_CMD - */ - }; - - /* too big for the array: 0xfffX */ - if (cmd =3D=3D P_INITIAL_META) - return "InitialMeta"; - if (cmd =3D=3D P_INITIAL_DATA) - return "InitialData"; - if (cmd =3D=3D P_CONNECTION_FEATURES) - return "ConnectionFeatures"; - if (cmd >=3D ARRAY_SIZE(cmdnames)) - return "Unknown"; - return cmdnames[cmd]; -} - /** * drbd_wait_misc - wait for a request to make progress * @device: device associated with the request diff --git a/drivers/block/drbd/drbd_receiver.c b/drivers/block/drbd/drbd_r= eceiver.c index 3ebe18535fcf..fa87cbba756b 100644 --- a/drivers/block/drbd/drbd_receiver.c +++ b/drivers/block/drbd/drbd_receiver.c @@ -3655,7 +3655,7 @@ static int ignore_remaining_packet(struct drbd_connec= tion *connection, struct pa static int config_unknown_volume(struct drbd_connection *connection, struc= t packet_info *pi) { drbd_warn(connection, "%s packet received for volume %u, which is not con= figured locally\n", - cmdname(pi->cmd), pi->vnr); + drbd_packet_name(pi->cmd), pi->vnr); return ignore_remaining_packet(connection, pi); } =20 @@ -4887,7 +4887,7 @@ static void drbdd(struct drbd_connection *connection) cmd =3D &drbd_cmd_handler[pi.cmd]; if (unlikely(pi.cmd >=3D ARRAY_SIZE(drbd_cmd_handler) || !cmd->fn)) { drbd_err(connection, "Unexpected data packet %s (0x%04x)", - cmdname(pi.cmd), pi.cmd); + drbd_packet_name(pi.cmd), pi.cmd); goto err_out; } =20 @@ -4896,12 +4896,12 @@ static void drbdd(struct drbd_connection *connectio= n) shs +=3D sizeof(struct o_qlim); if (pi.size > shs && !cmd->expect_payload) { drbd_err(connection, "No payload expected %s l:%d\n", - cmdname(pi.cmd), pi.size); + drbd_packet_name(pi.cmd), pi.size); goto err_out; } if (pi.size < shs) { drbd_err(connection, "%s: unexpected packet size, expected:%d received:= %d\n", - cmdname(pi.cmd), (int)shs, pi.size); + drbd_packet_name(pi.cmd), (int)shs, pi.size); goto err_out; } =20 @@ -4917,7 +4917,7 @@ static void drbdd(struct drbd_connection *connection) err =3D cmd->fn(connection, &pi); if (err) { drbd_err(connection, "error receiving %s, e: %d l: %d!\n", - cmdname(pi.cmd), err, pi.size); + drbd_packet_name(pi.cmd), err, pi.size); goto err_out; } } @@ -5110,7 +5110,7 @@ static int drbd_do_features(struct drbd_connection *c= onnection) =20 if (pi.cmd !=3D P_CONNECTION_FEATURES) { drbd_err(connection, "expected ConnectionFeatures packet, received: %s (= 0x%04x)\n", - cmdname(pi.cmd), pi.cmd); + drbd_packet_name(pi.cmd), pi.cmd); return -1; } =20 @@ -5233,7 +5233,7 @@ static int drbd_do_auth(struct drbd_connection *conne= ction) =20 if (pi.cmd !=3D P_AUTH_CHALLENGE) { drbd_err(connection, "expected AuthChallenge packet, received: %s (0x%04= x)\n", - cmdname(pi.cmd), pi.cmd); + drbd_packet_name(pi.cmd), pi.cmd); rv =3D -1; goto fail; } @@ -5299,7 +5299,7 @@ static int drbd_do_auth(struct drbd_connection *conne= ction) =20 if (pi.cmd !=3D P_AUTH_RESPONSE) { drbd_err(connection, "expected AuthResponse packet, received: %s (0x%04x= )\n", - cmdname(pi.cmd), pi.cmd); + drbd_packet_name(pi.cmd), pi.cmd); rv =3D 0; goto fail; } @@ -5859,7 +5859,7 @@ int drbd_ack_receiver(struct drbd_thread *thi) cmd =3D &ack_receiver_tbl[pi.cmd]; if (pi.cmd >=3D ARRAY_SIZE(ack_receiver_tbl) || !cmd->fn) { drbd_err(connection, "Unexpected meta packet %s (0x%04x)\n", - cmdname(pi.cmd), pi.cmd); + drbd_packet_name(pi.cmd), pi.cmd); goto disconnect; } expect =3D header_size + cmd->pkt_size; diff --git a/drivers/block/drbd/drbd_strings.c b/drivers/block/drbd/drbd_st= rings.c index a35ff87a93b1..f9fde9defedb 100644 --- a/drivers/block/drbd/drbd_strings.c +++ b/drivers/block/drbd/drbd_strings.c @@ -3,10 +3,12 @@ * Copyright (C) 2014, LINBIT HA-Solutions GmbH. */ =20 +#include #include #include "drbd_strings.h" +#include "drbd_protocol.h" =20 -static const char * const drbd_conn_s_names[] =3D { +static const char * const __conn_state_names[] =3D { [C_STANDALONE] =3D "StandAlone", [C_DISCONNECTING] =3D "Disconnecting", [C_UNCONNECTED] =3D "Unconnected", @@ -33,13 +35,23 @@ static const char * const drbd_conn_s_names[] =3D { [C_BEHIND] =3D "Behind", }; =20 -static const char * const drbd_role_s_names[] =3D { +struct state_names drbd_conn_state_names =3D { + .names =3D __conn_state_names, + .size =3D ARRAY_SIZE(__conn_state_names), +}; + +static const char * const __role_state_names[] =3D { + [R_UNKNOWN] =3D "Unknown", [R_PRIMARY] =3D "Primary", [R_SECONDARY] =3D "Secondary", - [R_UNKNOWN] =3D "Unknown" }; =20 -static const char * const drbd_disk_s_names[] =3D { +struct state_names drbd_role_state_names =3D { + .names =3D __role_state_names, + .size =3D ARRAY_SIZE(__role_state_names), +}; + +static const char * const __disk_state_names[] =3D { [D_DISKLESS] =3D "Diskless", [D_ATTACHING] =3D "Attaching", [D_FAILED] =3D "Failed", @@ -51,7 +63,12 @@ static const char * const drbd_disk_s_names[] =3D { [D_UP_TO_DATE] =3D "UpToDate", }; =20 -static const char * const drbd_state_sw_errors[] =3D { +struct state_names drbd_disk_state_names =3D { + .names =3D __disk_state_names, + .size =3D ARRAY_SIZE(__disk_state_names), +}; + +static const char * const __error_messages[] =3D { [-SS_TWO_PRIMARIES] =3D "Multiple primaries not allowed by config", [-SS_NO_UP_TO_DATE_DISK] =3D "Need access to UpToDate data", [-SS_NO_LOCAL_DISK] =3D "Can not resync without local disk", @@ -74,25 +91,110 @@ static const char * const drbd_state_sw_errors[] =3D { [-SS_O_VOL_PEER_PRI] =3D "Other vol primary on peer not allowed by config= ", }; =20 +struct state_names drbd_error_messages =3D { + .names =3D __error_messages, + .size =3D ARRAY_SIZE(__error_messages), +}; + +static const char * const __packet_names[] =3D { + [P_DATA] =3D "P_DATA", + [P_WSAME] =3D "P_WSAME", + [P_TRIM] =3D "P_TRIM", + [P_DATA_REPLY] =3D "P_DATA_REPLY", + [P_RS_DATA_REPLY] =3D "P_RS_DATA_REPLY", + [P_BARRIER] =3D "P_BARRIER", + [P_BITMAP] =3D "P_BITMAP", + [P_BECOME_SYNC_TARGET] =3D "P_BECOME_SYNC_TARGET", + [P_BECOME_SYNC_SOURCE] =3D "P_BECOME_SYNC_SOURCE", + [P_UNPLUG_REMOTE] =3D "P_UNPLUG_REMOTE", + [P_DATA_REQUEST] =3D "P_DATA_REQUEST", + [P_RS_DATA_REQUEST] =3D "P_RS_DATA_REQUEST", + [P_SYNC_PARAM] =3D "P_SYNC_PARAM", + [P_SYNC_PARAM89] =3D "P_SYNC_PARAM89", + [P_PROTOCOL] =3D "P_PROTOCOL", + [P_UUIDS] =3D "P_UUIDS", + [P_SIZES] =3D "P_SIZES", + [P_STATE] =3D "P_STATE", + [P_SYNC_UUID] =3D "P_SYNC_UUID", + [P_AUTH_CHALLENGE] =3D "P_AUTH_CHALLENGE", + [P_AUTH_RESPONSE] =3D "P_AUTH_RESPONSE", + [P_PING] =3D "P_PING", + [P_PING_ACK] =3D "P_PING_ACK", + [P_RECV_ACK] =3D "P_RECV_ACK", + [P_WRITE_ACK] =3D "P_WRITE_ACK", + [P_RS_WRITE_ACK] =3D "P_RS_WRITE_ACK", + [P_SUPERSEDED] =3D "P_SUPERSEDED", + [P_NEG_ACK] =3D "P_NEG_ACK", + [P_NEG_DREPLY] =3D "P_NEG_DREPLY", + [P_NEG_RS_DREPLY] =3D "P_NEG_RS_DREPLY", + [P_BARRIER_ACK] =3D "P_BARRIER_ACK", + [P_STATE_CHG_REQ] =3D "P_STATE_CHG_REQ", + [P_STATE_CHG_REPLY] =3D "P_STATE_CHG_REPLY", + [P_OV_REQUEST] =3D "P_OV_REQUEST", + [P_OV_REPLY] =3D "P_OV_REPLY", + [P_OV_RESULT] =3D "P_OV_RESULT", + [P_CSUM_RS_REQUEST] =3D "P_CSUM_RS_REQUEST", + [P_RS_IS_IN_SYNC] =3D "P_RS_IS_IN_SYNC", + [P_COMPRESSED_BITMAP] =3D "P_COMPRESSED_BITMAP", + [P_DELAY_PROBE] =3D "P_DELAY_PROBE", + [P_OUT_OF_SYNC] =3D "P_OUT_OF_SYNC", + [P_RETRY_WRITE] =3D "P_RETRY_WRITE", + [P_RS_CANCEL] =3D "P_RS_CANCEL", + [P_CONN_ST_CHG_REQ] =3D "P_CONN_ST_CHG_REQ", + [P_CONN_ST_CHG_REPLY] =3D "P_CONN_ST_CHG_REPLY", + [P_PROTOCOL_UPDATE] =3D "P_PROTOCOL_UPDATE", + [P_RS_THIN_REQ] =3D "P_RS_THIN_REQ", + [P_RS_DEALLOCATED] =3D "P_RS_DEALLOCATED", + [P_ZEROES] =3D "P_ZEROES", + /* enum drbd_packet, but not commands - obsoleted flags: + * P_MAY_IGNORE + * P_MAX_OPT_CMD + */ +}; + +struct state_names drbd_packet_names =3D { + .names =3D __packet_names, + .size =3D ARRAY_SIZE(__packet_names), +}; + const char *drbd_conn_str(enum drbd_conns s) { - /* enums are unsigned... */ - return s > C_BEHIND ? "TOO_LARGE" : drbd_conn_s_names[s]; + return (s < 0 || s >=3D drbd_conn_state_names.size || + !drbd_conn_state_names.names[s]) ? + "?" : drbd_conn_state_names.names[s]; } =20 const char *drbd_role_str(enum drbd_role s) { - return s > R_SECONDARY ? "TOO_LARGE" : drbd_role_s_names[s]; + return (s < 0 || s >=3D drbd_role_state_names.size || + !drbd_role_state_names.names[s]) ? + "?" : drbd_role_state_names.names[s]; } =20 const char *drbd_disk_str(enum drbd_disk_state s) { - return s > D_UP_TO_DATE ? "TOO_LARGE" : drbd_disk_s_names[s]; + return (s < 0 || s >=3D drbd_disk_state_names.size || + !drbd_disk_state_names.names[s]) ? + "?" : drbd_disk_state_names.names[s]; } =20 const char *drbd_set_st_err_str(enum drbd_state_rv err) { - return err <=3D SS_AFTER_LAST_ERROR ? "TOO_SMALL" : - err > SS_TWO_PRIMARIES ? "TOO_LARGE" - : drbd_state_sw_errors[-err]; + return (-err < 0 || -err >=3D drbd_error_messages.size || + !drbd_error_messages.names[-err]) ? + "?" : drbd_error_messages.names[-err]; +} + +const char *drbd_packet_name(enum drbd_packet cmd) +{ + /* too big for the array: 0xfffX */ + if (cmd =3D=3D P_INITIAL_META) + return "InitialMeta"; + if (cmd =3D=3D P_INITIAL_DATA) + return "InitialData"; + if (cmd =3D=3D P_CONNECTION_FEATURES) + return "ConnectionFeatures"; + return (cmd < 0 || cmd >=3D ARRAY_SIZE(__packet_names) || + !__packet_names[cmd]) ? + "?" : __packet_names[cmd]; } diff --git a/drivers/block/drbd/drbd_strings.h b/drivers/block/drbd/drbd_st= rings.h index 397c2eb9b666..a66d9f5fe4d5 100644 --- a/drivers/block/drbd/drbd_strings.h +++ b/drivers/block/drbd/drbd_strings.h @@ -6,9 +6,24 @@ #ifndef __DRBD_STRINGS_H #define __DRBD_STRINGS_H =20 -extern const char *drbd_conn_str(enum drbd_conns); -extern const char *drbd_role_str(enum drbd_role); -extern const char *drbd_disk_str(enum drbd_disk_state); -extern const char *drbd_set_st_err_str(enum drbd_state_rv); +struct state_names { + const char * const *names; + unsigned int size; +}; + +extern struct state_names drbd_conn_state_names; +extern struct state_names drbd_role_state_names; +extern struct state_names drbd_disk_state_names; +extern struct state_names drbd_error_messages; +extern struct state_names drbd_packet_names; + +enum drbd_packet; + +const char *drbd_conn_str(enum drbd_conns s); +const char *drbd_role_str(enum drbd_role s); +const char *drbd_disk_str(enum drbd_disk_state s); +const char *drbd_set_st_err_str(enum drbd_state_rv err); +const char *drbd_packet_name(enum drbd_packet cmd); + =20 #endif /* __DRBD_STRINGS_H */ --=20 2.55.0 From nobody Thu Sep 24 12:53:50 2026 Received: from mail-wm2-f13.google.com (mail-wm2-f13.google.com [74.125.225.141]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id BAEC05326A3 for ; Wed, 23 Sep 2026 14:06:51 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.225.141 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790172418; cv=none; b=pm8gEzsS8DTkNbRbhWr+ldZwiLvR6QdSogwKnNgwTqCncpCA+N5Etl3gEZ0weTrUXHQFzv4CIlP3V1g57XSHZjFz/3JWbzMZRX18MoZQvjFM6Y6OCsm2jI7EODo0RFxoImWtsD0PK7dLKppCaOZXbXuwQBHnLwgHc6Wg5AGdIRU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790172418; c=relaxed/simple; bh=ZuKtznTq4e3n+MbCr28rFujBIV666kK8FwgOMTSOLNw=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=Yn42ha4+7+xRSPVqngPW+ajnEYb28xsYhSq+ABQn5lkyLFfNtkHHe5Aj9Yd9o+4mxSMOlc9lV32jTtWsmQYrNjQwwOzDbna/yZ7u46Uc8TFyuonB5srCf0t0HCfT/0FV7JioCWDRlmarWjWvbf369+hOcHJaRlUU1VgNFadDNnI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linbit.com; spf=pass smtp.mailfrom=linbit.com; dkim=pass (2048-bit key) header.d=linbit-com.20251104.gappssmtp.com header.i=@linbit-com.20251104.gappssmtp.com header.b=xIwuyjYe; arc=none smtp.client-ip=74.125.225.141 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linbit.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linbit.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linbit-com.20251104.gappssmtp.com header.i=@linbit-com.20251104.gappssmtp.com header.b="xIwuyjYe" Received: by mail-wm2-f13.google.com with SMTP id 5b1f17b1804b1-49e721b5503so8377635e9.0 for ; Wed, 23 Sep 2026 07:06:51 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linbit-com.20251104.gappssmtp.com; s=20251104; t=1790172410; x=1790777210; darn=vger.kernel.org; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:from:to:cc:subject :date:message-id:reply-to:content-type; bh=uffotF5NTK2DASzVldYKkQNBUqb76T/GJhFbh5NUv0c=; b=xIwuyjYeN3CV2KM+5uBulZHMvuE2B0NrhR1UqjubZqi0tNp2fVKYQSj1XMx8sLo8u4 lWlLVI64ghjIVaNT5gx5gSwhNjENtdpzeZamFemoqp7h0EEV/WOiaZMsoXAABfAPE8gY 1BomUnA5WYqRZzLvzIn2Krq2Fp2IiAeHbmEaWtow1ZJMKBa8pi+QVhuFrGdGJw21RgG4 Tj0ACjoZK8MHFteHq1m720I4JIyVg70L7i8cnMCUQ3ChfRbduu+iuCqj3QxPVZFAIFM2 Js5CDjN+cdq6SlHkVT9W1NT/1gI150jr6TlgwtTyw/FmA9noxDdBoOQYOPEc8HF/h5e8 oTtw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1790172410; x=1790777210; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=uffotF5NTK2DASzVldYKkQNBUqb76T/GJhFbh5NUv0c=; b=RuVrQt60pvlCtl6kp9NxrP+qqYMjLVHDm4HdIqcd2K4hdqtu1UHbcfekpchWU/WolN aHRd8Z/a68YcwVkfiRRZ5y/8/f5PzafwfoKY9ZhhqTluKEI8GXZwxOQ2MaoBteexxUDD t/ASLIt/Y/Pgisk9oFHshtQEWnfIeH/GXk3z6SHeBoO4lFSgDjwjc+0aS+k0lHXhrisx PZT6Bp1s4XpiHqydbCHYlUN3gFz5PlVDRc58sH6VjWaVLnl5KvVaPJSdE1+NYv+8coNX ydjO4rM9uRG8mXqarao5rXiWtXB0ZYr+DyHb2kr51zcv/mrjuAOlrdA64BX/mdA3MkYi zOYQ== X-Forwarded-Encrypted: i=1; AKwUvByjjetmUbi57ZRFCduFbES802AXx5iW3bNwQ9mptXVFiEz65wWzWpENAi9y08mJzHItU66CbOsPTPSkqA0=@vger.kernel.org X-Gm-Message-State: AFuF++nl6cGVuQA+kALNnv6bb2OBJDWxHjM/qYOSffEgLJKtHn1/OGMR TEAz87atvzU/iCyhagMJ1PjLqlkQl9gpIMG1SvTACcvIWSG0eOA+ISqjNu9MHEkKrwo= X-Gm-Gg: AYBFou0llgHHNFaXeZkj89xIbXf20wDkyOOlcb9/bZOABSJ+5xlr/30wqDb29s9AsMC YbWUQjPYW9pkTvzyKEl8R62BtuuPP09pUFjnBh+OCzl/5YEw/EPdicyBkzBCdvmnF6/CH2PEhhJ x7bsHmwrBxmsh0kD19PA7PWqMFH7V7ntuYqkENmuUGTnWCpUAAGXrQdX7jCV3i/rSUYXgkyV3+u 5AtfikwEWQLzVDiwHaG9DBA9o6uyGTetRTxTJggZgkb9Yt+gBhTyUOv6EKybN8lZ6BCbK+u+qdm JwsAy0J6vqgsJCZQNGlzkBU3g9Ewp4Q0QkoawFDypffNGdCcggTHEn3NwFIhioVSV0H6i2LfNYb 4pPrLQcfqYebRAn7UqJNVWkO+gprVpY5UYeyhJeGmUHHHShDqWMIyAvYJQEaEGtw4J1kjBITyIo epWTpjB/wvI3+lsfGVL3c6tqnHck4ChP8BRyOx9NyZQWeNt99ah9DPbCj+PUcJjw5QX/einE+Rq mR09r63GioXSafGJNxjuxWCXzpLJVo= X-Received: by 2002:a05:600c:468c:b0:49f:dd6d:79a1 with SMTP id 5b1f17b1804b1-49fdf138a05mr42138115e9.26.1790172409446; Wed, 23 Sep 2026 07:06:49 -0700 (PDT) Received: from localhost.localdomain ([2001:4bc9:b01f:2334:39d8:9506:1776:f780]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-49fde18a8a0sm78087455e9.5.2026.09.23.07.06.47 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 23 Sep 2026 07:06:48 -0700 (PDT) From: =?UTF-8?q?Christoph=20B=C3=B6hmwalder?= To: Jens Axboe Cc: Philipp Reisner , Lars Ellenberg , drbd-dev@lists.linux.dev, linux-block@vger.kernel.org, linux-kernel@vger.kernel.org, =?UTF-8?q?Christoph=20B=C3=B6hmwalder?= , Lars Ellenberg Subject: [PATCH 7/7] drbd: rate limit log messages per object Date: Wed, 23 Sep 2026 16:06:08 +0200 Message-ID: <20260923140608.1116713-8-christoph.boehmwalder@linbit.com> X-Mailer: git-send-email 2.55.0 In-Reply-To: <20260923140608.1116713-1-christoph.boehmwalder@linbit.com> References: <20260923140608.1116713-1-christoph.boehmwalder@linbit.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable drbd_ratelimit() throttles with one static ratelimit state per call site. A device with a failing backing disk therefore keeps the log noisy no matter what the other devices do, and a message a single device produces in a burst suppresses the same message from every other device on the node. Give each resource, connection, peer device and device its own ratelimit states, selected by a class (GENERIC, and for devices also METADATA and BACKEND), and route every drbd_printk() through them: the existing drbd_err() & co. take the NOLIMIT class and behave as before, the new drbd_err_ratelimit() & co. throttle per object, and drbd_device_ratelimit(device, class) & co. are available for the sites that need the decision separately. Convert the drbd_ratelimit() users accordingly, choosing BACKEND for backing device I/O errors and METADATA for on-disk bitmap access errors. While the printk macros are being restructured anyway, let them mark messages from objects that have already been unregistered: a device, connection or resource that is deleted but still referenced is now flagged with UNREGISTERED/C_UNREGISTERED/R_UNREGISTERED, and its messages carry an "/unregistered/" prefix. This matches the logging infrastructure of DRBD 9. Signed-off-by: Christoph B=C3=B6hmwalder --- drivers/block/drbd/drbd_actlog.c | 3 +- drivers/block/drbd/drbd_bitmap.c | 6 +- drivers/block/drbd/drbd_int.h | 43 +++- drivers/block/drbd/drbd_main.c | 14 +- drivers/block/drbd/drbd_nl.c | 2 + drivers/block/drbd/drbd_polymorph_printk.h | 256 +++++++++++++-------- drivers/block/drbd/drbd_receiver.c | 9 +- drivers/block/drbd/drbd_req.c | 10 +- drivers/block/drbd/drbd_sender.c | 22 +- 9 files changed, 243 insertions(+), 122 deletions(-) diff --git a/drivers/block/drbd/drbd_actlog.c b/drivers/block/drbd/drbd_act= log.c index 04b8d50e4e9e..43345b82daa2 100644 --- a/drivers/block/drbd/drbd_actlog.c +++ b/drivers/block/drbd/drbd_actlog.c @@ -1138,8 +1138,7 @@ void drbd_rs_complete_io(struct drbd_device *device, = sector_t sector) bm_ext =3D e ? lc_entry(e, struct bm_extent, lce) : NULL; if (!bm_ext) { spin_unlock_irqrestore(&device->al_lock, flags); - if (drbd_ratelimit()) - drbd_err(device, "drbd_rs_complete_io() called, but extent not found\n"= ); + drbd_err_ratelimit(device, "%s() called, but extent not found\n", __func= __); return; } =20 diff --git a/drivers/block/drbd/drbd_bitmap.c b/drivers/block/drbd/drbd_bit= map.c index 8416c7e8257c..6892a99eb6f0 100644 --- a/drivers/block/drbd/drbd_bitmap.c +++ b/drivers/block/drbd/drbd_bitmap.c @@ -109,7 +109,7 @@ struct drbd_bitmap { static void __bm_print_lock_info(struct drbd_device *device, const char *f= unc) { struct drbd_bitmap *b =3D device->bitmap; - if (!drbd_ratelimit()) + if (!drbd_device_ratelimit(device, GENERIC)) return; drbd_err(device, "FIXME %s[%d] in %s, bitmap locked for '%s' by %s[%d]\n", current->comm, task_pid_nr(current), @@ -948,7 +948,7 @@ static void drbd_bm_endio(struct bio *bio) bm_set_page_io_err(b->bm_pages[idx]); /* Not identical to on disk version of it. * Is BM_PAGE_IO_ERROR enough? */ - if (drbd_ratelimit()) + if (drbd_device_ratelimit(device, BACKEND)) drbd_err(device, "IO ERROR %d on bitmap page idx %u\n", bio->bi_status, idx); } else { @@ -1009,7 +1009,7 @@ static void bm_page_io_async(struct drbd_bm_aio_ctx *= ctx, int page_nr) __must_ho else len =3D PAGE_SIZE; } else { - if (drbd_ratelimit()) { + if (drbd_device_ratelimit(device, METADATA)) { drbd_err(device, "Invalid offset during on-disk bitmap access: " "page idx %u, sector %llu\n", page_nr, on_disk_sector); } diff --git a/drivers/block/drbd/drbd_int.h b/drivers/block/drbd/drbd_int.h index 297deac20f7e..40be382b24d2 100644 --- a/drivers/block/drbd/drbd_int.h +++ b/drivers/block/drbd/drbd_int.h @@ -449,6 +449,7 @@ enum { RS_START, /* tell worker to start resync/OV */ RS_PROGRESS, /* tell worker that resync made significant progress */ RS_DONE, /* tell worker that resync is done */ + UNREGISTERED, /* minor removed, device may still be referenced */ }; =20 struct drbd_bitmap; /* opaque for drbd_device */ @@ -573,10 +574,21 @@ enum { DISCONNECT_SENT, =20 DEVICE_WORK_PENDING, /* tell worker that some device has pending work */ + C_UNREGISTERED, /* removed from the resource, may still be referenced */ }; =20 enum which_state { NOW, OLD =3D NOW, NEW }; =20 +/* flag bits per resource */ +enum { + R_UNREGISTERED, /* removed from the resources list, may still be referen= ced */ +}; + +enum drbd_per_resource_ratelimit { + D_RL_R_NOLIMIT =3D -1, + D_RL_R_GENERIC, +}; + struct drbd_resource { char *name; #ifdef CONFIG_DEBUG_FS @@ -587,6 +599,10 @@ struct drbd_resource { #endif struct kref kref; struct idr devices; /* volume number to device mapping */ + + struct ratelimit_state ratelimit[1]; + + unsigned long flags; struct list_head connections; struct list_head resources; struct res_opts res_opts; @@ -612,6 +628,11 @@ struct drbd_thread_timing_details unsigned int cb_nr; }; =20 +enum drbd_per_connection_ratelimit { + D_RL_C_NOLIMIT =3D -1, + D_RL_C_GENERIC, +}; + struct drbd_connection { struct list_head connections; struct drbd_resource *resource; @@ -622,6 +643,9 @@ struct drbd_connection { #endif struct kref kref; struct idr peer_devices; /* volume number to peer device mapping */ + + struct ratelimit_state ratelimit[1]; + enum drbd_conns cstate; /* Only C_STANDALONE to C_WF_REPORT_PARAMS */ struct mutex cstate_mutex; /* Protects graceful disconnects */ unsigned int connect_cnt; /* Inc each time a connection is established */ @@ -730,16 +754,32 @@ struct submit_worker { struct list_head writes; }; =20 +enum drbd_per_peer_device_ratelimit { + D_RL_PD_NOLIMIT =3D -1, + D_RL_PD_GENERIC, +}; + struct drbd_peer_device { struct list_head peer_devices; struct drbd_device *device; struct drbd_connection *connection; struct work_struct send_acks_work; + + struct ratelimit_state ratelimit[1]; + #ifdef CONFIG_DEBUG_FS struct dentry *debugfs_peer_dev; #endif }; =20 +enum drbd_per_device_ratelimit { + D_RL_D_NOLIMIT =3D -1, + D_RL_D_GENERIC, + D_RL_D_METADATA, + D_RL_D_BACKEND, + __D_RL_D_N +}; + struct drbd_device { struct drbd_resource *resource; struct list_head peer_devices; @@ -755,6 +795,7 @@ struct drbd_device { struct dentry *debugfs_vol_data_gen_id; struct dentry *debugfs_vol_ed_gen_id; #endif + struct ratelimit_state ratelimit[__D_RL_D_N]; =20 unsigned int vnr; /* volume number within the connection */ unsigned int minor; /* device minor number */ @@ -1622,7 +1663,7 @@ static inline void __drbd_chk_io_error_(struct drbd_d= evice *device, switch (ep) { case EP_PASS_ON: /* FIXME would this be better named "Ignore"? */ if (df =3D=3D DRBD_READ_ERROR || df =3D=3D DRBD_WRITE_ERROR) { - if (drbd_ratelimit()) + if (drbd_device_ratelimit(device, BACKEND)) drbd_err(device, "Local IO failed in %s.\n", where); if (device->state.disk > D_INCONSISTENT) _drbd_set_state(_NS(device, disk, D_INCONSISTENT), CS_HARD, NULL); diff --git a/drivers/block/drbd/drbd_main.c b/drivers/block/drbd/drbd_main.c index fc674acf8bd4..aa6ddb2bac15 100644 --- a/drivers/block/drbd/drbd_main.c +++ b/drivers/block/drbd/drbd_main.c @@ -2288,6 +2288,7 @@ void drbd_free_resource(struct drbd_resource *resourc= e) struct drbd_connection *connection, *tmp; =20 for_each_connection_safe(connection, tmp, resource) { + set_bit(C_UNREGISTERED, &connection->flags); list_del(&connection->connections); drbd_debugfs_connection_cleanup(connection); kref_put(&connection->kref, drbd_destroy_connection); @@ -2515,6 +2516,7 @@ struct drbd_resource *drbd_create_resource(const char= *name) if (!zalloc_cpumask_var(&resource->cpu_mask, GFP_KERNEL)) goto fail_free_name; kref_init(&resource->kref); + ratelimit_state_init(&resource->ratelimit[D_RL_R_GENERIC], 5 * HZ, 10); idr_init(&resource->devices); INIT_LIST_HEAD(&resource->connections); resource->write_ordering =3D WO_BDEV_FLUSH; @@ -2583,6 +2585,7 @@ struct drbd_connection *conn_create(const char *name,= struct res_opts *res_opts) connection->ack_receiver.connection =3D connection; =20 kref_init(&connection->kref); + ratelimit_state_init(&connection->ratelimit[D_RL_C_GENERIC], 5 * HZ, /* n= o burst */ 1); =20 connection->resource =3D resource; =20 @@ -2667,6 +2670,10 @@ enum drbd_ret_code drbd_create_device(struct drbd_co= nfig_context *adm_ctx, unsig return ERR_NOMEM; kref_init(&device->kref); =20 + ratelimit_state_init(&device->ratelimit[D_RL_D_GENERIC], 5 * HZ, /* no bu= rst */ 1); + ratelimit_state_init(&device->ratelimit[D_RL_D_METADATA], 5 * HZ, 10); + ratelimit_state_init(&device->ratelimit[D_RL_D_BACKEND], 5 * HZ, 10); + kref_get(&resource->kref); device->resource =3D resource; device->minor =3D minor; @@ -2726,6 +2733,8 @@ enum drbd_ret_code drbd_create_device(struct drbd_con= fig_context *adm_ctx, unsig goto out_idr_remove_from_resource; peer_device->connection =3D connection; peer_device->device =3D device; + ratelimit_state_init(&peer_device->ratelimit[D_RL_PD_GENERIC], + 5 * HZ, /* no burst */ 1); =20 list_add(&peer_device->peer_devices, &device->peer_devices); kref_get(&device->kref); @@ -3677,9 +3686,8 @@ _drbd_insert_fault(struct drbd_device *device, unsign= ed int type) if (ret) { drbd_fault_count++; =20 - if (drbd_ratelimit()) - drbd_warn(device, "***Simulating %s failure\n", - _drbd_fault_str(type)); + drbd_warn_ratelimit(device, "***Simulating %s failure\n", + _drbd_fault_str(type)); } =20 return ret; diff --git a/drivers/block/drbd/drbd_nl.c b/drivers/block/drbd/drbd_nl.c index 51ba8e542928..aa7aae9003be 100644 --- a/drivers/block/drbd/drbd_nl.c +++ b/drivers/block/drbd/drbd_nl.c @@ -4496,6 +4496,7 @@ static enum drbd_ret_code adm_del_minor(struct drbd_d= evice *device) notify_device_state(NULL, 0, device, NULL, NOTIFY_DESTROY); mutex_unlock(¬ification_mutex); =20 + set_bit(UNREGISTERED, &device->flags); drbd_delete_device(device); return NO_ERROR; } else @@ -4540,6 +4541,7 @@ static int adm_del_resource(struct drbd_resource *res= ource) mutex_unlock(¬ification_mutex); =20 mutex_lock(&resources_mutex); + set_bit(R_UNREGISTERED, &resource->flags); list_del_rcu(&resource->resources); mutex_unlock(&resources_mutex); /* Make sure all threads have actually stopped: state handling only diff --git a/drivers/block/drbd/drbd_polymorph_printk.h b/drivers/block/drb= d/drbd_polymorph_printk.h index 8e0082d139ba..71dcdd1f45b9 100644 --- a/drivers/block/drbd/drbd_polymorph_printk.h +++ b/drivers/block/drbd/drbd_polymorph_printk.h @@ -11,104 +11,179 @@ #define DYNAMIC_DEBUG_BRANCH(D) false #endif =20 +#define __drbd_printk(level, fmt, args...) \ + printk(level fmt, ## args) +#define __drbd_dyn_dbg(descriptor, fmt, args...) \ + __dynamic_pr_debug(descriptor, fmt, ## args) + +#define ___drbd_printk_device(prmacro, rlt, device, lvl_or_desc, fmt, args= ...)\ +({ \ + const struct drbd_device *__d =3D \ + (const struct drbd_device *)(device); \ + const struct drbd_resource *__r =3D __d->resource; \ + const char *__unregistered =3D ""; \ + if (test_bit(UNREGISTERED, &__d->flags)) \ + __unregistered =3D "/unregistered/"; \ + if (drbd_device_ratelimit(__d, rlt)) \ + prmacro(lvl_or_desc, "drbd %s%s/%u drbd%u: " fmt, \ + __unregistered, __r->name, __d->vnr, __d->minor,\ + ## args); \ +}) + +#define ___drbd_printk_resource(prmacro, rlt, resource, lvl_or_desc, fmt, = args...)\ +({ \ + const struct drbd_resource *__r =3D \ + (const struct drbd_resource *)(resource); \ + const char *__unregistered =3D ""; \ + if (test_bit(R_UNREGISTERED, &__r->flags)) \ + __unregistered =3D "/unregistered/"; \ + if (drbd_resource_ratelimit(__r, rlt)) \ + prmacro(lvl_or_desc, "drbd %s%s: " fmt, \ + __unregistered, __r->name, ## args); \ +}) =20 -#define __drbd_printk_drbd_device_prep(device) \ - const struct drbd_device *__d =3D (device); \ - const struct drbd_resource *__r =3D __d->resource -#define __drbd_printk_drbd_device_fmt(fmt) "drbd %s/%u drbd%u: " fmt -#define __drbd_printk_drbd_device_args() __r->name, __d->vnr, __d->minor -#define __drbd_printk_drbd_device_unprep() - -#define __drbd_printk_drbd_peer_device_prep(peer_device) \ - const struct drbd_device *__d; \ - const struct drbd_resource *__r; \ - __d =3D (peer_device)->device; \ - __r =3D __d->resource -#define __drbd_printk_drbd_peer_device_fmt(fmt) \ - "drbd %s/%u drbd%u: " fmt -#define __drbd_printk_drbd_peer_device_args() \ - __r->name, __d->vnr, __d->minor -#define __drbd_printk_drbd_peer_device_unprep() - -#define __drbd_printk_drbd_resource_prep(resource) \ - const struct drbd_resource *__r =3D resource -#define __drbd_printk_drbd_resource_fmt(fmt) "drbd %s: " fmt -#define __drbd_printk_drbd_resource_args() __r->name -#define __drbd_printk_drbd_resource_unprep(resource) - -#define __drbd_printk_drbd_connection_prep(connection) \ - const struct drbd_connection *__c =3D (connection); \ - const struct drbd_resource *__r =3D __c->resource -#define __drbd_printk_drbd_connection_fmt(fmt) \ - "drbd %s: " fmt -#define __drbd_printk_drbd_connection_args() \ - __r->name -#define __drbd_printk_drbd_connection_unprep() +/* + * As long as the connection is still "registered", the resource + * can not yet be "unregistered", no need to test R_UNREGISTERED + */ +#define ___drbd_printk_peer_device(prmacro, rlt, peer_device, lvl_or_desc,= fmt, args...)\ +({ \ + const struct drbd_peer_device *__pd =3D \ + (const struct drbd_peer_device *)(peer_device); \ + const struct drbd_device *__d =3D __pd->device; \ + const struct drbd_connection *__c =3D __pd->connection; \ + const struct drbd_resource *__r =3D __d->resource; \ + const char *__unregistered =3D ""; \ + if (test_bit(C_UNREGISTERED, &__c->flags)) \ + __unregistered =3D "/unregistered/"; \ + if (drbd_peer_device_ratelimit(__pd, rlt)) \ + prmacro(lvl_or_desc, "drbd %s%s/%u drbd%u: " fmt, \ + __unregistered, __r->name, __d->vnr, __d->minor,\ + ## args); \ +}) + +#define ___drbd_printk_connection(prmacro, rlt, connection, lvl_or_desc, f= mt, args...) \ +({ \ + const struct drbd_connection *__c =3D \ + (const struct drbd_connection *)(connection); \ + const struct drbd_resource *__r =3D __c->resource; \ + const char *__unregistered =3D ""; \ + if (test_bit(C_UNREGISTERED, &__c->flags)) \ + __unregistered =3D "/unregistered/"; \ + if (drbd_connection_ratelimit(__c, rlt)) \ + prmacro(lvl_or_desc, "drbd %s%s: " fmt, \ + __unregistered, __r->name, ## args); \ +}) + +#define __drbd_printk_device(rlt, device, level, fmt, args...)\ + ___drbd_printk_device(__drbd_printk, rlt, device, level, fmt, ## args) +#define __drbd_printk_resource(rlt, resource, level, fmt, args...)\ + ___drbd_printk_resource(__drbd_printk, rlt, resource, level, fmt, ## arg= s) +#define __drbd_printk_peer_device(rlt, peer_device, level, fmt, args...)\ + ___drbd_printk_peer_device(__drbd_printk, rlt, peer_device, level, fmt, = ## args) +#define __drbd_printk_connection(rlt, connection, level, fmt, args...)\ + ___drbd_printk_connection(__drbd_printk, rlt, connection, level, fmt, ##= args) =20 void drbd_printk_with_wrong_object_type(void); void drbd_dyn_dbg_with_wrong_object_type(void); =20 #define __drbd_printk_choose_cond(obj, struct_name) \ - (__builtin_types_compatible_p(typeof(obj), struct struct_name *) || \ - __builtin_types_compatible_p(typeof(obj), const struct struct_name *)) -#define __drbd_printk_if_same_type(obj, struct_name, level, fmt, args...) \ - __drbd_printk_choose_cond(obj, struct_name), \ -({ \ - __drbd_printk_ ## struct_name ## _prep((const struct struct_name *)(obj))= ; \ - printk(level __drbd_printk_ ## struct_name ## _fmt(fmt), \ - __drbd_printk_ ## struct_name ## _args(), ## args); \ - __drbd_printk_ ## struct_name ## _unprep(); \ -}) - -#define drbd_printk(level, obj, fmt, args...) \ - __builtin_choose_expr( \ - __drbd_printk_if_same_type(obj, drbd_device, level, fmt, ## args), \ - __builtin_choose_expr( \ - __drbd_printk_if_same_type(obj, drbd_resource, level, fmt, ## args), \ - __builtin_choose_expr( \ - __drbd_printk_if_same_type(obj, drbd_connection, level, fmt, ## arg= s), \ - __builtin_choose_expr( \ - __drbd_printk_if_same_type(obj, drbd_peer_device, level, fmt, ## args), \ - drbd_printk_with_wrong_object_type())))) + (__builtin_types_compatible_p(typeof(obj), struct drbd_ ## struct_name *)= || \ + __builtin_types_compatible_p(typeof(obj), const struct drbd_ ## struct_n= ame *)) + +#define __drbd_obj_ratelimit(struct_name, obj, rlt) \ + ({ \ + int __rlt =3D (rlt); \ + BUILD_BUG_ON(!__drbd_printk_choose_cond(obj, struct_name)); \ + BUILD_BUG_ON(__rlt < -1); \ + BUILD_BUG_ON(__rlt >=3D (int)ARRAY_SIZE(obj->ratelimit)); \ + __rlt =3D=3D -1 ? 1 \ + : __ratelimit(/* unconst cast ratelimit state */ \ + (struct ratelimit_state *)(unsigned long) \ + &obj->ratelimit[__rlt]); \ + }) + +#define drbd_device_ratelimit(obj, rlt) \ + __drbd_obj_ratelimit(device, obj, D_RL_D_ ## rlt) +#define drbd_resource_ratelimit(obj, rlt) \ + __drbd_obj_ratelimit(resource, obj, D_RL_R_ ## rlt) +#define drbd_connection_ratelimit(obj, rlt) \ + __drbd_obj_ratelimit(connection, obj, D_RL_C_ ## rlt) +#define drbd_peer_device_ratelimit(obj, rlt) \ + __drbd_obj_ratelimit(peer_device, obj, D_RL_PD_ ## rlt) + +#define drbd_printk(ratelimit_type, level, obj, fmt, args...) \ + __builtin_choose_expr(__drbd_printk_choose_cond(obj, device), \ + __drbd_printk_device(ratelimit_type, obj, level, fmt, ## args), \ + \ + __builtin_choose_expr(__drbd_printk_choose_cond(obj, resource), \ + __drbd_printk_resource(ratelimit_type, obj, level, fmt, ## args), \ + \ + __builtin_choose_expr(__drbd_printk_choose_cond(obj, connection), \ + __drbd_printk_connection(ratelimit_type, obj, level, fmt, ## args), \ + \ + __builtin_choose_expr(__drbd_printk_choose_cond(obj, peer_device), \ + __drbd_printk_peer_device(ratelimit_type, obj, level, fmt, ## args), \ + \ + drbd_printk_with_wrong_object_type() \ + )))) =20 #define __drbd_dyn_dbg_if_same_type(obj, struct_name, fmt, args...) \ - __drbd_printk_choose_cond(obj, struct_name), \ ({ \ DEFINE_DYNAMIC_DEBUG_METADATA(descriptor, fmt); \ if (DYNAMIC_DEBUG_BRANCH(descriptor)) { \ - __drbd_printk_ ## struct_name ## _prep((const struct struct_name *)(obj)= ); \ - __dynamic_pr_debug(&descriptor, __drbd_printk_ ## struct_name ## _fmt(fm= t), \ - __drbd_printk_ ## struct_name ## _args(), ## args); \ - __drbd_printk_ ## struct_name ## _unprep(); \ + ___drbd_printk_ ## struct_name( \ + __drbd_dyn_dbg, \ + NOLIMIT, obj, \ + &descriptor, fmt, ## args); \ } \ }) =20 #define dynamic_drbd_dbg(obj, fmt, args...) \ - __builtin_choose_expr( \ - __drbd_dyn_dbg_if_same_type(obj, drbd_device, fmt, ## args), \ - __builtin_choose_expr( \ - __drbd_dyn_dbg_if_same_type(obj, drbd_resource, fmt, ## args), \ - __builtin_choose_expr( \ - __drbd_dyn_dbg_if_same_type(obj, drbd_connection, fmt, ## args), \ - __builtin_choose_expr( \ - __drbd_dyn_dbg_if_same_type(obj, drbd_peer_device, fmt, ## args), \ - drbd_dyn_dbg_with_wrong_object_type())))) - -#define drbd_emerg(device, fmt, args...) \ - drbd_printk(KERN_EMERG, device, fmt, ## args) -#define drbd_alert(device, fmt, args...) \ - drbd_printk(KERN_ALERT, device, fmt, ## args) -#define drbd_crit(device, fmt, args...) \ - drbd_printk(KERN_CRIT, device, fmt, ## args) -#define drbd_err(device, fmt, args...) \ - drbd_printk(KERN_ERR, device, fmt, ## args) -#define drbd_warn(device, fmt, args...) \ - drbd_printk(KERN_WARNING, device, fmt, ## args) -#define drbd_notice(device, fmt, args...) \ - drbd_printk(KERN_NOTICE, device, fmt, ## args) -#define drbd_info(device, fmt, args...) \ - drbd_printk(KERN_INFO, device, fmt, ## args) - + __builtin_choose_expr(__drbd_printk_choose_cond(obj, device), \ + __drbd_dyn_dbg_if_same_type(obj, device, fmt, ## args), \ + \ + __builtin_choose_expr(__drbd_printk_choose_cond(obj, resource), \ + __drbd_dyn_dbg_if_same_type(obj, resource, fmt, ## args), \ + \ + __builtin_choose_expr(__drbd_printk_choose_cond(obj, connection), \ + __drbd_dyn_dbg_if_same_type(obj, connection, fmt, ## args), \ + \ + __builtin_choose_expr(__drbd_printk_choose_cond(obj, peer_device), \ + __drbd_dyn_dbg_if_same_type(obj, peer_device, fmt, ## args), \ + \ + drbd_dyn_dbg_with_wrong_object_type() \ + )))) + +#define drbd_emerg_ratelimit(obj, fmt, args...) \ + drbd_printk(GENERIC, KERN_EMERG, obj, fmt, ## args) +#define drbd_alert_ratelimit(obj, fmt, args...) \ + drbd_printk(GENERIC, KERN_ALERT, obj, fmt, ## args) +#define drbd_crit_ratelimit(obj, fmt, args...) \ + drbd_printk(GENERIC, KERN_CRIT, obj, fmt, ## args) +#define drbd_err_ratelimit(obj, fmt, args...) \ + drbd_printk(GENERIC, KERN_ERR, obj, fmt, ## args) +#define drbd_warn_ratelimit(obj, fmt, args...) \ + drbd_printk(GENERIC, KERN_WARNING, obj, fmt, ## args) +#define drbd_notice_ratelimit(obj, fmt, args...) \ + drbd_printk(GENERIC, KERN_NOTICE, obj, fmt, ## args) +#define drbd_info_ratelimit(obj, fmt, args...) \ + drbd_printk(GENERIC, KERN_INFO, obj, fmt, ## args) + +#define drbd_emerg(obj, fmt, args...) \ + drbd_printk(NOLIMIT, KERN_EMERG, obj, fmt, ## args) +#define drbd_alert(obj, fmt, args...) \ + drbd_printk(NOLIMIT, KERN_ALERT, obj, fmt, ## args) +#define drbd_crit(obj, fmt, args...) \ + drbd_printk(NOLIMIT, KERN_CRIT, obj, fmt, ## args) +#define drbd_err(obj, fmt, args...) \ + drbd_printk(NOLIMIT, KERN_ERR, obj, fmt, ## args) +#define drbd_warn(obj, fmt, args...) \ + drbd_printk(NOLIMIT, KERN_WARNING, obj, fmt, ## args) +#define drbd_notice(obj, fmt, args...) \ + drbd_printk(NOLIMIT, KERN_NOTICE, obj, fmt, ## args) +#define drbd_info(obj, fmt, args...) \ + drbd_printk(NOLIMIT, KERN_INFO, obj, fmt, ## args) =20 #define drbd_ratelimit() \ ({ \ @@ -122,7 +197,7 @@ void drbd_dyn_dbg_with_wrong_object_type(void); do { \ if (!(exp)) \ drbd_err(x, "ASSERTION %s FAILED in %s\n", \ - #exp, __func__); \ + #exp, __func__); \ } while (0) =20 /** @@ -130,12 +205,13 @@ void drbd_dyn_dbg_with_wrong_object_type(void); * * Unlike the assert macro, this macro returns a boolean result. */ -#define expect(x, exp) ({ \ - bool _bool =3D (exp); \ - if (!_bool && drbd_ratelimit()) \ - drbd_err(x, "ASSERTION %s FAILED in %s\n", \ - #exp, __func__); \ - _bool; \ +#define expect(x, exp) ({ \ + bool _bool =3D (exp); \ + if (!_bool) \ + drbd_err_ratelimit(x, \ + "ASSERTION %s FAILED in %s\n", \ + #exp, __func__); \ + _bool; \ }) =20 #endif diff --git a/drivers/block/drbd/drbd_receiver.c b/drivers/block/drbd/drbd_r= eceiver.c index fa87cbba756b..d31b05bac2c1 100644 --- a/drivers/block/drbd/drbd_receiver.c +++ b/drivers/block/drbd/drbd_receiver.c @@ -1981,8 +1981,7 @@ static int receive_RSDataReply(struct drbd_connection= *connection, struct packet * or in drbd_peer_request_endio. */ err =3D recv_resync_read(peer_device, sector, pi); } else { - if (drbd_ratelimit()) - drbd_err(device, "Can not write resync data to local disk.\n"); + drbd_err_ratelimit(device, "Can not write resync data to local disk.\n"); =20 err =3D drbd_drain_block(peer_device, pi->size); =20 @@ -2669,9 +2668,9 @@ static int receive_DataRequest(struct drbd_connection= *connection, struct packet default: BUG(); } - if (verb && drbd_ratelimit()) - drbd_err(device, "Can not satisfy peer's read request, " - "no local data.\n"); + if (verb) + drbd_err_ratelimit(device, + "Can not satisfy peer's read request, no local data.\n"); =20 /* drain possibly payload */ return drbd_drain_block(peer_device, pi->size); diff --git a/drivers/block/drbd/drbd_req.c b/drivers/block/drbd/drbd_req.c index f16b925fecc1..1412524e849c 100644 --- a/drivers/block/drbd/drbd_req.c +++ b/drivers/block/drbd/drbd_req.c @@ -139,7 +139,7 @@ void drbd_req_destroy(struct kref *kref) if (get_ldev_if_state(device, D_FAILED)) { drbd_al_complete_io(device, &req->i); put_ldev(device); - } else if (drbd_ratelimit()) { + } else if (drbd_device_ratelimit(device, BACKEND)) { drbd_warn(device, "Should have called drbd_al_complete_io(, %llu, %u),= " "but my Disk seems to have failed :(\n", (unsigned long long) req->i.sector, req->i.size); @@ -513,7 +513,7 @@ static void mod_rq_state(struct drbd_request *req, stru= ct bio_and_error *m, =20 static void drbd_report_io_error(struct drbd_device *device, struct drbd_r= equest *req) { - if (!drbd_ratelimit()) + if (!drbd_device_ratelimit(device, BACKEND)) return; =20 drbd_warn(device, "local %s IO error sector %llu+%u on %pg\n", @@ -1403,9 +1403,9 @@ static void drbd_send_and_submit(struct drbd_device *= device, struct drbd_request submit_private_bio =3D true; } else if (no_remote) { nodata: - if (drbd_ratelimit()) - drbd_err(device, "IO ERROR: neither local nor remote data, sector %llu+= %u\n", - (unsigned long long)req->i.sector, req->i.size >> 9); + drbd_err_ratelimit(device, + "IO ERROR: neither local nor remote data, sector %llu+%u\n", + (unsigned long long)req->i.sector, req->i.size >> 9); /* A write may have been queued for send_oos, however. * So we can not simply free it, we must go through drbd_req_put_complet= ion_ref() */ } diff --git a/drivers/block/drbd/drbd_sender.c b/drivers/block/drbd/drbd_sen= der.c index 69b3676961d2..b848adfaf494 100644 --- a/drivers/block/drbd/drbd_sender.c +++ b/drivers/block/drbd/drbd_sender.c @@ -171,7 +171,7 @@ void drbd_peer_request_endio(struct bio *bio) bool is_discard =3D bio_op(bio) =3D=3D REQ_OP_WRITE_ZEROES || bio_op(bio) =3D=3D REQ_OP_DISCARD; =20 - if (bio->bi_status && drbd_ratelimit()) + if (bio->bi_status && drbd_device_ratelimit(device, BACKEND)) drbd_warn(device, "%s: error=3D%d s=3D%llus\n", is_write ? (is_discard ? "discard" : "write") : "read", bio->bi_status, @@ -235,7 +235,7 @@ void drbd_request_endio(struct bio *bio) * though we still will complain noisily about it. */ if (unlikely(req->rq_state & RQ_LOCAL_ABORTED)) { - if (drbd_ratelimit()) + if (drbd_device_ratelimit(device, BACKEND)) drbd_emerg(device, "delayed completion of aborted local request; disk-t= imeout may be too aggressive\n"); =20 if (!bio->bi_status) @@ -1050,9 +1050,8 @@ int w_e_end_data_req(struct drbd_work *w, int cancel) if (likely((peer_req->flags & EE_WAS_ERROR) =3D=3D 0)) { err =3D drbd_send_block(peer_device, P_DATA_REPLY, peer_req); } else { - if (drbd_ratelimit()) - drbd_err(device, "Sending NegDReply. sector=3D%llus.\n", - (unsigned long long)peer_req->i.sector); + drbd_err_ratelimit(peer_device, "Sending NegDReply. sector=3D%llus.\n", + (unsigned long long)peer_req->i.sector); =20 err =3D drbd_send_ack(peer_device, P_NEG_DREPLY, peer_req); } @@ -1122,15 +1121,13 @@ int w_e_end_rsdata_req(struct drbd_work *w, int can= cel) else err =3D drbd_send_block(peer_device, P_RS_DATA_REPLY, peer_req); } else { - if (drbd_ratelimit()) - drbd_err(device, "Not sending RSDataReply, " - "partner DISKLESS!\n"); + drbd_err_ratelimit(peer_device, + "Not sending RSDataReply, partner DISKLESS!\n"); err =3D 0; } } else { - if (drbd_ratelimit()) - drbd_err(device, "Sending NegRSDReply. sector %llus.\n", - (unsigned long long)peer_req->i.sector); + drbd_err_ratelimit(peer_device, "Sending NegRSDReply. sector %llus.\n", + (unsigned long long)peer_req->i.sector); =20 err =3D drbd_send_ack(peer_device, P_NEG_RS_DREPLY, peer_req); =20 @@ -1197,8 +1194,7 @@ int w_e_end_csum_rs_req(struct drbd_work *w, int canc= el) } } else { err =3D drbd_send_ack(peer_device, P_NEG_RS_DREPLY, peer_req); - if (drbd_ratelimit()) - drbd_err(device, "Sending NegDReply. I guess it gets messy.\n"); + drbd_err_ratelimit(device, "Sending NegDReply. I guess it gets messy.\n"= ); } if (unlikely(err)) drbd_err(device, "drbd_send_block/ack() failed\n"); --=20 2.55.0