From nobody Tue Dec 16 16:38:47 2025 Received: from mail-pl1-f226.google.com (mail-pl1-f226.google.com [209.85.214.226]) (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 D9635150997 for ; Thu, 11 Dec 2025 05:16:32 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.226 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765430194; cv=none; b=jTz4fb7G6JLCGVARyaMbmjAKyz1llgMha87Tlqdc+KvDEdLB2Ft+FNwG5Duaci+fmfBN0oUeliUcDrq0RyaGWdFnjuNqn9esOs9zHGLNxEQF2nrMVzbFeoaz7G045dn1Hof7ARR1Ru1pQKz39IlsG7+FRO5uL/2HRiu2sJDaMHQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765430194; c=relaxed/simple; bh=2Kuiif2dhHsWPbvITqBFFhHHPdqylQ/rqZvih2fi9gE=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=gRlLVFiwlZiBMA+C2p180uz43+c03niSx5gh2Eeg8tnu/yl4kbCt/nEf05odg4E+wh3ZUemAMWd2se8kp9TOGoQ36ZRnO5f3vcYi2ioPw9mR37AcFVOq8ZI3JTPMlN0QIXwjW0tBwCPCo+pHsr9POqDRPpju9sQH9PBbQpA+YXQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=purestorage.com; spf=fail smtp.mailfrom=purestorage.com; dkim=pass (2048-bit key) header.d=purestorage.com header.i=@purestorage.com header.b=eY+tE0oU; arc=none smtp.client-ip=209.85.214.226 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=purestorage.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=purestorage.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=purestorage.com header.i=@purestorage.com header.b="eY+tE0oU" Received: by mail-pl1-f226.google.com with SMTP id d9443c01a7336-295351ad2f5so1129245ad.3 for ; Wed, 10 Dec 2025 21:16:32 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=purestorage.com; s=google2022; t=1765430192; x=1766034992; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=/L5ySB+zP/+ngwEt9P7uRrvQEemvqRZ5JaxXp8HWdYg=; b=eY+tE0oUHg1Sqfq+ilJmo9wEhSXL6F/gH1vlNwGxZX/Fhky0+/CVhBuaLSnwSRgMbo r+ZeFivMU6Er/evciFOPVvpOeUkS3Az4+WaoXxYBlBd19cTdXdTxj50EG5HzUCun3Y+3 HK6lW/Ugn/TaSQIcdTlts6Yucj3u7Y4B3WBPx7W2DcR6co4az+z8t0Ih1S/V1vvJexk0 mDQCeezdSn9IjqINBe+I157O3aVIZHqaRqQsmwlu5Al0ysLGkzvQplPhI/KwONmdABmH qaYIYpHVd0tv91/eEx5Bz7YZcpQchEEIuGlscwVk0lu8Rl+PVd3PdxcMdD+wxALOK/qr QWCw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1765430192; x=1766034992; h=content-transfer-encoding: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; bh=/L5ySB+zP/+ngwEt9P7uRrvQEemvqRZ5JaxXp8HWdYg=; b=rfVN5gO6WUWp3hA8/cA0r4CChasW9cIef0cPpR5k008Tfsz1MDR5FoQPY7BQS1hs9i /A7afCYE8yVyENgBZr6jyfbTBiMG/Z5k5z+kXvK5lFsVRcgA+AYg8zy2f00OogXlEMNK xojrNXIIaCJ/vhj1Y8/bt0wKmWQBTV4DL5G68AHKmvEwZLSnt24U7FWPyTdU5t2aOl1Z WHuY7rDrdi6CRAYbfGsAKwMx6sa+8sQYkWRnW4Aj9CSQtuvBNAShmEIWkbWQOz4ZxIAE TseT0v/Glfvv/vxOvMF25k+FeVJHrCeXs+7h2Abzgfbb5HvqfIbm+6w8zAxAe7e5m82v snqQ== X-Forwarded-Encrypted: i=1; AJvYcCUdYTjo1Y4XCRR4atcmDcM89AM4YOJzB71hXCVtjHY8iBwI5eudm/UeIHt2cV1X6PfDTTFENmLYh5gg/pg=@vger.kernel.org X-Gm-Message-State: AOJu0Yz9b61NYqHi/4MqgIw5/wFbaHomubhFTRhqkC6tERJY4Oy9dl7/ 9CH+2sBut0f+atKlulvj3InZDCQaioNFnm3EFh4wjOfiDymCMfnB9c7Isz0037ZqMIDKcW3CmeB t28+rXLNpWNnqmkDAqe9SHgOdk7b91Tppg2zJ X-Gm-Gg: AY/fxX67ivPfH+f1qJva8kCbh69R7OUqVkRAVacsDt+a9DsYXq45/6Q6AUjhEW2/Agh p6RnEat/yM3phyfKrkokS5Er12ew/KcVxnmZzF33IVpna905stFu3TF/+ZA7410Z5iwlIHd1bt6 ONjiY+wNaBNp3okrudhXUrLWWP5vzQ5jTyF8c187x4erUZv6k8aXQtTSiJwkX1+DAr6lxkWD+z4 j12OI6JJU3wuziit+t0ZOl/wlHczXtn8YR8GZzqQpHJp1NHRzf1C/DjA/m4VXSWjzZRYdQPyXh+ xb60vL+H5001at02pNFEEe3BhkWe4jlpPVFwp6LU7JnubjEHu1pTxG65UfXnj2tJ9KvQ6PNBspW 9qH3kVksskSvWSbhdarwts1zqiugV8g/jqjttD/5VJw== X-Google-Smtp-Source: AGHT+IH8WKveI6H+vWfK0UUbFaVJR8xJcdqZMu1+kP/Km+1TUj2IgDadCIrCvsLyDPsHNoLshHkWfyq+njh8 X-Received: by 2002:a17:902:e807:b0:299:db45:c5a9 with SMTP id d9443c01a7336-29eed3234b5mr9070595ad.9.1765430192066; Wed, 10 Dec 2025 21:16:32 -0800 (PST) Received: from c7-smtp-2023.dev.purestorage.com ([208.88.159.129]) by smtp-relay.gmail.com with ESMTPS id d9443c01a7336-29ee98825e9sm2100645ad.7.2025.12.10.21.16.31 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 10 Dec 2025 21:16:32 -0800 (PST) X-Relaying-Domain: purestorage.com Received: from dev-csander.dev.purestorage.com (unknown [IPv6:2620:125:9007:640:ffff::1199]) by c7-smtp-2023.dev.purestorage.com (Postfix) with ESMTP id 8C7FC34079F; Wed, 10 Dec 2025 22:16:31 -0700 (MST) Received: by dev-csander.dev.purestorage.com (Postfix, from userid 1557716354) id 89EE4E400B8; Wed, 10 Dec 2025 22:16:31 -0700 (MST) From: Caleb Sander Mateos To: Ming Lei , Shuah Khan Cc: linux-block@vger.kernel.org, linux-kselftest@vger.kernel.org, linux-kernel@vger.kernel.org, Caleb Sander Mateos Subject: [PATCH 1/8] selftests: ublk: correct last_rw map type in seq_io.bt Date: Wed, 10 Dec 2025 22:15:56 -0700 Message-ID: <20251211051603.1154841-2-csander@purestorage.com> X-Mailer: git-send-email 2.45.2 In-Reply-To: <20251211051603.1154841-1-csander@purestorage.com> References: <20251211051603.1154841-1-csander@purestorage.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The last_rw map is initialized with a value of 0 but later assigned the value args.sector + args.nr_sector, which has type sector_t =3D u64. bpftrace complains about the type mismatch between int64 and uint64: trace/seq_io.bt:18:3-59: ERROR: Type mismatch for @last_rw: trying to assig= n value of type 'uint64' when map already contains a value of type 'int64' @last_rw[$dev, str($2)] =3D (args.sector + args.nr_sector); Cast the initial value to uint64 so bpftrace will load the program. Signed-off-by: Caleb Sander Mateos Reviewed-by: Ming Lei --- tools/testing/selftests/ublk/trace/seq_io.bt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/testing/selftests/ublk/trace/seq_io.bt b/tools/testing/s= elftests/ublk/trace/seq_io.bt index 272ac54c9d5f..507a3ca05abf 100644 --- a/tools/testing/selftests/ublk/trace/seq_io.bt +++ b/tools/testing/selftests/ublk/trace/seq_io.bt @@ -2,11 +2,11 @@ $1: dev_t $2: RWBS $3: strlen($2) */ BEGIN { - @last_rw[$1, str($2)] =3D 0; + @last_rw[$1, str($2)] =3D (uint64)0; } tracepoint:block:block_rq_complete { $dev =3D $1; if ((int64)args.dev =3D=3D $1 && !strncmp(args.rwbs, str($2), $3)) { --=20 2.45.2 From nobody Tue Dec 16 16:38:47 2025 Received: from mail-qk1-f225.google.com (mail-qk1-f225.google.com [209.85.222.225]) (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 0DD8328468B for ; Thu, 11 Dec 2025 05:16:34 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.222.225 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765430199; cv=none; b=C39nr8H83l3REfNpXVVBI3pq9+hY/iKcKzQ5JWGMQCzktI3qpbTboyv26MoJ6/RpIHQ0h8FZP7v5f6jgHc0xKpChnU8d7VtrfeYHU92vgdq8aZ0AS41du5NtSCT0JIs5mdR6D0nre6p7sp0bVRNbJoZgmcpaPoMEz36KblQZK1k= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765430199; c=relaxed/simple; bh=ugv+L91iD/mMt+noj9DgZ/5IYV37F5CcVIOzFhnzFT0=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=E65gc9GdADE+LySNrAd/9OyoGYEoVd5m8f8FPZOCRmJETmmtgcfiplvuf+sJQXm5bJYq32eLLPFgds1fHVCZoHFyuFXTqD7fRVA6GlavF6TSGcexHSd7iR/LnIykC0MF1ufSBkgi9Hg6KwWOsyFXXvtO1w3YDj1JYXGix5Qyja0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=purestorage.com; spf=fail smtp.mailfrom=purestorage.com; dkim=pass (2048-bit key) header.d=purestorage.com header.i=@purestorage.com header.b=Nj/B95mi; arc=none smtp.client-ip=209.85.222.225 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=purestorage.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=purestorage.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=purestorage.com header.i=@purestorage.com header.b="Nj/B95mi" Received: by mail-qk1-f225.google.com with SMTP id af79cd13be357-8b30d1b467eso12240985a.1 for ; Wed, 10 Dec 2025 21:16:34 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=purestorage.com; s=google2022; t=1765430193; x=1766034993; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=iTqVrM+5dB/aV7gHI1xfO04fFWnueqKpNcCVf0mzNKQ=; b=Nj/B95miIPSr2sIWs0H87r+i3K+uNy8PV6XxYLe2ANopteY7u0954rSK6jP6s+9qfJ CF/9aeNyoXDuEw+iDsQ9Bru6wRccI5jK1+gEK6y91Jm1B/WQeT20++28aObd+SaY3j/2 aMUjHkPI7CMuYtms1fvliBjA8LYCYfJ++bCOuOsWOQDU5khx9azO8S1K4mAyqCtiyNcu 6rYCQ124u6Jw2xcuwtBtJd9oTWtW67F8huw4KD3cz9E+Lmdqq4amyal0H0rvjtfHIVzF fXIT42+mmVnFCszrqgzh6ejGESx20ojMPmEXojMrMt8ZbLflr94/Nx3Sn7zVHnMxslgE 7u9w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1765430193; x=1766034993; h=content-transfer-encoding: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; bh=iTqVrM+5dB/aV7gHI1xfO04fFWnueqKpNcCVf0mzNKQ=; b=N48UZbBGoyqZngFd3eKcYeRKScMboQVCxy9NK9zLta85vOpac8qFXBSpfR3YZOZUpq WhwsMqkNecZ3h95zfVtytsGaYxrNABTKpKoX8CcBA46QrR108gr0FgqypMqPNuWG0/rm gbBaRi7mRkBtWHJPGAsmrc8Ma99rLgmDMfbzFolD72tpwTkYH/EN0VIQZTdtXXl3//74 8ScewFCb4Cwy0+7B3CGMMzgllhJu7W+nTNMcNbMYt3xYCcw+0iPs2wX6wKkqa1Vza3sK Dv2uYoLlkxzmTaaUZiBcJCAuMbO/Q2gkc9SIVYgz9fOk2VAtCKjytA3E7M0qX2EGSiV6 2F+g== X-Forwarded-Encrypted: i=1; AJvYcCWSQN1N1XL8Iwzt6Ks8qt3TRpbGO2qY386S44UgIBz8qxBxekkWWQA6FTCjn8oD7jvhPm28jLEqXdjv4/U=@vger.kernel.org X-Gm-Message-State: AOJu0YwTcljKspQPIXnxiV4exKGP9ljJP1LBSQTN5grFqFklmIc7og2H 19E3GsVCK6E3rCgr8Abq+bnItdusk4yz7zN80VNEM5d3B1m6BNoV1QJ1fjmzn+jxqrCrrtpZJVs THc5SS1Xu5vkZdQ99YYbd5vn/pJcDp8US1S5N X-Gm-Gg: AY/fxX4DVvEXOSfFnPMbd9Du/qsbIHQJClYy0u8NDzve+FpjQeP2uNx8OSmjzszJ5AQ vrA5sarqk5oSwXl7NtZLizomWRaKDk0TQeLdKVfjta46zhMpVo/0hIdqIgFamCY37LBm83OXsgN ryq8Gy0VMtInh0nt8RFnAwqQzaSWdEhjWlNHoVHDX6S/zOQCL+bWz9O/mJdidaeZrBEpMrdLWNG kvo3cdk8oj+nH24iQraCHgKmHgByRIeLCj7bfspjXeA4dRfUlhTuc2LlvcKMVLqZ/lZO1/yD8/w p8d1X+YtZfgjMYYhAdWXHNg6Qtxox4YCdcREo6637xkjod5y3P5ZOOxeIDoC05smnXx0pkpCpFb NUVVZnKMl4APKAS2vAtAX8cLkMX1pFekqUcEKvsN5Wg== X-Google-Smtp-Source: AGHT+IEVMLDi+M2lvlTlTsrMZUIr2MTV2dKnDHRpqfJSsfAFAo3GmlWwvbybr1q1ad2xu+lmxYt/buCaOMKm X-Received: by 2002:ad4:5de1:0:b0:880:55fc:c984 with SMTP id 6a1803df08f44-88863ae917amr55498616d6.5.1765430193191; Wed, 10 Dec 2025 21:16:33 -0800 (PST) Received: from c7-smtp-2023.dev.purestorage.com ([208.88.159.129]) by smtp-relay.gmail.com with ESMTPS id 6a1803df08f44-8886eedef55sm2845916d6.18.2025.12.10.21.16.32 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 10 Dec 2025 21:16:33 -0800 (PST) X-Relaying-Domain: purestorage.com Received: from dev-csander.dev.purestorage.com (unknown [IPv6:2620:125:9007:640:ffff::1199]) by c7-smtp-2023.dev.purestorage.com (Postfix) with ESMTP id CD284340B96; Wed, 10 Dec 2025 22:16:31 -0700 (MST) Received: by dev-csander.dev.purestorage.com (Postfix, from userid 1557716354) id C9DE5E400B8; Wed, 10 Dec 2025 22:16:31 -0700 (MST) From: Caleb Sander Mateos To: Ming Lei , Shuah Khan Cc: linux-block@vger.kernel.org, linux-kselftest@vger.kernel.org, linux-kernel@vger.kernel.org, Caleb Sander Mateos Subject: [PATCH 2/8] selftests: ublk: remove unused ios map in seq_io.bt Date: Wed, 10 Dec 2025 22:15:57 -0700 Message-ID: <20251211051603.1154841-3-csander@purestorage.com> X-Mailer: git-send-email 2.45.2 In-Reply-To: <20251211051603.1154841-1-csander@purestorage.com> References: <20251211051603.1154841-1-csander@purestorage.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The ios map populated by seq_io.bt is never read, so remove it. Signed-off-by: Caleb Sander Mateos Reviewed-by: Ming Lei --- tools/testing/selftests/ublk/trace/seq_io.bt | 1 - 1 file changed, 1 deletion(-) diff --git a/tools/testing/selftests/ublk/trace/seq_io.bt b/tools/testing/s= elftests/ublk/trace/seq_io.bt index 507a3ca05abf..b2f60a92b118 100644 --- a/tools/testing/selftests/ublk/trace/seq_io.bt +++ b/tools/testing/selftests/ublk/trace/seq_io.bt @@ -15,11 +15,10 @@ tracepoint:block:block_rq_complete printf("io_out_of_order: exp %llu actual %llu\n", args.sector, $last); } @last_rw[$dev, str($2)] =3D (args.sector + args.nr_sector); } - @ios =3D count(); } =20 END { clear(@last_rw); } --=20 2.45.2 From nobody Tue Dec 16 16:38:47 2025 Received: from mail-pg1-f228.google.com (mail-pg1-f228.google.com [209.85.215.228]) (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 78EDD1A08DB for ; Thu, 11 Dec 2025 05:16:33 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.215.228 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765430195; cv=none; b=b+bszorzc9nyRSxYE/NznB9p0RVsNy0tjLqSteASDJbmXgsyMmtZ0NBy5XA3kvZfUWCpANtVv28cyUrKG1PB5N9f9GvPwsA7g7eml2dmIy4jUyN1rPjfgWAd5kGzhOmMG07C7ksEKtYY1GZmzHmLgoNTOlhZYabJY+JIUdTRvMU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765430195; c=relaxed/simple; bh=xXu+tf+waXGAT/KO+5HTnzcECs/GS8n6wDa3C/1zl2w=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=oxIPIfdLE1OWIGLV2QVUPCaPDd4MPzV0hCbLF2bXbTEOjmj3lB9oD8Qn1jMUG5h39uIftApGkSj3xjDFWUqal9Kml23a8udcOHEpX3uVQP7zfZ9uWECWLR1x6ZMlYCFwg0jJlkyoM34Po8sExtHr8MbS8Juj/Hxibxf20qWn0WM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=purestorage.com; spf=fail smtp.mailfrom=purestorage.com; dkim=pass (2048-bit key) header.d=purestorage.com header.i=@purestorage.com header.b=Lz3qJqo2; arc=none smtp.client-ip=209.85.215.228 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=purestorage.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=purestorage.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=purestorage.com header.i=@purestorage.com header.b="Lz3qJqo2" Received: by mail-pg1-f228.google.com with SMTP id 41be03b00d2f7-be9ab2335beso7824a12.0 for ; Wed, 10 Dec 2025 21:16:33 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=purestorage.com; s=google2022; t=1765430193; x=1766034993; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=hIW7E3VVU8tn1DtuqotssIV4P+soF2bl+d1MuLtFvGM=; b=Lz3qJqo2fLwHLy8ipMHT00KPmmBf9rpGf7x0zw1Z14hZpahMGqMg/Pnb9MkNFxc8Kc gt7Dcym6WBAXErx8qBelVUWg0hhrYME30uhDyJUKHEAMflX/HvtTIZgWSsdpge6rApEr gC1r4nLNANu9R9KXY2SRz+W7anh1V1vLfdXpGURAdJXfp2kJPrlJWdegaea0njHotfaz XjEpK//8gGCf/9RqwVgbzsgrYyDTlXfj52+434D7cx1MQZYQs6MFvsIzpVWdkKM26nM3 acCD97gZe3QEW5YQLdOuz7dy0NGbBR3ltbD961+2pxArTgvcV6LgGFwaljdGHhVWpSY5 XDIA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1765430193; x=1766034993; h=content-transfer-encoding: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; bh=hIW7E3VVU8tn1DtuqotssIV4P+soF2bl+d1MuLtFvGM=; b=ek8SPcD7E8M6lvrttpXUOSK/8YSOcgn/OVkSIyz20K/mfo0/9AYOEp86MwA5yLhYC8 2wuVhKorGd34WqwTkS1dwoqSqwlQ2w2C31+en/otgQ660o7Ffdq8RSD7S6IhFpM1jCAW KVB83wDxC4A+011nPZk0tRIYoDkre1pN7QNDyn9bEj8JyVUApRhbykmUgjLhOr6P1lDO 0fXqOTABHfqJUJA8Y7wrEF5TxaGM4zU8tGu26oCszC2o1ZqNdYt71h/mkg6dQIzMNEDq NBPgjr/SQUdBu93AJYqUyyp0LAKMg/THVFoSzXI2aXav2crzY1eTnqGrwLmOj0fAsf4J a1dA== X-Forwarded-Encrypted: i=1; AJvYcCU7iNUrkyWtOVy07+BqL2By6UseICWKmMRZxtmJ/IZY1Q40QmPyVlkzmcJ0/ZK6dgH7DriGyRv5pjuZ84g=@vger.kernel.org X-Gm-Message-State: AOJu0YwKjTOGpqTCkg0CND9ZoFen4akVQQqb47gdFumBfbq9VYW/QprZ sMvJX2n9I9qwQSvTjmuG+Br4XigDY3HBoSHSo4Dko9LALlwrEu4fmCUS3X9VEfN4hVgrxb4+LlL jUuWZEu8UJPdUFRq+KFxQEcMLlYe6jnQ/ph+T X-Gm-Gg: AY/fxX6x2etH3bskUBFU32t/oeXf0sDSlIYpiEHTbnnPE4rPi5RWUNTZfNd0bvdDaEP 8Oth7c4ZbeJu123aXVXBtxxyF39LRdLFd4+68yG/fsYQLN8bbZNtQcfUPMlfMOntM1ehND+9tPT sBdBUm8G0gKIfLCaoSFe5GJH9EFCPSGMDDYRoeTonXFT1cUTRhX3OsAxxqqENgLvUhUQf6dG5nc hYvCEaUIPU+iapaS4aDJSNXOksPnLoVeJB01h6GRvq0vs6IsJw46IwgApXT4agYMkATjCvCexpq mM9LS9XqPJ33RMjqVJipoGyrdvkCqEilhq3FkRNYwAY3tlHGtFwL2gvPVRjMNUnwao/rBKLRb6m vLIKinWEszc1C+opQFMyMIbFQXIA0bBCgWHe2yVBO/Q== X-Google-Smtp-Source: AGHT+IG7vmAzN/4l/NU8zDsbC/0SMS8MR6+u+mFFoheI/aKNzzXKO2NBd1YC20FVT8PGNC8K5ew7ysZpXoYQ X-Received: by 2002:a05:6a00:12d4:b0:7aa:6dd9:807 with SMTP id d2e1a72fcca58-7f4f9d2dc21mr908468b3a.6.1765430192602; Wed, 10 Dec 2025 21:16:32 -0800 (PST) Received: from c7-smtp-2023.dev.purestorage.com ([208.88.159.129]) by smtp-relay.gmail.com with ESMTPS id d2e1a72fcca58-7f4c44ce5e1sm228638b3a.8.2025.12.10.21.16.32 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 10 Dec 2025 21:16:32 -0800 (PST) X-Relaying-Domain: purestorage.com Received: from dev-csander.dev.purestorage.com (unknown [IPv6:2620:125:9007:640:ffff::1199]) by c7-smtp-2023.dev.purestorage.com (Postfix) with ESMTP id 0D1FD341D2E; Wed, 10 Dec 2025 22:16:32 -0700 (MST) Received: by dev-csander.dev.purestorage.com (Postfix, from userid 1557716354) id 0A359E414B9; Wed, 10 Dec 2025 22:16:32 -0700 (MST) From: Caleb Sander Mateos To: Ming Lei , Shuah Khan Cc: linux-block@vger.kernel.org, linux-kselftest@vger.kernel.org, linux-kernel@vger.kernel.org, Caleb Sander Mateos Subject: [PATCH 3/8] selftests: ublk: fix fio arguments in run_io_and_recover() Date: Wed, 10 Dec 2025 22:15:58 -0700 Message-ID: <20251211051603.1154841-4-csander@purestorage.com> X-Mailer: git-send-email 2.45.2 In-Reply-To: <20251211051603.1154841-1-csander@purestorage.com> References: <20251211051603.1154841-1-csander@purestorage.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" run_io_and_recover() invokes fio with --size=3D"${size}", but the variable size doesn't exist. Thus, the argument expands to --size=3D, which causes fio to exit immediately with an error without issuing any I/O. Pass the value for size as the first argument to the function. Signed-off-by: Caleb Sander Mateos Reviewed-by: Ming Lei --- tools/testing/selftests/ublk/test_common.sh | 5 +++-- tools/testing/selftests/ublk/test_generic_04.sh | 2 +- tools/testing/selftests/ublk/test_generic_05.sh | 2 +- tools/testing/selftests/ublk/test_generic_11.sh | 2 +- 4 files changed, 6 insertions(+), 5 deletions(-) diff --git a/tools/testing/selftests/ublk/test_common.sh b/tools/testing/se= lftests/ublk/test_common.sh index 8a4dbd09feb0..6f1c042de40e 100755 --- a/tools/testing/selftests/ublk/test_common.sh +++ b/tools/testing/selftests/ublk/test_common.sh @@ -331,15 +331,16 @@ run_io_and_kill_daemon() fi } =20 run_io_and_recover() { - local action=3D$1 + local size=3D$1 + local action=3D$2 local state local dev_id =20 - shift 1 + shift 2 dev_id=3D$(_add_ublk_dev "$@") _check_add_dev "$TID" $? =20 fio --name=3Djob1 --filename=3D/dev/ublkb"${dev_id}" --ioengine=3Dlibaio \ --rw=3Drandread --iodepth=3D256 --size=3D"${size}" --numjobs=3D4 \ diff --git a/tools/testing/selftests/ublk/test_generic_04.sh b/tools/testin= g/selftests/ublk/test_generic_04.sh index 8b533217d4a1..baf5b156193d 100755 --- a/tools/testing/selftests/ublk/test_generic_04.sh +++ b/tools/testing/selftests/ublk/test_generic_04.sh @@ -6,11 +6,11 @@ TID=3D"generic_04" ERR_CODE=3D0 =20 ublk_run_recover_test() { - run_io_and_recover "kill_daemon" "$@" + run_io_and_recover 256M "kill_daemon" "$@" ERR_CODE=3D$? if [ ${ERR_CODE} -ne 0 ]; then echo "$TID failure: $*" _show_result $TID $ERR_CODE fi diff --git a/tools/testing/selftests/ublk/test_generic_05.sh b/tools/testin= g/selftests/ublk/test_generic_05.sh index 398e9e2b58e1..7b5083afc02a 100755 --- a/tools/testing/selftests/ublk/test_generic_05.sh +++ b/tools/testing/selftests/ublk/test_generic_05.sh @@ -6,11 +6,11 @@ TID=3D"generic_05" ERR_CODE=3D0 =20 ublk_run_recover_test() { - run_io_and_recover "kill_daemon" "$@" + run_io_and_recover 256M "kill_daemon" "$@" ERR_CODE=3D$? if [ ${ERR_CODE} -ne 0 ]; then echo "$TID failure: $*" _show_result $TID $ERR_CODE fi diff --git a/tools/testing/selftests/ublk/test_generic_11.sh b/tools/testin= g/selftests/ublk/test_generic_11.sh index a00357a5ec6b..d1f973c8c645 100755 --- a/tools/testing/selftests/ublk/test_generic_11.sh +++ b/tools/testing/selftests/ublk/test_generic_11.sh @@ -6,11 +6,11 @@ TID=3D"generic_11" ERR_CODE=3D0 =20 ublk_run_quiesce_recover() { - run_io_and_recover "quiesce_dev" "$@" + run_io_and_recover 256M "quiesce_dev" "$@" ERR_CODE=3D$? if [ ${ERR_CODE} -ne 0 ]; then echo "$TID failure: $*" _show_result $TID $ERR_CODE fi --=20 2.45.2 From nobody Tue Dec 16 16:38:47 2025 Received: from mail-vs1-f99.google.com (mail-vs1-f99.google.com [209.85.217.99]) (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 828522AEF5 for ; Thu, 11 Dec 2025 05:16:35 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.217.99 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765430201; cv=none; b=nKK1AKvmejiuWhq+9W0QS9bE8io2zU0iULf+G77VFNOdafBAJytUkal4dYUKaF43VT/TLNMKqPRVf2HVAHel0WTsleTmIYe5TAU8spQefjTNJitqz722EjFaRjRh2M/Wi96GU5RKKG7c6iaIfSYSdHQ711/ohrRxODmGlQL3Ntc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765430201; c=relaxed/simple; bh=FKbZngLfGMe4F0ejdKJ0fZ6ILmuYiVZnIW21hOqoFMc=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=qIbDZxs8ZFXMj0caNyD4VAhWRHCswVU0KPyGzEY64jAlyYCz03QzhcPIvdbKsws0tV4mq1WCy+gqPBlVFOVqCwRR8iUIFrQX5GFswIbmC0S4goG3+HFhTislgLULa+G99ngHGtykxHK/b1yZZNlwVZBNm/VeVVWOy+fSA+dESKU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=purestorage.com; spf=fail smtp.mailfrom=purestorage.com; dkim=pass (2048-bit key) header.d=purestorage.com header.i=@purestorage.com header.b=PyfksFWC; arc=none smtp.client-ip=209.85.217.99 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=purestorage.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=purestorage.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=purestorage.com header.i=@purestorage.com header.b="PyfksFWC" Received: by mail-vs1-f99.google.com with SMTP id ada2fe7eead31-5dfb3297151so31848137.0 for ; Wed, 10 Dec 2025 21:16:35 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=purestorage.com; s=google2022; t=1765430194; x=1766034994; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=lYMmhxte6MTatk0mD4pdp1WR7i9P7+V+tQDFdQu1wO4=; b=PyfksFWCqbwVw34UP8Pi5hz2STwDa9VrLb75AWeKbRJ5NeoB4ZyZrX/pe0dqDpILOC 4BKAhD6Rln8ruAy8MhYXg4DyF/EFwjYkUJcO8QQjoJGHFu9YMHpbPBgCVsFY1ioHWidw ChKxdT5SL8eickZjAVEzcAVQ6HVJGMEYhIADESbCRNe+aw3yfILlevnP2k0b8QhTIxiw KkgAD0409hZ/gg/06wHLGJVAJNWF73I3XHleaGsi5RsMOyXlc3ZDov1bh8hM2l/IoiEc daxgkbWG8Mv59ons6/xS9gYLcL6W67CjmFOXrKY+iOcmdUzQ9GymQE8G3DvD5AlpTPMp kqMg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1765430194; x=1766034994; h=content-transfer-encoding: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; bh=lYMmhxte6MTatk0mD4pdp1WR7i9P7+V+tQDFdQu1wO4=; b=HjViILiUmQilwPMTTVIC0PIMqY/+SKGggrvBse0CRFXj8bWlv9eHA4Dzm5Jfa0yuT/ a4brXgJgIoai2QFowXKNJNWqcLtxcdbVar/lFnrDxQ+YUT0ah5ckTp8TBzNZmsA63k2y 6ubaNfnOdiiwCnbEqawhGK+yNNk+hxBORUDqItKxeSBRm6gvPxk2uopo/5kAtKnqVnXb 4jw3Gu6YY88Canq0PuFzqEExKFLk4T3I1Z5znS/IjCVOJbyX1sGMa+3egBoZif57F9ZI ZYXzj1ujoQadAbH9c1SpOzA74UgjIUrRfGqcF94FPp2Q198mnF8M4HUHzPJmrYm8ilA0 UKCA== X-Forwarded-Encrypted: i=1; AJvYcCXnDPa3tjsIt0UHpq1bOzyf8w0Gw6C2IilK+u2kDGqoTSGvcbDWU+6TNxg0o3zo7Dz8FU8brztPnywxpUU=@vger.kernel.org X-Gm-Message-State: AOJu0YzJWXmgwN/JsAW14eB1+gfkVOoO5boyem+wOir3ZgT5HNYaOjWH 8tnSHmhrHTgRbr5ghHCsdhDxxnBKS/8SWdTkr8mZBPtXVXNCdrncXQ0O9zI08UEPrubuUgQKRm5 XHQSlpGWxItV4MWYYQgmnyAY4dmvA1sDSq3xk X-Gm-Gg: AY/fxX4zfocmCB7uRg5hU2PQLOjMw7dxqoaOR5s1q3mKPQ6rhOz3CK8Ihjj88Md0AHo TWryv2NV1N2wYiwmDFhxBLQ3X6nop8nHiOgzj9VkvFdBeSjHqoXaJpQL0Cwb4B4hn1rJW0Y2UCl zCHBL4hVgakS79hxDPb40ULVQivf54B7HN1F2eTGCknBo/QkjfTCxWVUYa+cV/DWJRfmSIhUHxf qZXISZNKm5VUeQtycilP+ab3T010/iEHcId2x0VW4K2v8c1b0zKrmJyM7n7xLfRVcEst4nVbYb7 F8VmqLUFJFfQz+QGqiWcx4N+V1yazRqvnHLuWWzrxF+O6DbtssX47qMixXRJwXYfDQaue7WuyOR Ss0Yv/TKymTpHzHlJNQ21f4jIUhfNjr4fGyX0pbI/3w== X-Google-Smtp-Source: AGHT+IH8wHkl6849aTSVx4QBElkuCxFtShXY/UySGgPZAopPw0H4GLbBbyJqdZsPQRlK5nTLNG77Q2JCbfO0 X-Received: by 2002:a05:6102:644a:b0:5db:25d3:28b4 with SMTP id ada2fe7eead31-5e7d0e28186mr197796137.5.1765430193704; Wed, 10 Dec 2025 21:16:33 -0800 (PST) Received: from c7-smtp-2023.dev.purestorage.com ([208.88.159.128]) by smtp-relay.gmail.com with ESMTPS id ada2fe7eead31-5e7db2613afsm151339137.4.2025.12.10.21.16.33 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 10 Dec 2025 21:16:33 -0800 (PST) X-Relaying-Domain: purestorage.com Received: from dev-csander.dev.purestorage.com (unknown [IPv6:2620:125:9007:640:ffff::1199]) by c7-smtp-2023.dev.purestorage.com (Postfix) with ESMTP id 42E6F341DDC; Wed, 10 Dec 2025 22:16:32 -0700 (MST) Received: by dev-csander.dev.purestorage.com (Postfix, from userid 1557716354) id 3E0A7E41888; Wed, 10 Dec 2025 22:16:32 -0700 (MST) From: Caleb Sander Mateos To: Ming Lei , Shuah Khan Cc: linux-block@vger.kernel.org, linux-kselftest@vger.kernel.org, linux-kernel@vger.kernel.org, Caleb Sander Mateos Subject: [PATCH 4/8] selftests: ublk: use auto_zc for PER_IO_DAEMON tests in stress_04 Date: Wed, 10 Dec 2025 22:15:59 -0700 Message-ID: <20251211051603.1154841-5-csander@purestorage.com> X-Mailer: git-send-email 2.45.2 In-Reply-To: <20251211051603.1154841-1-csander@purestorage.com> References: <20251211051603.1154841-1-csander@purestorage.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" stress_04 is described as "run IO and kill ublk server(zero copy)" but the --per_io_tasks tests cases don't use zero copy. Plus, one of the test cases is duplicated. Add --auto_zc to these test cases and --auto_zc_fallback to one of the duplicated ones. This matches the test cases in stress_03. Signed-off-by: Caleb Sander Mateos --- tools/testing/selftests/ublk/test_stress_04.sh | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/tools/testing/selftests/ublk/test_stress_04.sh b/tools/testing= /selftests/ublk/test_stress_04.sh index 3f901db4d09d..965befcee830 100755 --- a/tools/testing/selftests/ublk/test_stress_04.sh +++ b/tools/testing/selftests/ublk/test_stress_04.sh @@ -38,14 +38,14 @@ if _have_feature "AUTO_BUF_REG"; then ublk_io_and_kill_daemon 256M -t stripe -q 4 --auto_zc --no_ublk_fixed_fd = "${UBLK_BACKFILES[1]}" "${UBLK_BACKFILES[2]}" & ublk_io_and_kill_daemon 8G -t null -q 4 -z --auto_zc --auto_zc_fallback & fi =20 if _have_feature "PER_IO_DAEMON"; then - ublk_io_and_kill_daemon 8G -t null -q 4 --nthreads 8 --per_io_tasks & - ublk_io_and_kill_daemon 256M -t loop -q 4 --nthreads 8 --per_io_tasks "${= UBLK_BACKFILES[0]}" & - ublk_io_and_kill_daemon 256M -t stripe -q 4 --nthreads 8 --per_io_tasks "= ${UBLK_BACKFILES[1]}" "${UBLK_BACKFILES[2]}" & - ublk_io_and_kill_daemon 8G -t null -q 4 --nthreads 8 --per_io_tasks & + ublk_io_and_kill_daemon 8G -t null -q 4 --auto_zc --nthreads 8 --per_io_t= asks & + ublk_io_and_kill_daemon 256M -t loop -q 4 --auto_zc --nthreads 8 --per_io= _tasks "${UBLK_BACKFILES[0]}" & + ublk_io_and_kill_daemon 256M -t stripe -q 4 --auto_zc --nthreads 8 --per_= io_tasks "${UBLK_BACKFILES[1]}" "${UBLK_BACKFILES[2]}" & + ublk_io_and_kill_daemon 8G -t null -q 4 --auto_zc --auto_zc_fallback --nt= hreads 8 --per_io_tasks & fi wait =20 _cleanup_test "stress" _show_result $TID $ERR_CODE --=20 2.45.2 From nobody Tue Dec 16 16:38:47 2025 Received: from mail-oa1-f99.google.com (mail-oa1-f99.google.com [209.85.160.99]) (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 4AC432857CA for ; Thu, 11 Dec 2025 05:16:35 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.160.99 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765430199; cv=none; b=R6X+a82f4PEHtVnC7uYmpaVs5eGbP758/smMtJvpkkrtSl9PvQDUasxUFa5VRlhjo/5OkVH16CjAP+JYiDOhZqQMnk8yy67ChFJNKjqOYSv3smBw/lgiEO4JbzeC2cipXMIImpa9hQ/PAb3sM33oEuLbBSa/v9mOIiVH8dM5/uo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765430199; c=relaxed/simple; bh=3BcnF+JpBAzJisKJ1uTv6+gdgkHDBERFf0MRmBcrFsg=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=RyKi7vA7fwOSwHYiF9nPcPyoxhRG8gPhmHByuuv8C2rWqQLsGHAyCrJz9XNc12oUBlUWF1MRo84HICWtlWVjGdFxsSCQlwtTMcwP8ubwM4KkMZKpodXIStxK4Aj7CP78PbCwMFObdwU8YLlowrdiAYO91XCOzkIttUszPs2oR1U= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=purestorage.com; spf=fail smtp.mailfrom=purestorage.com; dkim=pass (2048-bit key) header.d=purestorage.com header.i=@purestorage.com header.b=eaunaJP0; arc=none smtp.client-ip=209.85.160.99 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=purestorage.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=purestorage.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=purestorage.com header.i=@purestorage.com header.b="eaunaJP0" Received: by mail-oa1-f99.google.com with SMTP id 586e51a60fabf-3f5c34d7bc8so6950fac.2 for ; Wed, 10 Dec 2025 21:16:34 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=purestorage.com; s=google2022; t=1765430193; x=1766034993; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=KfkHHTfuV1VgzCnNWDioK4GO8iHacIvGQ0SM0tegTgc=; b=eaunaJP0AaVysylgpySQADTE5qJoHyY/BvgeogFOj/1OJRedL1MnUPeDCk/o0UPCjS R79WSrUH8qcePzbGHwpn02BOe+dIIen+QA6cgefeYcqAeUA5OT6Ae0nwQ+4j813XSPOZ QmUQvifqCNvIv6IuhbyJs+vXhJ1P7MioAuviJTi8cqhn3JrWSQydg+9RBBowNYFhCG4T oCvnNsE6g5VqpIeRnJoaPB1zlKjwlppgJH02VNrMn1hcSIuKCJg9znRj3mx4YWdG1jZi TZf4HTg/dG9G8er3mJiD1FMO2lJ75hFNiBwAagFWQ4OpdGgJ9g/MMSHV6lvv3r01Uucz v2jA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1765430193; x=1766034993; h=content-transfer-encoding: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; bh=KfkHHTfuV1VgzCnNWDioK4GO8iHacIvGQ0SM0tegTgc=; b=S+xJjFmHWv1QcaG+G443ZFcXokTOTpQnplUBXiSPPGWbx45uKabFPi62Xcu0oY8J1T zGZYZfgvUc/H5MVHzzke5vVsIPSPJCcedRam05j2uMPPjukaAxKZ37hjvpRbOLT/8GlO CGKC/brYZHP6Pr/n4+sfAIY9E3YiwoGswiYtfZfmD/XzIb4vsAJ4/4hCWhuGsbuZMmHT HJAUhIRvX0ClmxjV7fZNrfVorlum+X4n12e2MUS3f17Hi2oO2CVehiC3nyynQTAuB6Vz tyom60X8n+se9Hg+VctQe1IaW7pWz0xmlSiguhyRAkNujYoELNB9byFVeWylnP+26x86 FY+A== X-Forwarded-Encrypted: i=1; AJvYcCUp7u2+YKc2Fk9ezRGoWBQT9NVrzl7MYlBEdbTyj1Ep6xn6aI2IdcLigqeNXSxxa/Q+em3eQNxxss4HvaQ=@vger.kernel.org X-Gm-Message-State: AOJu0YxipeF716zKfNOlwoin0NoxI7NvtNP4hmgdIdfWDD7DLj/HazLV GFiZ5mJrmWpcvUq+++JPWokg5JVl7SqgJA51AHIC7p0nBKIwEhod4rxgx3G2lxUS2P6oInD0YOJ E9Zq0LmCLINqD0eYr1EaeC6K+tRdt6ItVFdy+uPQS8mWlqcaqfwnE X-Gm-Gg: AY/fxX6QFXncDRhedVbqFuCCrdpbKgUe5gLtQQF6AlWxGm2j/9Moa9uKXHZo+7XCvgs t40pJ3R/9SgU7xLg7JwhEYKMexShLNiVuOQQSsKBSQ3Q8zzqseq4XYs4ObZU+yI5TPTglrSn7aq OclrtroNam/9p7qi1dNQg7Uv82XCasD7okw4fx4YWvwN70yKPNOKW6f0XzNg29gaQ33w+TrpZok i0Oa2eNC6Da+pibD2TDBbUjdojgkMY3DrdH9zUzg0/8uk0Dfn4xQ38onigqMjUG0ZiFsE9zDZIX zfMtH5Xu6jZ3Jy2pxASa57PnAgW39lzAQKYGUZ0dWJnjcvNoLSDEP7cg+ur5ER5Cxj7wZizBu9k Ae3Cyju01fi4vnUJpxcNrFBZ7CEc= X-Google-Smtp-Source: AGHT+IHb3ENL6XXKxhbIoayxGeujs4BLthUNPZTmBQ/rx5/q9AaDNCLok3CtBXuRYAP8aXa/nnfB2DRX5Mgb X-Received: by 2002:a05:6870:2484:b0:3e8:9d46:becc with SMTP id 586e51a60fabf-3f5dcdd2a38mr548792fac.3.1765430193474; Wed, 10 Dec 2025 21:16:33 -0800 (PST) Received: from c7-smtp-2023.dev.purestorage.com ([2620:125:9017:12:36:3:5:0]) by smtp-relay.gmail.com with ESMTPS id 586e51a60fabf-3f5d51aa8c5sm240626fac.15.2025.12.10.21.16.33 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 10 Dec 2025 21:16:33 -0800 (PST) X-Relaying-Domain: purestorage.com Received: from dev-csander.dev.purestorage.com (unknown [IPv6:2620:125:9007:640:ffff::1199]) by c7-smtp-2023.dev.purestorage.com (Postfix) with ESMTP id 7220934079F; Wed, 10 Dec 2025 22:16:32 -0700 (MST) Received: by dev-csander.dev.purestorage.com (Postfix, from userid 1557716354) id 6F9FEE41888; Wed, 10 Dec 2025 22:16:32 -0700 (MST) From: Caleb Sander Mateos To: Ming Lei , Shuah Khan Cc: linux-block@vger.kernel.org, linux-kselftest@vger.kernel.org, linux-kernel@vger.kernel.org, Caleb Sander Mateos Subject: [PATCH 5/8] selftests: ublk: don't share backing files between ublk servers Date: Wed, 10 Dec 2025 22:16:00 -0700 Message-ID: <20251211051603.1154841-6-csander@purestorage.com> X-Mailer: git-send-email 2.45.2 In-Reply-To: <20251211051603.1154841-1-csander@purestorage.com> References: <20251211051603.1154841-1-csander@purestorage.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" stress_04 is missing a wait between blocks of tests, meaning multiple ublk servers will be running in parallel using the same backing files. Add a wait after each section to ensure each backing file is in use by a single ublk server at a time. Signed-off-by: Caleb Sander Mateos Reviewed-by: Ming Lei --- tools/testing/selftests/ublk/test_stress_04.sh | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/tools/testing/selftests/ublk/test_stress_04.sh b/tools/testing= /selftests/ublk/test_stress_04.sh index 965befcee830..c7220723b537 100755 --- a/tools/testing/selftests/ublk/test_stress_04.sh +++ b/tools/testing/selftests/ublk/test_stress_04.sh @@ -29,23 +29,25 @@ _create_backfile 1 128M _create_backfile 2 128M =20 ublk_io_and_kill_daemon 8G -t null -q 4 -z --no_ublk_fixed_fd & ublk_io_and_kill_daemon 256M -t loop -q 4 -z --no_ublk_fixed_fd "${UBLK_BA= CKFILES[0]}" & ublk_io_and_kill_daemon 256M -t stripe -q 4 -z "${UBLK_BACKFILES[1]}" "${U= BLK_BACKFILES[2]}" & +wait =20 if _have_feature "AUTO_BUF_REG"; then ublk_io_and_kill_daemon 8G -t null -q 4 --auto_zc & ublk_io_and_kill_daemon 256M -t loop -q 4 --auto_zc "${UBLK_BACKFILES[0]}= " & ublk_io_and_kill_daemon 256M -t stripe -q 4 --auto_zc --no_ublk_fixed_fd = "${UBLK_BACKFILES[1]}" "${UBLK_BACKFILES[2]}" & ublk_io_and_kill_daemon 8G -t null -q 4 -z --auto_zc --auto_zc_fallback & + wait fi =20 if _have_feature "PER_IO_DAEMON"; then ublk_io_and_kill_daemon 8G -t null -q 4 --auto_zc --nthreads 8 --per_io_t= asks & ublk_io_and_kill_daemon 256M -t loop -q 4 --auto_zc --nthreads 8 --per_io= _tasks "${UBLK_BACKFILES[0]}" & ublk_io_and_kill_daemon 256M -t stripe -q 4 --auto_zc --nthreads 8 --per_= io_tasks "${UBLK_BACKFILES[1]}" "${UBLK_BACKFILES[2]}" & ublk_io_and_kill_daemon 8G -t null -q 4 --auto_zc --auto_zc_fallback --nt= hreads 8 --per_io_tasks & + wait fi -wait =20 _cleanup_test "stress" _show_result $TID $ERR_CODE --=20 2.45.2 From nobody Tue Dec 16 16:38:47 2025 Received: from mail-pf1-f226.google.com (mail-pf1-f226.google.com [209.85.210.226]) (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 38AE220C48A for ; Thu, 11 Dec 2025 05:16:34 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.226 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765430199; cv=none; b=LqwDG8RzjpVhNAge0tYOy7kCyN93Q9uWuYGCNpSOGdssBDpJmVW8lRSTudpeiFkta7X11dNzCDVo75oK0orM18p4PakZqve3rCQ0bE4wRhmLEiZJgNBp8vKiUu6hCdp1k/4qJpnBvkyhkup82W6NsyqHsivjbvQe3poXl2dyXwI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765430199; c=relaxed/simple; bh=acykySZqQaZB1IYcjmApohtjhjnF/Dlf+Coyd9uZ2H4=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=awvOnaYt/nVZwCz+cQ7RSP0ruB3gtrWZ98WONplQ8wRI6hdKKC25NRwFnY8uNJ/0NMeJY74aNrCmipeCYEelN6zE+RcV5Dr1d60CuHDindUwsRsfVqaTywFsbAjtSSkSixirur53ZF2HcUNmww1h60s04Mly9c7ebgNPeS3IYwE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=purestorage.com; spf=fail smtp.mailfrom=purestorage.com; dkim=pass (2048-bit key) header.d=purestorage.com header.i=@purestorage.com header.b=SgciTSnM; arc=none smtp.client-ip=209.85.210.226 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=purestorage.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=purestorage.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=purestorage.com header.i=@purestorage.com header.b="SgciTSnM" Received: by mail-pf1-f226.google.com with SMTP id d2e1a72fcca58-7b8ba3c8ca1so94047b3a.2 for ; Wed, 10 Dec 2025 21:16:34 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=purestorage.com; s=google2022; t=1765430193; x=1766034993; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=vnVfufvIYEdI8+hFNgHbkUqJ54wEbcXzUeKinX5SKcw=; b=SgciTSnMLWNdtYoA13frUMQy15TNmrrlUCCSfxc2A99pR9MJKfJq3KAFNOmL0h+xh6 nYgxDvhlhpoC5+ZeeGztXpz41ww4zYXigvnXPvVSyiJ9A9smMxoYRcdPleqiC8dn7Hhz 19VcudtbzvqDYxeTV56SjSokKMFhRcqswgHDK64AyIDZPIzAZs3NVzL2hueK7W4p9Epr A0M+DlQPdrIfw3kC+PH+zBvTb6HyujtE1GgzS1Zi2k6TJ1q1U0dxCxgSU8DS4R/L4cIP WHt2dihC47Q2mmxCUp6WOlQt/4ONFltxksTKFMc3zOuxNpBbuTpXfIOFv8k6bdVwhLuk nNkA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1765430193; x=1766034993; h=content-transfer-encoding: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; bh=vnVfufvIYEdI8+hFNgHbkUqJ54wEbcXzUeKinX5SKcw=; b=EiI8ihiPWkCWGjASYknQwgJw+I8DvoU6h9nMV7hjpg/+9DKQcCH4QLcLHWmQKWJqTC LnfBnuBGBtQowikX8QVpFHpMgY4uNnlgUly1jDBcVD3z2mgQmhYvbTHQeCaXCtz+UMv2 iJdG3sF+pHUfKSho09UMZPiuI2GIw1+hP4pKuPvjZSbodzvFHYG2Ct1ZSwvAjlnV9jjz i8Twkrm6KcxTzaZIq7CoPmrKpUKAihDSSn/Y176vpfCajHcWAh30K4Nc+xxnUG0FTuR1 Oxs9kQwoeJnd+MJB/fc02W/P6YJ28aK6FApSU6HRG1pHK0sB2Xg4bRh1dGL5SphIO4Tc Is8Q== X-Forwarded-Encrypted: i=1; AJvYcCUgXo/kF5FX+5cUSBaD+VmyZTqjIMkzLVtJrpRPr9+I+RTEpM1148/hkmrldfnDvUy0zIpaME7FgsWIj28=@vger.kernel.org X-Gm-Message-State: AOJu0YxD5BghDNIciTlz7ByuRT7Rdfsznjbti14ncepLv5aF14xlxAPh f+pUs3X5LWG8jyrRKydVdVZOtyMOoMU3bMYda2CbXTehAlGstjLazbPPos5L4nRMzzbbuXH4Byk 2DL1No3xJqUpsQngefji6zfLugWbJeOHx9Vrh3OQWaXpXNAGrXa8g X-Gm-Gg: ASbGncvjfg6jqOlYkevIzAAGmbIuV62NGLt/D9Hi+lDGkEH2zPsGjg7VEr7lpXkBXwf EAeyGea7g20E5kZW33Xioi599N8+5rtfOikkaEIwBhG58vDABTpMiAiKiW8l94vOcSeE3kpWKQZ Yj4MF5ujCVTGEuOHG14tWjiYLo7SDP+QrTGHLRdmnh2nAeJoGUXMr8kU5meys50sofs27sT5LZa JRCLqhgDMgCgpAkK1VU01s9Rgqud86ak1IZyGvWrGkX1ki2f03rYZx8qk2O1YU4CA+wt/Lqen7F 3XPrkm2scip6QsYT5wpppwjp3YzU9F4MzhmnLegJy+2Hgbzxiry9wmJJjUN6h2LoLKDpCfz1HpF ZV6ivSe5lGnDk6spBuHI34xfDha4= X-Google-Smtp-Source: AGHT+IHQphv4vwSDxzX++wJ7dkwR4fY5PmWaSMm5edn3a8fbf06IH7XN7suyTmn9yIsdflhRFlco/RysUZSQ X-Received: by 2002:a05:7022:ea55:10b0:119:e56b:46b7 with SMTP id a92af1059eb24-11f2e7f076fmr445366c88.1.1765430193256; Wed, 10 Dec 2025 21:16:33 -0800 (PST) Received: from c7-smtp-2023.dev.purestorage.com ([2620:125:9017:12:36:3:5:0]) by smtp-relay.gmail.com with ESMTPS id a92af1059eb24-11f2e30259bsm208476c88.8.2025.12.10.21.16.33 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 10 Dec 2025 21:16:33 -0800 (PST) X-Relaying-Domain: purestorage.com Received: from dev-csander.dev.purestorage.com (dev-csander.dev.purestorage.com [10.7.70.37]) by c7-smtp-2023.dev.purestorage.com (Postfix) with ESMTP id A5DF83401CC; Wed, 10 Dec 2025 22:16:32 -0700 (MST) Received: by dev-csander.dev.purestorage.com (Postfix, from userid 1557716354) id A2B4BE41888; Wed, 10 Dec 2025 22:16:32 -0700 (MST) From: Caleb Sander Mateos To: Ming Lei , Shuah Khan Cc: linux-block@vger.kernel.org, linux-kselftest@vger.kernel.org, linux-kernel@vger.kernel.org, Caleb Sander Mateos Subject: [PATCH 6/8] selftests: ublk: forbid multiple data copy modes Date: Wed, 10 Dec 2025 22:16:01 -0700 Message-ID: <20251211051603.1154841-7-csander@purestorage.com> X-Mailer: git-send-email 2.45.2 In-Reply-To: <20251211051603.1154841-1-csander@purestorage.com> References: <20251211051603.1154841-1-csander@purestorage.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The kublk mock ublk server allows multiple data copy mode arguments to be passed on the command line (--zero_copy, --get_data, and --auto_zc). The ublk device will be created with all the requested feature flags, however kublk will only use one of the modes to interact with request data (arbitrarily preferring auto_zc over zero_copy over get_data). To clarify the intent of the test, don't allow multiple data copy modes to be specified. Don't set UBLK_F_USER_COPY for zero_copy, as it's an independent feature. Don't require zero_copy for auto_zc_fallback, as only auto_zc is needed. Fix the test cases passing multiple data copy mode arguments. Signed-off-by: Caleb Sander Mateos --- tools/testing/selftests/ublk/kublk.c | 21 ++++++++++++------- .../testing/selftests/ublk/test_generic_09.sh | 2 +- .../testing/selftests/ublk/test_stress_03.sh | 4 ++-- .../testing/selftests/ublk/test_stress_04.sh | 2 +- .../testing/selftests/ublk/test_stress_05.sh | 10 ++++----- 5 files changed, 22 insertions(+), 17 deletions(-) diff --git a/tools/testing/selftests/ublk/kublk.c b/tools/testing/selftests= /ublk/kublk.c index f8fa102a627f..1765c4806523 100644 --- a/tools/testing/selftests/ublk/kublk.c +++ b/tools/testing/selftests/ublk/kublk.c @@ -1611,11 +1611,11 @@ int main(int argc, char *argv[]) break; case 'd': ctx.queue_depth =3D strtol(optarg, NULL, 10); break; case 'z': - ctx.flags |=3D UBLK_F_SUPPORT_ZERO_COPY | UBLK_F_USER_COPY; + ctx.flags |=3D UBLK_F_SUPPORT_ZERO_COPY; break; case 'r': value =3D strtol(optarg, NULL, 10); if (value) ctx.flags |=3D UBLK_F_USER_RECOVERY; @@ -1674,17 +1674,22 @@ int main(int argc, char *argv[]) optind +=3D 1; break; } } =20 - /* auto_zc_fallback depends on F_AUTO_BUF_REG & F_SUPPORT_ZERO_COPY */ - if (ctx.auto_zc_fallback && - !((ctx.flags & UBLK_F_AUTO_BUF_REG) && - (ctx.flags & UBLK_F_SUPPORT_ZERO_COPY))) { - ublk_err("%s: auto_zc_fallback is set but neither " - "F_AUTO_BUF_REG nor F_SUPPORT_ZERO_COPY is enabled\n", - __func__); + /* auto_zc_fallback depends on F_AUTO_BUF_REG */ + if (ctx.auto_zc_fallback && !(ctx.flags & UBLK_F_AUTO_BUF_REG)) { + ublk_err("%s: auto_zc_fallback is set but F_AUTO_BUF_REG is disabled\n", + __func__); + return -EINVAL; + } + + if (!!(ctx.flags & UBLK_F_SUPPORT_ZERO_COPY) + + !!(ctx.flags & UBLK_F_NEED_GET_DATA) + + !!(ctx.flags & UBLK_F_USER_COPY) + + !!(ctx.flags & UBLK_F_AUTO_BUF_REG) > 1) { + fprintf(stderr, "too many data copy modes specified\n"); return -EINVAL; } =20 i =3D optind; while (i < argc && ctx.nr_files < MAX_BACK_FILES) { diff --git a/tools/testing/selftests/ublk/test_generic_09.sh b/tools/testin= g/selftests/ublk/test_generic_09.sh index bb6f77ca5522..145e17b3d2b0 100755 --- a/tools/testing/selftests/ublk/test_generic_09.sh +++ b/tools/testing/selftests/ublk/test_generic_09.sh @@ -14,11 +14,11 @@ if ! _have_program fio; then exit "$UBLK_SKIP_CODE" fi =20 _prep_test "null" "basic IO test" =20 -dev_id=3D$(_add_ublk_dev -t null -z --auto_zc --auto_zc_fallback) +dev_id=3D$(_add_ublk_dev -t null --auto_zc --auto_zc_fallback) _check_add_dev $TID $? =20 # run fio over the two disks fio --name=3Djob1 --filename=3D/dev/ublkb"${dev_id}" --ioengine=3Dlibaio -= -rw=3Dreadwrite --iodepth=3D32 --size=3D256M > /dev/null 2>&1 ERR_CODE=3D$? diff --git a/tools/testing/selftests/ublk/test_stress_03.sh b/tools/testing= /selftests/ublk/test_stress_03.sh index 3ed4c9b2d8c0..8e9f2786ef9c 100755 --- a/tools/testing/selftests/ublk/test_stress_03.sh +++ b/tools/testing/selftests/ublk/test_stress_03.sh @@ -36,19 +36,19 @@ wait =20 if _have_feature "AUTO_BUF_REG"; then ublk_io_and_remove 8G -t null -q 4 --auto_zc & ublk_io_and_remove 256M -t loop -q 4 --auto_zc "${UBLK_BACKFILES[0]}" & ublk_io_and_remove 256M -t stripe -q 4 --auto_zc "${UBLK_BACKFILES[1]}" "= ${UBLK_BACKFILES[2]}" & - ublk_io_and_remove 8G -t null -q 4 -z --auto_zc --auto_zc_fallback & + ublk_io_and_remove 8G -t null -q 4 --auto_zc --auto_zc_fallback & wait fi =20 if _have_feature "PER_IO_DAEMON"; then ublk_io_and_remove 8G -t null -q 4 --auto_zc --nthreads 8 --per_io_tasks & ublk_io_and_remove 256M -t loop -q 4 --auto_zc --nthreads 8 --per_io_task= s "${UBLK_BACKFILES[0]}" & ublk_io_and_remove 256M -t stripe -q 4 --auto_zc --nthreads 8 --per_io_ta= sks "${UBLK_BACKFILES[1]}" "${UBLK_BACKFILES[2]}" & - ublk_io_and_remove 8G -t null -q 4 -z --auto_zc --auto_zc_fallback --nthr= eads 8 --per_io_tasks & + ublk_io_and_remove 8G -t null -q 4 --auto_zc --auto_zc_fallback --nthread= s 8 --per_io_tasks & wait fi =20 _cleanup_test "stress" _show_result $TID $ERR_CODE diff --git a/tools/testing/selftests/ublk/test_stress_04.sh b/tools/testing= /selftests/ublk/test_stress_04.sh index c7220723b537..6e165a1f90b4 100755 --- a/tools/testing/selftests/ublk/test_stress_04.sh +++ b/tools/testing/selftests/ublk/test_stress_04.sh @@ -35,11 +35,11 @@ wait =20 if _have_feature "AUTO_BUF_REG"; then ublk_io_and_kill_daemon 8G -t null -q 4 --auto_zc & ublk_io_and_kill_daemon 256M -t loop -q 4 --auto_zc "${UBLK_BACKFILES[0]}= " & ublk_io_and_kill_daemon 256M -t stripe -q 4 --auto_zc --no_ublk_fixed_fd = "${UBLK_BACKFILES[1]}" "${UBLK_BACKFILES[2]}" & - ublk_io_and_kill_daemon 8G -t null -q 4 -z --auto_zc --auto_zc_fallback & + ublk_io_and_kill_daemon 8G -t null -q 4 --auto_zc --auto_zc_fallback & wait fi =20 if _have_feature "PER_IO_DAEMON"; then ublk_io_and_kill_daemon 8G -t null -q 4 --auto_zc --nthreads 8 --per_io_t= asks & diff --git a/tools/testing/selftests/ublk/test_stress_05.sh b/tools/testing= /selftests/ublk/test_stress_05.sh index 274295061042..09b94c36f2ba 100755 --- a/tools/testing/selftests/ublk/test_stress_05.sh +++ b/tools/testing/selftests/ublk/test_stress_05.sh @@ -56,21 +56,21 @@ for reissue in $(seq 0 1); do wait done =20 if _have_feature "ZERO_COPY"; then for reissue in $(seq 0 1); do - ublk_io_and_remove 8G -t null -q 4 -g -z -r 1 -i "$reissue" & - ublk_io_and_remove 256M -t loop -q 4 -g -z -r 1 -i "$reissue" "${UBLK_BA= CKFILES[1]}" & + ublk_io_and_remove 8G -t null -q 4 -z -r 1 -i "$reissue" & + ublk_io_and_remove 256M -t loop -q 4 -z -r 1 -i "$reissue" "${UBLK_BACKF= ILES[1]}" & wait done fi =20 if _have_feature "AUTO_BUF_REG"; then for reissue in $(seq 0 1); do - ublk_io_and_remove 8G -t null -q 4 -g --auto_zc -r 1 -i "$reissue" & - ublk_io_and_remove 256M -t loop -q 4 -g --auto_zc -r 1 -i "$reissue" "${= UBLK_BACKFILES[1]}" & - ublk_io_and_remove 8G -t null -q 4 -g -z --auto_zc --auto_zc_fallback -r= 1 -i "$reissue" & + ublk_io_and_remove 8G -t null -q 4 --auto_zc -r 1 -i "$reissue" & + ublk_io_and_remove 256M -t loop -q 4 --auto_zc -r 1 -i "$reissue" "${UBL= K_BACKFILES[1]}" & + ublk_io_and_remove 8G -t null -q 4 --auto_zc --auto_zc_fallback -r 1 -i = "$reissue" & wait done fi =20 if _have_feature "PER_IO_DAEMON"; then --=20 2.45.2 From nobody Tue Dec 16 16:38:47 2025 Received: from mail-pj1-f98.google.com (mail-pj1-f98.google.com [209.85.216.98]) (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 3D6F021FF4C for ; Thu, 11 Dec 2025 05:16:34 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.98 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765430198; cv=none; b=W8e56vRolH84kJlLz7xX/OHVRCH0iVEw2ReNyHBbb/3WXw0m0ZzQcPG+3kQlOiJA34TAwJUeFY1uwxVJB97BHYL+NPAogmZGsbiBiEkcjnC5zeGQdCrd2SQxBFFZH6eAKfW1fUc/sevvHLirsAelqrbvHGt/ec02cG4b7QzT66Q= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765430198; c=relaxed/simple; bh=H8+lM69iv5qCmRMMluYOvti1KXWYY1Kk4tnxl2GjLh0=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=uWkibLjlHmar3YC/qTQQ4va8LQynGOKMFBn9CKGcCtviIej3fc8BWTLuQXFG9JbcSWfPlJGoCOutlm2GlB0h5ROckUGVApbYQzshG8/Nzzte1N9uYnP1rcCencHl3lsoEMzqTj9V+jy73EBKPnDSoUBy691L7NHzdiL2KdPjuFE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=purestorage.com; spf=fail smtp.mailfrom=purestorage.com; dkim=pass (2048-bit key) header.d=purestorage.com header.i=@purestorage.com header.b=AGGnHxE2; arc=none smtp.client-ip=209.85.216.98 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=purestorage.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=purestorage.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=purestorage.com header.i=@purestorage.com header.b="AGGnHxE2" Received: by mail-pj1-f98.google.com with SMTP id 98e67ed59e1d1-340bb45e37cso89429a91.3 for ; Wed, 10 Dec 2025 21:16:34 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=purestorage.com; s=google2022; t=1765430193; x=1766034993; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=KCjPwdDIC2dmLc08xrPilw3BWqBvNUC2kT6efTWfh3M=; b=AGGnHxE2lyLkB4DgO02Mn5QANLlkFvvK8gJZwgttzAC1j/nYZTS1KCUT4FJCpUKotj QKvKXe2hR7lVWTunLgY3KKD6Ry9E3PGpsUx/8OP6mDRyLfl8UN5QWImrqnZIojfnhHOb z1QVfBB4iFGMWS3AUVp6WZVb6GmBQEDKQEqknc6h9E+HJW2Bb/78YYg+EZo9wdKpVypo pqd47Mrmh9pJpfjhEe8sN5lYIQEg66uGBxE/CKVIsb7yGYgFTs6Sxa90vqJYgJ1EKLQC czCRmkCWZ9OpJ45b6G+NEDJ7sZfSlwDOz8Vr8HVYQ3LrSzXFjSSxrsXb1qLDkKjjQXxU lQFg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1765430193; x=1766034993; h=content-transfer-encoding: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; bh=KCjPwdDIC2dmLc08xrPilw3BWqBvNUC2kT6efTWfh3M=; b=cnASdFP8H1o3dKVFgOJYQ+0OvOWN13XDDOth6Bg+lr5RjVR2vw1eMHU6vZCF4Z+Hqk /iaQTJNapF15eMUm5LVTTkGtkWA/ECbxJS03gm9QWYNKefDx/1zZd50b2EX5czKuUe3E jeuooaBkQvG1GkEqe0AnR3d7hLvRSsLLvno5JfVrriFB4f6XeYhZRoQZiIf4beFuDNQ5 h7bLtDOLq1UJKxysopO4pJcZm0yR8fkXNZseGrqSlI2RQS9QasHI//SmYj74OUlQl+WE YN9XVJ3G2zxF5JP8sZjrF0sYmEeAonhwQfeeSvU4QQUe18Mc4R9dzLopOnjZzxxUto8x 5+Xw== X-Forwarded-Encrypted: i=1; AJvYcCVzeJAC4SWMqx968SMwUEa9SwdHPMLilwyZ5MG88igaMW1RIEWgqQPN7F282h3KlMqT7CsMHKB5/0mkZY8=@vger.kernel.org X-Gm-Message-State: AOJu0Yy3LTFkENwOUFWpqt/0TaVFC94SmtSqyMed0J2FRJpIAquojCpw LaIgr445MSezCnop7qPZ9uya/sNm0ArOAfVYBDaEcIneqXt3mdWzk6RCY83s+rawkl2jLQaSMKS XvGiVhtyzwymfJjup1pigM8tXsfiqMvuYgP+7 X-Gm-Gg: AY/fxX4UWeqRvxwqT6f+KysN3jHyMs2eRVT4RTGGY0bYWfa1oea15xD/i7Sm3CxSIcr 4nNRSQ2WFlYVoJWcfvVOKBUsbl/XgojswuPYivF95urq+gaLqEIJhVyXP9G/yQOydgI/vGHBscc S7MRuRLoh//g+kadcMq6kRYZ9s/VaYnPaPCtlzNC12RGuHQyzIvkH27lFv8yuSVLbm2oSdqQrLx gkOsnNlTp2piy2MZtgwEXYQvQwf/ukpqT6TRgBSxTg46+7PQgeJ6zokbNzZU2IE3uRGO9h0uSNo v7RJatpr/uRck2SES0PfPZfKwM2TEtrEcHdV6Gkne3KTlCRK1y5iXcya0Jtd4QR02/3tlMMZ6kU 90YVVmdbEWaNED+vt3i93ncBtvIx1/p3VlG94zoPsjA== X-Google-Smtp-Source: AGHT+IH8nf8DhaSQgUIqG7NhTB2uslZoNpvSBpi7a9ZC7nWQ5LhOiMMVgrzF2ASWsGMPe0ESj3i9yC3un7y1 X-Received: by 2002:a17:90b:390a:b0:340:e8e4:1166 with SMTP id 98e67ed59e1d1-34a906fa162mr949142a91.5.1765430193445; Wed, 10 Dec 2025 21:16:33 -0800 (PST) Received: from c7-smtp-2023.dev.purestorage.com ([208.88.159.128]) by smtp-relay.gmail.com with ESMTPS id 98e67ed59e1d1-34a9264c3b2sm100915a91.2.2025.12.10.21.16.33 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 10 Dec 2025 21:16:33 -0800 (PST) X-Relaying-Domain: purestorage.com Received: from dev-csander.dev.purestorage.com (dev-csander.dev.purestorage.com [10.7.70.37]) by c7-smtp-2023.dev.purestorage.com (Postfix) with ESMTP id DAC98341FDC; Wed, 10 Dec 2025 22:16:32 -0700 (MST) Received: by dev-csander.dev.purestorage.com (Postfix, from userid 1557716354) id D85B3E41888; Wed, 10 Dec 2025 22:16:32 -0700 (MST) From: Caleb Sander Mateos To: Ming Lei , Shuah Khan Cc: linux-block@vger.kernel.org, linux-kselftest@vger.kernel.org, linux-kernel@vger.kernel.org, Caleb Sander Mateos Subject: [PATCH 7/8] selftests: ublk: add support for user copy to kublk Date: Wed, 10 Dec 2025 22:16:02 -0700 Message-ID: <20251211051603.1154841-8-csander@purestorage.com> X-Mailer: git-send-email 2.45.2 In-Reply-To: <20251211051603.1154841-1-csander@purestorage.com> References: <20251211051603.1154841-1-csander@purestorage.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The ublk selftests mock ublk server kublk supports every data copy mode except user copy. Add support for user copy to kublk, enabled via the --user_copy (-u) command line argument. On writes, issue pread() calls to copy the write data into the ublk_io's buffer before dispatching the write to the target implementation. On reads, issue pwrite() calls to copy read data from the ublk_io's buffer before committing the request. Copy in 2 KB chunks to provide some coverage of the offseting logic. Signed-off-by: Caleb Sander Mateos --- tools/testing/selftests/ublk/file_backed.c | 7 +-- tools/testing/selftests/ublk/kublk.c | 53 ++++++++++++++++++++-- tools/testing/selftests/ublk/kublk.h | 11 +++++ tools/testing/selftests/ublk/stripe.c | 2 +- 4 files changed, 64 insertions(+), 9 deletions(-) diff --git a/tools/testing/selftests/ublk/file_backed.c b/tools/testing/sel= ftests/ublk/file_backed.c index cd9fe69ecce2..269d5f124e06 100644 --- a/tools/testing/selftests/ublk/file_backed.c +++ b/tools/testing/selftests/ublk/file_backed.c @@ -32,12 +32,13 @@ static int loop_queue_tgt_rw_io(struct ublk_thread *t, = struct ublk_queue *q, { unsigned ublk_op =3D ublksrv_get_op(iod); unsigned zc =3D ublk_queue_use_zc(q); unsigned auto_zc =3D ublk_queue_use_auto_zc(q); enum io_uring_op op =3D ublk_to_uring_op(iod, zc | auto_zc); + struct ublk_io *io =3D ublk_get_io(q, tag); struct io_uring_sqe *sqe[3]; - void *addr =3D (zc | auto_zc) ? NULL : (void *)iod->addr; + void *addr =3D io->buf_addr; =20 if (!zc || auto_zc) { ublk_io_alloc_sqes(t, sqe, 1); if (!sqe[0]) return -ENOMEM; @@ -54,11 +55,11 @@ static int loop_queue_tgt_rw_io(struct ublk_thread *t, = struct ublk_queue *q, return 1; } =20 ublk_io_alloc_sqes(t, sqe, 3); =20 - io_uring_prep_buf_register(sqe[0], q, tag, q->q_id, ublk_get_io(q, tag)->= buf_index); + io_uring_prep_buf_register(sqe[0], q, tag, q->q_id, io->buf_index); sqe[0]->flags |=3D IOSQE_CQE_SKIP_SUCCESS | IOSQE_IO_HARDLINK; sqe[0]->user_data =3D build_user_data(tag, ublk_cmd_op_nr(sqe[0]->cmd_op), 0, q->q_id, 1); =20 io_uring_prep_rw(op, sqe[1], ublk_get_registered_fd(q, 1) /*fds[1]*/, 0, @@ -66,11 +67,11 @@ static int loop_queue_tgt_rw_io(struct ublk_thread *t, = struct ublk_queue *q, iod->start_sector << 9); sqe[1]->buf_index =3D tag; sqe[1]->flags |=3D IOSQE_FIXED_FILE | IOSQE_IO_HARDLINK; sqe[1]->user_data =3D build_user_data(tag, ublk_op, 0, q->q_id, 1); =20 - io_uring_prep_buf_unregister(sqe[2], q, tag, q->q_id, ublk_get_io(q, tag)= ->buf_index); + io_uring_prep_buf_unregister(sqe[2], q, tag, q->q_id, io->buf_index); sqe[2]->user_data =3D build_user_data(tag, ublk_cmd_op_nr(sqe[2]->cmd_op)= , 0, q->q_id, 1); =20 return 2; } =20 diff --git a/tools/testing/selftests/ublk/kublk.c b/tools/testing/selftests= /ublk/kublk.c index 1765c4806523..86443365dcac 100644 --- a/tools/testing/selftests/ublk/kublk.c +++ b/tools/testing/selftests/ublk/kublk.c @@ -594,10 +594,42 @@ static void ublk_set_auto_buf_reg(const struct ublk_q= ueue *q, buf.flags =3D UBLK_AUTO_BUF_REG_FALLBACK; =20 sqe->addr =3D ublk_auto_buf_reg_to_sqe_addr(&buf); } =20 +/* Copy in pieces to test the buffer offset logic */ +#define UBLK_USER_COPY_LEN 2048 + +static void ublk_user_copy(const struct ublk_io *io, __u8 match_ublk_op) +{ + const struct ublk_queue *q =3D ublk_io_to_queue(io); + const struct ublksrv_io_desc *iod =3D ublk_get_iod(q, io->tag); + __u64 off =3D ublk_user_copy_offset(q->q_id, io->tag); + __u8 ublk_op =3D ublksrv_get_op(iod); + __u32 len =3D iod->nr_sectors << 9; + void *addr =3D io->buf_addr; + + if (ublk_op !=3D match_ublk_op) + return; + + while (len) { + __u32 copy_len =3D min(len, UBLK_USER_COPY_LEN); + ssize_t copied; + + if (ublk_op =3D=3D UBLK_IO_OP_WRITE) + copied =3D pread(q->ublk_fd, addr, copy_len, off); + else if (ublk_op =3D=3D UBLK_IO_OP_READ) + copied =3D pwrite(q->ublk_fd, addr, copy_len, off); + else + assert(0); + assert(copied =3D=3D (ssize_t)copy_len); + addr +=3D copy_len; + off +=3D copy_len; + len -=3D copy_len; + } +} + int ublk_queue_io_cmd(struct ublk_thread *t, struct ublk_io *io) { struct ublk_queue *q =3D ublk_io_to_queue(io); struct ublksrv_io_cmd *cmd; struct io_uring_sqe *sqe[1]; @@ -616,13 +648,16 @@ int ublk_queue_io_cmd(struct ublk_thread *t, struct u= blk_io *io) (UBLKS_IO_NEED_FETCH_RQ | UBLKS_IO_NEED_COMMIT_RQ_COMP | UBLKS_IO_NEED_G= ET_DATA))) return 0; =20 if (io->flags & UBLKS_IO_NEED_GET_DATA) cmd_op =3D UBLK_U_IO_NEED_GET_DATA; - else if (io->flags & UBLKS_IO_NEED_COMMIT_RQ_COMP) + else if (io->flags & UBLKS_IO_NEED_COMMIT_RQ_COMP) { + if (ublk_queue_use_user_copy(q)) + ublk_user_copy(io, UBLK_IO_OP_READ); + cmd_op =3D UBLK_U_IO_COMMIT_AND_FETCH_REQ; - else if (io->flags & UBLKS_IO_NEED_FETCH_RQ) + } else if (io->flags & UBLKS_IO_NEED_FETCH_RQ) cmd_op =3D UBLK_U_IO_FETCH_REQ; =20 if (io_uring_sq_space_left(&t->ring) < 1) io_uring_submit(&t->ring); =20 @@ -647,11 +682,11 @@ int ublk_queue_io_cmd(struct ublk_thread *t, struct u= blk_io *io) else sqe[0]->flags =3D IOSQE_FIXED_FILE; sqe[0]->rw_flags =3D 0; cmd->tag =3D io->tag; cmd->q_id =3D q->q_id; - if (!ublk_queue_no_buf(q)) + if (!ublk_queue_no_buf(q) && !ublk_queue_use_user_copy(q)) cmd->addr =3D (__u64) (uintptr_t) io->buf_addr; else cmd->addr =3D 0; =20 if (ublk_queue_use_auto_zc(q)) @@ -749,10 +784,14 @@ static void ublk_handle_uring_cmd(struct ublk_thread = *t, io->flags &=3D ~UBLKS_IO_NEED_FETCH_RQ; } =20 if (cqe->res =3D=3D UBLK_IO_RES_OK) { assert(tag < q->q_depth); + + if (ublk_queue_use_user_copy(q)) + ublk_user_copy(io, UBLK_IO_OP_WRITE); + if (q->tgt_ops->queue_io) q->tgt_ops->queue_io(t, q, tag); } else if (cqe->res =3D=3D UBLK_IO_RES_NEED_GET_DATA) { io->flags |=3D UBLKS_IO_NEED_GET_DATA | UBLKS_IO_FREE; ublk_queue_io_cmd(t, io); @@ -1505,11 +1544,11 @@ static void __cmd_create_help(char *exe, bool recov= ery) { int i; =20 printf("%s %s -t [null|loop|stripe|fault_inject] [-q nr_queues] [-d depth= ] [-n dev_id]\n", exe, recovery ? "recover" : "add"); - printf("\t[--foreground] [--quiet] [-z] [--auto_zc] [--auto_zc_fallback] = [--debug_mask mask] [-r 0|1 ] [-g]\n"); + printf("\t[--foreground] [--quiet] [-z] [--auto_zc] [--auto_zc_fallback] = [--debug_mask mask] [-r 0|1] [-g] [-u]\n"); printf("\t[-e 0|1 ] [-i 0|1] [--no_ublk_fixed_fd]\n"); printf("\t[--nthreads threads] [--per_io_tasks]\n"); printf("\t[target options] [backfile1] [backfile2] ...\n"); printf("\tdefault: nr_queues=3D2(max 32), depth=3D128(max 1024), dev_id= =3D-1(auto allocation)\n"); printf("\tdefault: nthreads=3Dnr_queues"); @@ -1566,10 +1605,11 @@ int main(int argc, char *argv[]) { "recovery_fail_io", 1, NULL, 'e'}, { "recovery_reissue", 1, NULL, 'i'}, { "get_data", 1, NULL, 'g'}, { "auto_zc", 0, NULL, 0 }, { "auto_zc_fallback", 0, NULL, 0 }, + { "user_copy", 0, NULL, 'u'}, { "size", 1, NULL, 's'}, { "nthreads", 1, NULL, 0 }, { "per_io_tasks", 0, NULL, 0 }, { "no_ublk_fixed_fd", 0, NULL, 0 }, { 0, 0, 0, 0 } @@ -1591,11 +1631,11 @@ int main(int argc, char *argv[]) if (argc =3D=3D 1) return ret; =20 opterr =3D 0; optind =3D 2; - while ((opt =3D getopt_long(argc, argv, "t:n:d:q:r:e:i:s:gaz", + while ((opt =3D getopt_long(argc, argv, "t:n:d:q:r:e:i:s:gazu", longopts, &option_idx)) !=3D -1) { switch (opt) { case 'a': ctx.all =3D 1; break; @@ -1631,10 +1671,13 @@ int main(int argc, char *argv[]) ctx.flags |=3D UBLK_F_USER_RECOVERY | UBLK_F_USER_RECOVERY_REISSUE; break; case 'g': ctx.flags |=3D UBLK_F_NEED_GET_DATA; break; + case 'u': + ctx.flags |=3D UBLK_F_USER_COPY; + break; case 's': ctx.size =3D strtoull(optarg, NULL, 10); break; case 0: if (!strcmp(longopts[option_idx].name, "debug_mask")) diff --git a/tools/testing/selftests/ublk/kublk.h b/tools/testing/selftests= /ublk/kublk.h index fe42705c6d42..fda72e19ef09 100644 --- a/tools/testing/selftests/ublk/kublk.h +++ b/tools/testing/selftests/ublk/kublk.h @@ -206,10 +206,16 @@ extern int ublk_queue_io_cmd(struct ublk_thread *t, s= truct ublk_io *io); static inline int ublk_io_auto_zc_fallback(const struct ublksrv_io_desc *i= od) { return !!(iod->op_flags & UBLK_IO_F_NEED_REG_BUF); } =20 +static inline __u64 ublk_user_copy_offset(unsigned q_id, unsigned tag) +{ + return UBLKSRV_IO_BUF_OFFSET + + ((__u64)q_id << UBLK_QID_OFF | (__u64)tag << UBLK_TAG_OFF); +} + static inline int is_target_io(__u64 user_data) { return (user_data & (1ULL << 63)) !=3D 0; } =20 @@ -403,10 +409,15 @@ static inline int ublk_queue_use_auto_zc(const struct= ublk_queue *q) static inline int ublk_queue_auto_zc_fallback(const struct ublk_queue *q) { return q->flags & UBLKS_Q_AUTO_BUF_REG_FALLBACK; } =20 +static inline bool ublk_queue_use_user_copy(const struct ublk_queue *q) +{ + return !!(q->flags & UBLK_F_USER_COPY); +} + static inline int ublk_queue_no_buf(const struct ublk_queue *q) { return ublk_queue_use_zc(q) || ublk_queue_use_auto_zc(q); } =20 diff --git a/tools/testing/selftests/ublk/stripe.c b/tools/testing/selftest= s/ublk/stripe.c index 791fa8dc1651..fd412e1f01c0 100644 --- a/tools/testing/selftests/ublk/stripe.c +++ b/tools/testing/selftests/ublk/stripe.c @@ -132,11 +132,11 @@ static int stripe_queue_tgt_rw_io(struct ublk_thread = *t, struct ublk_queue *q, enum io_uring_op op =3D stripe_to_uring_op(iod, zc | auto_zc); struct io_uring_sqe *sqe[NR_STRIPE]; struct stripe_array *s =3D alloc_stripe_array(conf, iod); struct ublk_io *io =3D ublk_get_io(q, tag); int i, extra =3D zc ? 2 : 0; - void *base =3D (zc | auto_zc) ? NULL : (void *)iod->addr; + void *base =3D io->buf_addr; =20 io->private_data =3D s; calculate_stripe_array(conf, iod, s, base); =20 ublk_io_alloc_sqes(t, sqe, s->nr + extra); --=20 2.45.2 From nobody Tue Dec 16 16:38:47 2025 Received: from mail-pl1-f226.google.com (mail-pl1-f226.google.com [209.85.214.226]) (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 6491C26F295 for ; Thu, 11 Dec 2025 05:16:34 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.226 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765430198; cv=none; b=DC/exXq2kCB1mIB4r7vFosbOAbtZJnudP15EzL9DJhXKFD8hs1EjKaNEhTEG1GF/qxe9aU4ro+o3HBTD3gH4oNkYV58QnV45D8PpapSzpRZSYG/+HnX5OZCK0ELB0AZPbFSJi4s/hEMHCbdbcnfQ1EUf2/Umc5KSCpFH77q0Twg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765430198; c=relaxed/simple; bh=yqsFqRraCuU6qLjbv6DFoFf1m8GL0qY6w2CbR8yfHSE=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=DrNiiMu1cEEh2nI7SKySKKZariziVZPFDCGg2HwDkNnIj+gonv2CfTDEM3zqPrtcLHcmb8CgOj2sr8V4+pU4Lfbg1bHpbruQiD9xSqFlEsZyyMN9zHBN3/0HCxpY28RMqHeJimiNKxcGuyEh0MlEKv0ldtpMmNKNDXr+tjt18AA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=purestorage.com; spf=fail smtp.mailfrom=purestorage.com; dkim=pass (2048-bit key) header.d=purestorage.com header.i=@purestorage.com header.b=AB/w2X0j; arc=none smtp.client-ip=209.85.214.226 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=purestorage.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=purestorage.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=purestorage.com header.i=@purestorage.com header.b="AB/w2X0j" Received: by mail-pl1-f226.google.com with SMTP id d9443c01a7336-29dffdad925so829635ad.0 for ; Wed, 10 Dec 2025 21:16:34 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=purestorage.com; s=google2022; t=1765430194; x=1766034994; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=SuNOPxZW7Nye7tVoThWbMH6oZw/ivt2VUKr8V6qrvgM=; b=AB/w2X0jWnq6nshCAJWwPsYbG8wlev4oqidvQN1DUBaAE0c5Qhpw7IumthyRne4vJ8 LzUWOZl9IW0Dqi9bP89gnA+5Km/MPySkCDwqJkIJyzUAix1g6Po2yrC/At7twwRa6Ypf vVfGg0XBbj9zkDDj9VwNb8HNkSd2heZBjprbKbhLku4KhxJgI+aqmViR1suVT3+wxPqq MEiS/+kprxRju8+0yxz2wDGr2MDVRgWbiRG+aV87iQ2QwaAZ/9RGjRG1kFTLxmsrSE0Q WgmDlCf81ZJBaKulqqXkRvYmWCsBngIdwiNPxrcRfDQ7GvTvESdu0v++yZGM1RflJIBa 2Eyg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1765430194; x=1766034994; h=content-transfer-encoding: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; bh=SuNOPxZW7Nye7tVoThWbMH6oZw/ivt2VUKr8V6qrvgM=; b=Mo4kLjJkBUZmJKS2OZl8rOPye3/qG+LwUd3OP4TU3xOPji4dohfPk+y2N88JscyPYR ybOZSdvLlb+iKeoOaoLmqk6SwUyIh0YFKa/sDzwXuxAmLat7+Hrf2Hswmcri6URvp4ml +C2uFPrGDNhCwVUHjRcsKatf86fN0rRiQIiXNH/qvPZoEsjHzLnrhoKYODQOi17hDZNE nBPVHcW1JuY97NmjSy8n2nqfM6E957dJP2+Ajc3w7Z70OI6qnLQ8NrQsdqTgMAT05wAf 1tqaZKV7Y2D7ftfc9A0GEBFCXcTov3p90DNaFeWaeLNCvvfIFe+EgWmnx3VsTSDOSlM2 l0qA== X-Forwarded-Encrypted: i=1; AJvYcCWygxgU6QmbwpYztLd5oaz8FHiLWR7X5D1lG3OVUwUw0O+CTEyWBz8dUh5VIVkU41esurq17CVnoqLyNc8=@vger.kernel.org X-Gm-Message-State: AOJu0Ywa8SvV3EfGkegt2QBz6KoTfpzni9rwdMGTKdNdv8cLmfKrpgz5 m5ate+lQ+We2BvIVFBW1KUGNBGfJv1j956X6kGZgiHQwAjlBUykqZi/URII1uu3JtD8aZkjggtD oodkwwuHZmvdAcCZmri34AWE2+EkWN/3WSzdA X-Gm-Gg: AY/fxX4IuNTIdN5XwdYyjYBqdbDlLEnTzKJKfVlk2s8ipR+iApsrliyTrLmCdxMPiRy frN3JiI4S8k+/xpB98Y/YzGg7sqEOZzskEfVmqV6ARmTX6DNQxM4HfjBm7UxwfNNiZEMi4vU4lM cTkN1vdmiq1F5ChotJpbGW/8DcBWWa5S+rXndLAYtv7lmCD6KTg0M4PNz1817nwFYGnjuUluAsc Wze4VNRJfJ8MvGBDR3bxawQxmYcarXfavcTrvVtbRKESBLyPlHmAC6I6Tb0Wi81+2UdkNmuHZqo zHIeHCSkcpyts+uldmSdw+kDTVniBpwspoEVRRjdImEC5+JgeZESicyoC4f5ic1JZNxcq0475Ay fgB/AteDp7hQrDQE/zRo5ZTCB8XH/6hW7mfXLyfIXXQ== X-Google-Smtp-Source: AGHT+IGBDOAGzJM4hUb5ptKH/Um9Pge2SQjp4QLIFDY2SRLAV9pNQQv6koiJWCoez/1i8X5zR6Xjd0Gs4fe7 X-Received: by 2002:a17:903:3c24:b0:29d:779c:c0cb with SMTP id d9443c01a7336-29eed191802mr9708775ad.2.1765430193618; Wed, 10 Dec 2025 21:16:33 -0800 (PST) Received: from c7-smtp-2023.dev.purestorage.com ([208.88.159.128]) by smtp-relay.gmail.com with ESMTPS id d9443c01a7336-29ee9dae906sm2047475ad.62.2025.12.10.21.16.33 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 10 Dec 2025 21:16:33 -0800 (PST) X-Relaying-Domain: purestorage.com Received: from dev-csander.dev.purestorage.com (unknown [IPv6:2620:125:9007:640:ffff::1199]) by c7-smtp-2023.dev.purestorage.com (Postfix) with ESMTP id 13FDC341D2E; Wed, 10 Dec 2025 22:16:33 -0700 (MST) Received: by dev-csander.dev.purestorage.com (Postfix, from userid 1557716354) id 111EFE41888; Wed, 10 Dec 2025 22:16:33 -0700 (MST) From: Caleb Sander Mateos To: Ming Lei , Shuah Khan Cc: linux-block@vger.kernel.org, linux-kselftest@vger.kernel.org, linux-kernel@vger.kernel.org, Caleb Sander Mateos Subject: [PATCH 8/8] selftests: ublk: add user copy test cases Date: Wed, 10 Dec 2025 22:16:03 -0700 Message-ID: <20251211051603.1154841-9-csander@purestorage.com> X-Mailer: git-send-email 2.45.2 In-Reply-To: <20251211051603.1154841-1-csander@purestorage.com> References: <20251211051603.1154841-1-csander@purestorage.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The ublk selftests cover every data copy mode except user copy. Add tests for user copy based on the existing test suite: - generic_14 ("basic recover function verification (user copy)") based on generic_04 and generic_05 - null_03 ("basic IO test with user copy") based on null_01 and null_02 - loop_06 ("write and verify over user copy") based on loop_01 and loop_03 - loop_07 ("mkfs & mount & umount with user copy") based on loop_02 and loop_04 - stripe_05 ("write and verify test on user copy") based on stripe_03 - stripe_06 ("mkfs & mount & umount on user copy") based on stripe_02 and stripe_04 - Added test cases to stress_05 ("run IO and remove device with recovery enabled") for user copy - stress_06 ("run IO and remove device (user copy)") based on stress_01 and stress_03 - stress_07 ("run IO and kill ublk server (user copy)") based on stress_02 and stress_04 Signed-off-by: Caleb Sander Mateos --- tools/testing/selftests/ublk/Makefile | 8 ++++ .../testing/selftests/ublk/test_generic_14.sh | 40 +++++++++++++++++++ tools/testing/selftests/ublk/test_loop_06.sh | 25 ++++++++++++ tools/testing/selftests/ublk/test_loop_07.sh | 21 ++++++++++ tools/testing/selftests/ublk/test_null_03.sh | 24 +++++++++++ .../testing/selftests/ublk/test_stress_05.sh | 7 ++++ .../testing/selftests/ublk/test_stress_06.sh | 39 ++++++++++++++++++ .../testing/selftests/ublk/test_stress_07.sh | 39 ++++++++++++++++++ .../testing/selftests/ublk/test_stripe_05.sh | 26 ++++++++++++ .../testing/selftests/ublk/test_stripe_06.sh | 21 ++++++++++ 10 files changed, 250 insertions(+) create mode 100755 tools/testing/selftests/ublk/test_generic_14.sh create mode 100755 tools/testing/selftests/ublk/test_loop_06.sh create mode 100755 tools/testing/selftests/ublk/test_loop_07.sh create mode 100755 tools/testing/selftests/ublk/test_null_03.sh create mode 100755 tools/testing/selftests/ublk/test_stress_06.sh create mode 100755 tools/testing/selftests/ublk/test_stress_07.sh create mode 100755 tools/testing/selftests/ublk/test_stripe_05.sh create mode 100755 tools/testing/selftests/ublk/test_stripe_06.sh diff --git a/tools/testing/selftests/ublk/Makefile b/tools/testing/selftest= s/ublk/Makefile index 770269efe42a..837977b62417 100644 --- a/tools/testing/selftests/ublk/Makefile +++ b/tools/testing/selftests/ublk/Makefile @@ -19,28 +19,36 @@ TEST_PROGS +=3D test_generic_08.sh TEST_PROGS +=3D test_generic_09.sh TEST_PROGS +=3D test_generic_10.sh TEST_PROGS +=3D test_generic_11.sh TEST_PROGS +=3D test_generic_12.sh TEST_PROGS +=3D test_generic_13.sh +TEST_PROGS +=3D test_generic_14.sh =20 TEST_PROGS +=3D test_null_01.sh TEST_PROGS +=3D test_null_02.sh +TEST_PROGS +=3D test_null_03.sh TEST_PROGS +=3D test_loop_01.sh TEST_PROGS +=3D test_loop_02.sh TEST_PROGS +=3D test_loop_03.sh TEST_PROGS +=3D test_loop_04.sh TEST_PROGS +=3D test_loop_05.sh +TEST_PROGS +=3D test_loop_06.sh +TEST_PROGS +=3D test_loop_07.sh TEST_PROGS +=3D test_stripe_01.sh TEST_PROGS +=3D test_stripe_02.sh TEST_PROGS +=3D test_stripe_03.sh TEST_PROGS +=3D test_stripe_04.sh +TEST_PROGS +=3D test_stripe_05.sh +TEST_PROGS +=3D test_stripe_06.sh =20 TEST_PROGS +=3D test_stress_01.sh TEST_PROGS +=3D test_stress_02.sh TEST_PROGS +=3D test_stress_03.sh TEST_PROGS +=3D test_stress_04.sh TEST_PROGS +=3D test_stress_05.sh +TEST_PROGS +=3D test_stress_06.sh +TEST_PROGS +=3D test_stress_07.sh =20 TEST_GEN_PROGS_EXTENDED =3D kublk =20 include ../lib.mk =20 diff --git a/tools/testing/selftests/ublk/test_generic_14.sh b/tools/testin= g/selftests/ublk/test_generic_14.sh new file mode 100755 index 000000000000..cd9b44b97c24 --- /dev/null +++ b/tools/testing/selftests/ublk/test_generic_14.sh @@ -0,0 +1,40 @@ +#!/bin/bash +# SPDX-License-Identifier: GPL-2.0 + +. "$(cd "$(dirname "$0")" && pwd)"/test_common.sh + +TID=3D"generic_14" +ERR_CODE=3D0 + +ublk_run_recover_test() +{ + run_io_and_recover 256M "kill_daemon" "$@" + ERR_CODE=3D$? + if [ ${ERR_CODE} -ne 0 ]; then + echo "$TID failure: $*" + _show_result $TID $ERR_CODE + fi +} + +if ! _have_program fio; then + exit "$UBLK_SKIP_CODE" +fi + +_prep_test "recover" "basic recover function verification (user copy)" + +_create_backfile 0 256M +_create_backfile 1 128M +_create_backfile 2 128M + +ublk_run_recover_test -t null -q 2 -r 1 -u & +ublk_run_recover_test -t loop -q 2 -r 1 -u "${UBLK_BACKFILES[0]}" & +ublk_run_recover_test -t stripe -q 2 -r 1 -u "${UBLK_BACKFILES[1]}" "${UBL= K_BACKFILES[2]}" & +wait + +ublk_run_recover_test -t null -q 2 -r 1 -u -i 1 & +ublk_run_recover_test -t loop -q 2 -r 1 -u -i 1 "${UBLK_BACKFILES[0]}" & +ublk_run_recover_test -t stripe -q 2 -r 1 -u -i 1 "${UBLK_BACKFILES[1]}" "= ${UBLK_BACKFILES[2]}" & +wait + +_cleanup_test "recover" +_show_result $TID $ERR_CODE diff --git a/tools/testing/selftests/ublk/test_loop_06.sh b/tools/testing/s= elftests/ublk/test_loop_06.sh new file mode 100755 index 000000000000..1d1a8a725502 --- /dev/null +++ b/tools/testing/selftests/ublk/test_loop_06.sh @@ -0,0 +1,25 @@ +#!/bin/bash +# SPDX-License-Identifier: GPL-2.0 + +. "$(cd "$(dirname "$0")" && pwd)"/test_common.sh + +TID=3D"loop_06" +ERR_CODE=3D0 + +if ! _have_program fio; then + exit "$UBLK_SKIP_CODE" +fi + +_prep_test "loop" "write and verify over user copy" + +_create_backfile 0 256M +dev_id=3D$(_add_ublk_dev -t loop -u "${UBLK_BACKFILES[0]}") +_check_add_dev $TID $? + +# run fio over the ublk disk +_run_fio_verify_io --filename=3D/dev/ublkb"${dev_id}" --size=3D256M +ERR_CODE=3D$? + +_cleanup_test "loop" + +_show_result $TID $ERR_CODE diff --git a/tools/testing/selftests/ublk/test_loop_07.sh b/tools/testing/s= elftests/ublk/test_loop_07.sh new file mode 100755 index 000000000000..493f3fb611a5 --- /dev/null +++ b/tools/testing/selftests/ublk/test_loop_07.sh @@ -0,0 +1,21 @@ +#!/bin/bash +# SPDX-License-Identifier: GPL-2.0 + +. "$(cd "$(dirname "$0")" && pwd)"/test_common.sh + +TID=3D"loop_07" +ERR_CODE=3D0 + +_prep_test "loop" "mkfs & mount & umount with user copy" + +_create_backfile 0 256M + +dev_id=3D$(_add_ublk_dev -t loop -u "${UBLK_BACKFILES[0]}") +_check_add_dev $TID $? + +_mkfs_mount_test /dev/ublkb"${dev_id}" +ERR_CODE=3D$? + +_cleanup_test "loop" + +_show_result $TID $ERR_CODE diff --git a/tools/testing/selftests/ublk/test_null_03.sh b/tools/testing/s= elftests/ublk/test_null_03.sh new file mode 100755 index 000000000000..0051067b4686 --- /dev/null +++ b/tools/testing/selftests/ublk/test_null_03.sh @@ -0,0 +1,24 @@ +#!/bin/bash +# SPDX-License-Identifier: GPL-2.0 + +. "$(cd "$(dirname "$0")" && pwd)"/test_common.sh + +TID=3D"null_03" +ERR_CODE=3D0 + +if ! _have_program fio; then + exit "$UBLK_SKIP_CODE" +fi + +_prep_test "null" "basic IO test with user copy" + +dev_id=3D$(_add_ublk_dev -t null -u) +_check_add_dev $TID $? + +# run fio over the two disks +fio --name=3Djob1 --filename=3D/dev/ublkb"${dev_id}" --ioengine=3Dlibaio -= -rw=3Dreadwrite --iodepth=3D32 --size=3D256M > /dev/null 2>&1 +ERR_CODE=3D$? + +_cleanup_test "null" + +_show_result $TID $ERR_CODE diff --git a/tools/testing/selftests/ublk/test_stress_05.sh b/tools/testing= /selftests/ublk/test_stress_05.sh index 09b94c36f2ba..cb8203957d1d 100755 --- a/tools/testing/selftests/ublk/test_stress_05.sh +++ b/tools/testing/selftests/ublk/test_stress_05.sh @@ -78,7 +78,14 @@ if _have_feature "PER_IO_DAEMON"; then ublk_io_and_remove 256M -t loop -q 4 --nthreads 8 --per_io_tasks -r 1 -i = "$reissue" "${UBLK_BACKFILES[0]}" & ublk_io_and_remove 8G -t null -q 4 --nthreads 8 --per_io_tasks -r 1 -i "$= reissue" & fi wait =20 +for reissue in $(seq 0 1); do + ublk_io_and_remove 8G -t null -q 4 -u -r 1 -i "$reissue" & + ublk_io_and_remove 256M -t loop -q 4 -u -r 1 -i "$reissue" "${UBLK_BACKFI= LES[1]}" & + ublk_io_and_remove 8G -t null -q 4 -u -r 1 -i "$reissue" & + wait +done + _cleanup_test "stress" _show_result $TID $ERR_CODE diff --git a/tools/testing/selftests/ublk/test_stress_06.sh b/tools/testing= /selftests/ublk/test_stress_06.sh new file mode 100755 index 000000000000..37188ec2e1f7 --- /dev/null +++ b/tools/testing/selftests/ublk/test_stress_06.sh @@ -0,0 +1,39 @@ +#!/bin/bash +# SPDX-License-Identifier: GPL-2.0 + +. "$(cd "$(dirname "$0")" && pwd)"/test_common.sh +TID=3D"stress_06" +ERR_CODE=3D0 + +ublk_io_and_remove() +{ + run_io_and_remove "$@" + ERR_CODE=3D$? + if [ ${ERR_CODE} -ne 0 ]; then + echo "$TID failure: $*" + _show_result $TID $ERR_CODE + fi +} + +if ! _have_program fio; then + exit "$UBLK_SKIP_CODE" +fi + +_prep_test "stress" "run IO and remove device (user copy)" + +_create_backfile 0 256M +_create_backfile 1 128M +_create_backfile 2 128M + +ublk_io_and_remove 8G -t null -q 4 -u & +ublk_io_and_remove 256M -t loop -q 4 -u "${UBLK_BACKFILES[0]}" & +ublk_io_and_remove 256M -t stripe -q 4 -u "${UBLK_BACKFILES[1]}" "${UBLK_B= ACKFILES[2]}" & +wait + +ublk_io_and_remove 8G -t null -q 4 -u --nthreads 8 --per_io_tasks & +ublk_io_and_remove 256M -t loop -q 4 -u --nthreads 8 --per_io_tasks "${UBL= K_BACKFILES[0]}" & +ublk_io_and_remove 256M -t stripe -q 4 -u --nthreads 8 --per_io_tasks "${U= BLK_BACKFILES[1]}" "${UBLK_BACKFILES[2]}" & +wait + +_cleanup_test "stress" +_show_result $TID $ERR_CODE diff --git a/tools/testing/selftests/ublk/test_stress_07.sh b/tools/testing= /selftests/ublk/test_stress_07.sh new file mode 100755 index 000000000000..fb061fc26d36 --- /dev/null +++ b/tools/testing/selftests/ublk/test_stress_07.sh @@ -0,0 +1,39 @@ +#!/bin/bash +# SPDX-License-Identifier: GPL-2.0 + +. "$(cd "$(dirname "$0")" && pwd)"/test_common.sh +TID=3D"stress_07" +ERR_CODE=3D0 + +ublk_io_and_kill_daemon() +{ + run_io_and_kill_daemon "$@" + ERR_CODE=3D$? + if [ ${ERR_CODE} -ne 0 ]; then + echo "$TID failure: $*" + _show_result $TID $ERR_CODE + fi +} + +if ! _have_program fio; then + exit "$UBLK_SKIP_CODE" +fi + +_prep_test "stress" "run IO and kill ublk server (user copy)" + +_create_backfile 0 256M +_create_backfile 1 128M +_create_backfile 2 128M + +ublk_io_and_kill_daemon 8G -t null -q 4 -u --no_ublk_fixed_fd & +ublk_io_and_kill_daemon 256M -t loop -q 4 -u --no_ublk_fixed_fd "${UBLK_BA= CKFILES[0]}" & +ublk_io_and_kill_daemon 256M -t stripe -q 4 -u "${UBLK_BACKFILES[1]}" "${U= BLK_BACKFILES[2]}" & +wait + +ublk_io_and_kill_daemon 8G -t null -q 4 -u --nthreads 8 --per_io_tasks & +ublk_io_and_kill_daemon 256M -t loop -q 4 -u --nthreads 8 --per_io_tasks "= ${UBLK_BACKFILES[0]}" & +ublk_io_and_kill_daemon 256M -t stripe -q 4 -u --nthreads 8 --per_io_tasks= "${UBLK_BACKFILES[1]}" "${UBLK_BACKFILES[2]}" & +wait + +_cleanup_test "stress" +_show_result $TID $ERR_CODE diff --git a/tools/testing/selftests/ublk/test_stripe_05.sh b/tools/testing= /selftests/ublk/test_stripe_05.sh new file mode 100755 index 000000000000..05d71951d710 --- /dev/null +++ b/tools/testing/selftests/ublk/test_stripe_05.sh @@ -0,0 +1,26 @@ +#!/bin/bash +# SPDX-License-Identifier: GPL-2.0 + +. "$(cd "$(dirname "$0")" && pwd)"/test_common.sh + +TID=3D"stripe_05" +ERR_CODE=3D0 + +if ! _have_program fio; then + exit "$UBLK_SKIP_CODE" +fi + +_prep_test "stripe" "write and verify test on user copy" + +_create_backfile 0 256M +_create_backfile 1 256M + +dev_id=3D$(_add_ublk_dev -t stripe -q 2 -u "${UBLK_BACKFILES[0]}" "${UBLK_= BACKFILES[1]}") +_check_add_dev $TID $? + +# run fio over the ublk disk +_run_fio_verify_io --filename=3D/dev/ublkb"${dev_id}" --size=3D512M +ERR_CODE=3D$? + +_cleanup_test "stripe" +_show_result $TID $ERR_CODE diff --git a/tools/testing/selftests/ublk/test_stripe_06.sh b/tools/testing= /selftests/ublk/test_stripe_06.sh new file mode 100755 index 000000000000..d06cac7626e2 --- /dev/null +++ b/tools/testing/selftests/ublk/test_stripe_06.sh @@ -0,0 +1,21 @@ +#!/bin/bash +# SPDX-License-Identifier: GPL-2.0 + +. "$(cd "$(dirname "$0")" && pwd)"/test_common.sh + +TID=3D"stripe_06" +ERR_CODE=3D0 + +_prep_test "stripe" "mkfs & mount & umount on user copy" + +_create_backfile 0 256M +_create_backfile 1 256M + +dev_id=3D$(_add_ublk_dev -t stripe -u -q 2 "${UBLK_BACKFILES[0]}" "${UBLK_= BACKFILES[1]}") +_check_add_dev $TID $? + +_mkfs_mount_test /dev/ublkb"${dev_id}" +ERR_CODE=3D$? + +_cleanup_test "stripe" +_show_result $TID $ERR_CODE --=20 2.45.2