From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mta0.migadu.com (out-20.mta0.migadu.com [91.218.175.20]) (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 D27B137FF54 for ; Mon, 28 Sep 2026 22:16:49 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=91.218.175.20 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790633813; cv=none; b=NUiHHgBqjTtGlY7QI+7XYRFFFmWNd+GP5WfYkVYwb+Y/FkHaD9p888z1DeEz8dl6U7SauOVRJ9TgL5lfhQGth3QaxHcMkndrtwuHFr1jKOcMvArHiLiu/Noq0cO2TBcOZgSYDhFFAquJjL0YxQPNQeVIGpzVjMA0M91EqnRcQTc= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790633813; c=relaxed/simple; bh=wrSQvdUGW5Jkt4r5YgB+gmI1KNzrp9xbeWzGNC1IUdM=; h=From:To:Cc:Subject:Date:Message-ID:MIME-Version; b=UFsJYSVCneuEN1MVItChT3/K7tTU3pP2MVmsYSBW8n9vhwRym0JSORBL6Qarjvz83B9doPgJJ4bpNiX3ieEzV2Ld6whlRyfSyLh9L6x7eWAhu5rz0eY/BBSUJEzUDIgkGFXi7BpBmtGXTTWzFY+r2Kx5hUD1jrWN2w2p9XaBYGs= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev; spf=pass smtp.mailfrom=linux.dev; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b=abMjA9SW; arc=none smtp.client-ip=91.218.175.20 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.dev Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b="abMjA9SW" X-Envelope-To: linux-kernel@vger.kernel.org DKIM-Signature: a=rsa-sha256; bh=wrSQvdUGW5Jkt4r5YgB+gmI1KNzrp9xbeWzGNC1IUdM=; c=simple/simple; d=linux.dev; h=from:to:subject:date:message-id:mime-version:content-type; s=key1; t=1790633807; v=1; x=1791238607; b=abMjA9SWmRwyYsVnyaJWu13nwPJczGgK+fjy/W2hDPngnUuvhI9lT0/T/hc3NKPn+cRmf7U6 N3dgcJRP9t/80Mw7e6CuJblgGDCMzMcuakoZRbvyv8AUquoVlS9dj/kP2lJwIOI3oCAXNlHPUeW WLczK6zFBjS6gfXwA/Mzsc0M= X-Envelope-To: linux-kernel@vger.kernel.org Received: by smtp.migadu.com with ESMTPS id e91c9c1cacdb44e5; Mon, 28 Sep 2026 22:16:47 +0000 X-Mizu-Trace-ID: e91c9c1cacdb44e5 X-Migadu-Flow: FLOW_OUT From: Md Haris Iqbal To: Jens Axboe , linux-block@vger.kernel.org Cc: linux-kernel@vger.kernel.org, Christoph Hellwig , Keith Busch , Jonathan Corbet , linux-doc@vger.kernel.org, Md Haris Iqbal Subject: [v3 for-next 0/3] block: delay support for error injection Date: Tue, 29 Sep 2026 00:16:31 +0200 Message-ID: <20260928221634.43239-1-haris.iqbal@linux.dev> X-Mailer: git-send-email 2.53.0 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Error injection can only fail a bio today. This adds a delay_us option so that a rule can hold a bio back first, to model a slow device. The delay happens above the driver, so it tests the code waiting above the block layer, not the blk-mq timeout handler. A delayed bio is marked with a new BIO_ERROR_INJECTED flag so the rules are not applied to it again, even after a split. Christoph asked on v2 to avoid the flag by allowing a delay only together with an error. I kept delay-only rules, as a slow device that succeeds is the more useful case, so the flag question is still open. Holding a bio back reorders it against bios submitted later, which breaks sequential write ordering on zoned devices. Patch 1 is a prep cleanup. It moves the rejection of an unknown status tag into the parser, because patch 2 makes a rule without a status valid. Tested in a VM. v1: https://lore.kernel.org/linux-block/20260827000115.128093-1-haris.iqbal@linux.dev/ v2: https://lore.kernel.org/linux-block/20260830012002.80275-1-haris.iqbal@linux.dev/ Changes since v2: - Patch 1: return bool, rewrite the commit message. - Patch 2: drop __submit_bio_noacct_nocheck(); the flag alone stops the rules being applied again. Log the error when a delayed bio is failed. - Patch 3: trim the documentation. Changes since v1: - Add the BIO_ERROR_INJECTED bio flag. v1 only resubmitted a delayed bio below the injection hook, which left the remainder of a split going through the hook and matching the same rule again, so a bio was held once per split instead of once. - Patch 1: tag_to_blk_status() returns an error and passes the status back through a pointer, instead of returning BLK_STS_OK for both the "OK" tag and an unknown one. A delay-only rule has no status, so the two have to be told apart. - Documentation: a delayed bio is held once rather than once per split. Md Haris Iqbal (3): block: Reject unknown status tags in error injection rules block: allow error injection rules to delay bios Documentation: block: document error injection delay feature Documentation/block/error-injection.rst | 39 +++++- block/blk-core.c | 14 +- block/blk.h | 2 +- block/error-injection.c | 167 +++++++++++++++++++++--- block/error-injection.h | 1 + include/linux/blk_types.h | 1 + 6 files changed, 192 insertions(+), 32 deletions(-) -- 2.53.0