Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vdjsi-0048PN-1N for pgsql-bugs@arkaria.postgresql.org; Thu, 08 Jan 2026 06:52:29 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vdjsg-000iI3-1W for pgsql-bugs@arkaria.postgresql.org; Thu, 08 Jan 2026 06:52:27 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vdjsg-000iHu-0L for pgsql-bugs@lists.postgresql.org; Thu, 08 Jan 2026 06:52:26 +0000 Received: from mail-ot1-x332.google.com ([2607:f8b0:4864:20::332]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1vdjsd-005EFF-2H for pgsql-bugs@lists.postgresql.org; Thu, 08 Jan 2026 06:52:26 +0000 Received: by mail-ot1-x332.google.com with SMTP id 46e09a7af769-7caf5314847so1860991a34.0 for ; Wed, 07 Jan 2026 22:52:23 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1767855141; x=1768459941; darn=lists.postgresql.org; h=to:subject:message-id:date:from:in-reply-to:references:mime-version :from:to:cc:subject:date:message-id:reply-to; bh=x+ejRbXnF4CQjTKEHv1BtdTBFSH6HbUBUizKLcuuliM=; b=To+hR8PTO8YFiQB7lv8ZAafFmY0nA6hNFHhaKo9mrJ1Esv+2ifUYy4vZBMftYNf066 ilhT+Ur/ccmeVYY5a3uvfS7h/1QzCXlw7VCrECY84LOKNFcNC2fU/4XV/0RkA0jtgpIF voB2eLMXbZ+eThugLYQj4rEVBh+whVRyyvPOAzc8uKmnsGF1LPfFcsBPjxAuWXqdMrBj SFZTL0/ZPHnsrGcR6pU69srk+tSTo1qTwUPK39VI20fC4DWtdk29rUdN988ZfjFqf7j7 Tqf33bmEH90YX9l37hvXbb0YRz+X2xohk8gxVVkTB04aMCtT+/2hh+EdMInfAeXU++1M 3HLA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1767855141; x=1768459941; h=to:subject:message-id:date:from:in-reply-to:references:mime-version :x-gm-gg:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=x+ejRbXnF4CQjTKEHv1BtdTBFSH6HbUBUizKLcuuliM=; b=r5q6HgTRc9j2SNU73gZ5qiU+cESfpLmHW11banDx84+azGmD0+/PA9/W5Tml4Im456 /L2mijXiR53jRYs65A1MVsrRXgEwQSTR9I+jYdtMeWFZqSon1PPHR6p4hwlpUf+7dSjn poFceoRWHKnNTO8Yy3IkdZ7g5HdrauGSVJyg1NO+zqvRmVYO9XS3zzUFV5f12fvtQ8zo DCKFCNArrYX5DvZLv+j+NQtv7+K+3bxPANGhSGBHA7mt+HrieGKUX2kqGnH8jxfOLpiq p4/P+O48wOHqcjw+JxWprslduyfAxATZvH/kW6Z1ztNhpXe5/Ss33j4cVZoaaQz0JnxK LuEQ== X-Forwarded-Encrypted: i=1; AJvYcCXcbnlxZp61/qrfT3am0RR8IxaP6aERSgu2+ABowhHtPj/kO10e86mbTzCDg5RdZYsfGWiMqVw+28t4@lists.postgresql.org X-Gm-Message-State: AOJu0YzbPHspphhcHwmUB98yuNepY4TAyxdzdzydJZy8Os1iThECpB2a mGWXROMBmCJcfjZLtjdL7Ahm/OIrqy252sSNf20wglfJ9YO2oT6Kq8G7e/AoGHzUHTBbXdXazj2 SRIv4TUlzY8qSPmGRwIxLiRC8Sk/arqQ= X-Gm-Gg: AY/fxX4Mr7Yy9FQi2vyirwvrFwYkM1qblcz32Urb0/NvCh8WzzDTOKM/0hdPMmvvobl 8kUjKwPje+eHwLqFbT60+vgkRq7Ar7InXudJjOF8iPqCTF6OcbH41Z5qtjOu2g/RS2gYzJ78IRj TPsfF9+G+S24fYuFLF846isdARqXJXbc2TjuL9g8liObzZF5nqijeI3V6b3HR/k9FoEXo2OcdAS OXsMJgGf1I//g+yWpyQvtbM9gJ0QQxlFeWJJ+rro+e4tuM8i3cAh7yr7cuTILMBMxZbj/h8Zj5f k7TgjGc= X-Google-Smtp-Source: AGHT+IGTyzHEO2RwrwVNd867ZOBRCYD1KIotu0f7E2y42rHGy8B8u5s9hK10bUDeYDX2+ZsDy/g+ZdRz4EZUUqoPWAs= X-Received: by 2002:a05:6820:609:b0:659:9a49:9069 with SMTP id 006d021491bc7-65f54f50e2dmr2124084eaf.52.1767855141349; Wed, 07 Jan 2026 22:52:21 -0800 (PST) MIME-Version: 1.0 References: <19369-aa853da20e970a89@postgresql.org> In-Reply-To: From: surya poondla Date: Wed, 7 Jan 2026 22:52:10 -0800 X-Gm-Features: AQt7F2qBGmwlSM2oRripJUL1bLGPAcP2VpAMH5uP4bkSrB5LtWgY1e-G3t80tKw Message-ID: Subject: Re: BUG #19369: Not documented that io_uring on kernel versions between 5.1 and below 5.6 does not work To: evsi@amazon.com, pgsql-bugs@lists.postgresql.org Content-Type: multipart/alternative; boundary="000000000000b6ea470647dad989" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000b6ea470647dad989 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Hi Evan, In my previous email/findings, I didn't compile postgres with the liburing option. I did it this time and see the same symptoms as you saw. surya@surya:~/pgdata18$ uname -r 5.4.0-216-generic surya@surya:~/pgdata18$ uname -a Linux surya 5.4.0-216-generic #236-Ubuntu SMP Fri Apr 11 19:55:34 UTC 2025 aarch64 aarch64 aarch64 GNU/Linux surya@surya:~/pgdata18$ surya@surya:~/pgdata18$ ~/pg18/bin/pg_ctl -D ~/pgdata18 restart waiting for server to shut down.... done server stopped waiting for server to start....2026-01-08 06:20:36.301 UTC [17042] LOG: redirecting log output to logging collector process 2026-01-08 06:20:36.301 UTC [17042] HINT: Future log output will appear in directory "log". done server started surya@surya:~/pgdata18$ ls log/ postgresql-2026-01-08_061910.log postgresql-2026-01-08_062036.log postgresql-2026-01-08_061955.log surya@surya:~/pgdata18$ ~/pg18/bin/psql -d postgres psql: error: connection to server on socket "/tmp/.s.PGSQL.5432" failed: FATAL: could not read blocks 0..0 in file "global/1260": Invalid argument In the logs, I see 026-01-08 06:24:29.858 UTC [17126] DEBUG: InitPostgres 2026-01-08 06:24:29.858 UTC [17127] DEBUG: logical replication launcher started 2026-01-08 06:24:29.858 UTC [17127] DEBUG: InitPostgres 2026-01-08 06:24:29.858 UTC [17126] DEBUG: io 6400 |op invalid|target invalid|state HANDED_OUT : adding cb #1, id 2/aio_shared_buffer_readv_cb 2026-01-08 06:24:29.858 UTC [17126] DEBUG: io 6400 |op invalid|target smgr|state HANDED_OUT : adding cb #2, id 1/aio_md_readv_cb 2026-01-08 06:24:29.858 UTC [17126] DEBUG: io 6400 |op readv|target smgr|state DEFINED : calling cb #1 2/aio_shared_buffer_readv_cb->stage(0) 2026-01-08 06:24:29.859 UTC [17126] DEBUG: io 6400 |op readv|target smgr|state STAGED : staged (synchronous: 0, in_batch: 1) 2026-01-08 06:24:29.859 UTC [17126] DEBUG: io 6400 |op readv|target smgr|state SUBMITTED : wait_one io_gen: 1, ref_gen: 1, cycle 0 2026-01-08 06:24:29.859 UTC [17126] LOG: could not read blocks 0..0 in file "global/1262": Invalid argument 2026-01-08 06:24:29.859 UTC [17126] DEBUG: io 6400 |op readv|target smgr|state COMPLETED_IO : after shared completion: distilled result: (status ERROR, id 1, error_data: 22, result 0), raw_result: -22 2026-01-08 06:24:29.859 UTC [17126] DEBUG: io 6400 |op readv|target smgr|state COMPLETED_SHARED: after local completion: result: (status ERROR, id 1, error_data 22, result 0), raw_result: -22 2026-01-08 06:24:29.859 UTC [17126] DEBUG: drained 1/1, now expecting 0 2026-01-08 06:24:29.859 UTC [17126] DEBUG: io 6400 |op invalid|target invalid|state IDLE : wait_one io_gen: 2, ref_gen: 1, cycle 0 2026-01-08 06:24:29.859 UTC [17126] DEBUG: wait_one with 0 sleeps 2026-01-08 06:24:29.859 UTC [17126] ERROR: could not read blocks 0..0 in file "global/1262": Invalid argument 2026-01-08 06:24:30.859 UTC [17126] DEBUG: io 6400 |op invalid|target invalid|state HANDED_OUT : adding cb #1, id 2/aio_shared_buffer_readv_cbhe logs I will do some more testing on this and update my findings. -Surya Poondla On Wed, Jan 7, 2026 at 8:15=E2=80=AFPM surya poondla wrote: > Hi Evsi, > > I created a new Ubuntu server and am able to reproduce the same behavior > you reported for Postgres 18.1 on aarch64 architecture. > > surya@surya:~/pgdata18/log$ uname -r > 5.4.0-216-generic > surya@surya:~/pgdata18/log$ uname -a > Linux surya 5.4.0-216-generic #236-Ubuntu SMP Fri Apr 11 19:55:34 UTC 202= 5 > aarch64 aarch64 aarch64 GNU/Linux > > I did some testing and see the below > In the postgresql.conf if I put > io_method =3D 'worker' or io_method =3D 'sync', postgres is able to resta= rt > with no errors. > But if io_method =3D 'io_uring' then I see the below on my console > > surya@surya:~/postgresql-18.1$ vim ~/pgdata18/postgresql.conf > surya@surya:~/postgresql-18.1$ ~/pg18/bin/pg_ctl -D ~/pgdata18 restart > waiting for server to shut down....2026-01-08 04:06:07.081 UTC [44973] > DEBUG: logger shutting down > 2026-01-08 04:06:07.081 UTC [44973] DEBUG: shmem_exit(0): 0 > before_shmem_exit callbacks to make > 2026-01-08 04:06:07.081 UTC [44973] DEBUG: shmem_exit(0): 0 on_shmem_exi= t > callbacks to make > 2026-01-08 04:06:07.081 UTC [44973] DEBUG: proc_exit(0): 0 callbacks to > make > 2026-01-08 04:06:07.081 UTC [44973] DEBUG: exit(0) > 2026-01-08 04:06:07.081 UTC [44973] DEBUG: shmem_exit(-1): 0 > before_shmem_exit callbacks to make > 2026-01-08 04:06:07.081 UTC [44973] DEBUG: shmem_exit(-1): 0 > on_shmem_exit callbacks to make > 2026-01-08 04:06:07.081 UTC [44973] DEBUG: proc_exit(-1): 0 callbacks to > make > done > server stopped > waiting for server to start....2026-01-08 04:06:07.172 GMT [44988] LOG: > invalid value for parameter "io_method": "io_uring" > 2026-01-08 04:06:07.172 GMT [44988] HINT: Available values: sync, worker= . > 2026-01-08 04:06:07.172 UTC [44988] FATAL: configuration file > "/home/surya/pgdata18/postgresql.conf" contains errors > 2026-01-08 04:06:07.172 UTC [44988] DEBUG: shmem_exit(1): 0 > before_shmem_exit callbacks to make > 2026-01-08 04:06:07.172 UTC [44988] DEBUG: shmem_exit(1): 0 on_shmem_exi= t > callbacks to make > 2026-01-08 04:06:07.172 UTC [44988] DEBUG: proc_exit(1): 0 callbacks to > make > 2026-01-08 04:06:07.172 UTC [44988] DEBUG: exit(1) > stopped waiting > pg_ctl: could not start server > Examine the log output. > > > From the above we can see that the stderr says that "*invalid value for > parameter "io_method": "io_uring"*" > > And in the logs I see similar thing like you reported > 2026-01-08 04:05:31.438 UTC [44972] DEBUG: starting background worker > process "logical replication launcher" > 2026-01-08 04:05:31.438 UTC [44981] DEBUG: autovacuum launcher started > 2026-01-08 04:05:31.438 UTC [44981] DEBUG: InitPostgres > 2026-01-08 04:05:31.438 UTC [44982] DEBUG: logical replication launcher > started > 2026-01-08 04:05:31.438 UTC [44982] DEBUG: InitPostgres > 2026-01-08 04:05:31.438 UTC [44981] DEBUG: io 6400 |op > invalid|target invalid|state HANDED_OUT : adding cb #1, id > 2/aio_shared_buffer_readv_cb > 2026-01-08 04:05:31.438 UTC [44981] DEBUG: io 6400 |op > invalid|target smgr|state HANDED_OUT : adding cb #2, id > 1/aio_md_readv_cb > 2026-01-08 04:05:31.438 UTC [44981] DEBUG: io 6400 |op readv|target > smgr|state DEFINED : calling cb #1 > 2/aio_shared_buffer_readv_cb->stage(0) > 2026-01-08 04:05:31.438 UTC [44981] DEBUG: io 6400 |op readv|target > smgr|state STAGED : staged (synchronous: 0, in_batch: 1) > 2026-01-08 04:05:31.439 UTC [44974] DEBUG: io 6400 |op readv|target > smgr|state COMPLETED_IO : after shared completion: distilled result: > (status OK, id 0, error_data: 0, result 1), raw_result: 8192 > 2026-01-08 04:05:31.439 UTC [44981] DEBUG: io 6400 |op readv|target > smgr|state COMPLETED_SHARED: after local completion: result: (status OK, = id > 0, error_data 0, result 1), raw_result: 8192 > > I am working on a patch and will fix the inconsistencies in documentation > about io_uring. > > Best, > Surya Poondla > > On Wed, Jan 7, 2026 at 7:54=E2=80=AFPM PG Bug reporting form < > noreply@postgresql.org> wrote: > >> The following bug has been logged on the website: >> >> Bug reference: 19369 >> Logged by: Evan Si >> Email address: evsi@amazon.com >> PostgreSQL version: 18.1 >> Operating system: Amazon Linux 2 >> Description: >> >> Hello, >> >> The documentation doesn't explicitly state a minimum kernel version for >> io_uring, but in src/backend/storage/aio/README.md, it claims that: >> >> > io_method=3Dio_uring is available on Linux 5.1+. >> >> Attempting to set io_method to io_uring on versions without io_uring at >> all >> (below 5.1) causes the server to graciously report that "[the k]ernel do= es >> not support io_uring". >> But setting io_uring on kernel versions between 5.1 and 5.6 sees the >> server >> start but connections failing with EINVAL. >> >> ``` >> [ec2-user@ip-172-31-56-49 postgres]$ psql postgres >> psql: error: connection to server on socket "/tmp/.s.PGSQL.5432" failed: >> FATAL: could not read blocks 0..0 in file "global/1260": Invalid argume= nt >> ``` >> >> It seems like the implementation in postgres leverages non-vectored I/O >> (i.e. io_uring_prep_read and io_uring_prep_write) in >> src/backend/storage/aio/method_io_uring.c. >> >> But, these opcodes aren't actually available until kernel 5.6 >> (https://github.com/axboe/liburing/issues/44), >> (https://man7.org/linux/man-pages/man2/io_uring_enter.2.html - under >> IORING_OP_READ, IORING_OP_WRITE). >> >> It seems kernel 5.4 LTS ended last month, but this seems worth >> clarifying, I >> think. >> >> -- >> >> Precise reproduction example: >> >> OS details >> ``` >> [ec2-user@ip-172-31-56-49 postgres]$ uname -a >> Linux ip-172-31-56-49.us-west-2.compute.internal >> 5.4.301-221.450.amzn2.x86_64 #1 SMP Tue Nov 18 16:40:04 UTC 2025 x86_64 >> x86_64 x86_64 GNU/Linux >> ``` >> >> Build postgres with liburing 2.8, set postgresql.conf with >> io_method=3Dio_uring, log_min_messages =3D debug3. >> >> Postgres starts without complaint, but trying to connect will fail: >> >> ``` >> [ec2-user@ip-172-31-56-49 postgres]$ psql postgres >> psql: error: connection to server on socket "/tmp/.s.PGSQL.5432" failed: >> FATAL: could not read blocks 0..0 in file "global/1260": Invalid argume= nt >> ``` >> Inside logfile: >> ``` >> 2026-01-02 22:35:43.862 UTC [8517] DEBUG: io 6400 |op invalid|targ= et >> invalid|state HANDED_OUT : adding cb #1, id >> 2/aio_shared_buffer_readv_cb >> 2026-01-02 22:35:43.862 UTC [8517] DEBUG: io 6400 |op invalid|targ= et >> smgr|state HANDED_OUT : adding cb #2, id 1/aio_md_readv_cb >> 2026-01-02 22:35:43.863 UTC [8517] DEBUG: io 6400 |op readv|target >> smgr|state DEFINED : calling cb #1 >> 2/aio_shared_buffer_readv_cb->stage(0) >> 2026-01-02 22:35:43.863 UTC [8517] DEBUG: io 6400 |op readv|target >> smgr|state STAGED : staged (synchronous: 0, in_batch: 1) >> 2026-01-02 22:35:43.863 UTC [8517] DEBUG: io 6400 |op readv|target >> smgr|state SUBMITTED : wait_one io_gen: 3, ref_gen: 3, cycle 0 >> 2026-01-02 22:35:43.863 UTC [8517] LOG: could not read blocks 0..0 in >> file >> "global/1262": Invalid argument >> 2026-01-02 22:35:43.863 UTC [8517] DEBUG: io 6400 |op readv|target >> smgr|state COMPLETED_IO : after shared completion: distilled result: >> (status ERROR, id 1, error_data: 22, result 0), raw_result: -22 >> 2026-01-02 22:35:43.863 UTC [8517] DEBUG: io 6400 |op readv|target >> smgr|state COMPLETED_SHARED: after local completion: result: (status >> ERROR, >> id 1, error_data 22, result 0), raw_result: -22 >> 2026-01-02 22:35:43.863 UTC [8517] DEBUG: drained 1/1, now expecting 0 >> 2026-01-02 22:35:43.863 UTC [8517] DEBUG: io 6400 |op invalid|targ= et >> invalid|state IDLE : wait_one io_gen: 4, ref_gen: 3, cycle 0 >> 2026-01-02 22:35:43.863 UTC [8517] DEBUG: wait_one with 0 sleeps >> 2026-01-02 22:35:43.863 UTC [8517] ERROR: could not read blocks 0..0 in >> file "global/1262": Invalid argument >> 2026-01-02 22:35:44.057 UTC [8512] DEBUG: assigned pm child slot 1 for >> backend >> 2026-01-02 22:35:44.058 UTC [8512] DEBUG: forked new client backend, >> pid=3D8521 socket=3D151 >> 2026-01-02 22:35:44.058 UTC [8521] DEBUG: InitPostgres >> 2026-01-02 22:35:44.059 UTC [8521] DEBUG: io 0 |op invalid|targ= et >> invalid|state HANDED_OUT : adding cb #1, id >> 2/aio_shared_buffer_readv_cb >> 2026-01-02 22:35:44.059 UTC [8521] DEBUG: io 0 |op invalid|targ= et >> smgr|state HANDED_OUT : adding cb #2, id 1/aio_md_readv_cb >> 2026-01-02 22:35:44.059 UTC [8521] DEBUG: io 0 |op readv|target >> smgr|state DEFINED : calling cb #1 >> 2/aio_shared_buffer_readv_cb->stage(0) >> 2026-01-02 22:35:44.059 UTC [8521] DEBUG: io 0 |op readv|target >> smgr|state STAGED : staged (synchronous: 0, in_batch: 1) >> 2026-01-02 22:35:44.059 UTC [8521] DEBUG: io 0 |op readv|target >> smgr|state SUBMITTED : wait_one io_gen: 1, ref_gen: 1, cycle 0 >> 2026-01-02 22:35:44.059 UTC [8521] LOG: could not read blocks 0..0 in >> file >> "global/1260": Invalid argument >> 2026-01-02 22:35:44.059 UTC [8521] DEBUG: io 0 |op readv|target >> smgr|state COMPLETED_IO : after shared completion: distilled result: >> (status ERROR, id 1, error_data: 22, result 0), raw_result: -22 >> 2026-01-02 22:35:44.059 UTC [8521] DEBUG: io 0 |op readv|target >> smgr|state COMPLETED_SHARED: after local completion: result: (status >> ERROR, >> id 1, error_data 22, result 0), raw_result: -22 >> 2026-01-02 22:35:44.059 UTC [8521] DEBUG: drained 1/1, now expecting 0 >> 2026-01-02 22:35:44.059 UTC [8521] DEBUG: io 0 |op invalid|targ= et >> invalid|state IDLE : wait_one io_gen: 2, ref_gen: 1, cycle 0 >> 2026-01-02 22:35:44.059 UTC [8521] DEBUG: wait_one with 0 sleeps >> 2026-01-02 22:35:44.059 UTC [8521] FATAL: could not read blocks 0..0 in >> file "global/1260": Invalid argument >> 2026-01-02 22:35:44.059 UTC [8521] DEBUG: shmem_exit(1): 5 >> before_shmem_exit callbacks to make >> 2026-01-02 22:35:44.059 UTC [8521] DEBUG: shmem_exit(1): 7 on_shmem_exi= t >> callbacks to make >> 2026-01-02 22:35:44.059 UTC [8521] DEBUG: proc_exit(1): 2 callbacks to >> make >> 2026-01-02 22:35:44.059 UTC [8521] DEBUG: exit(1) >> 2026-01-02 22:35:44.059 UTC [8521] DEBUG: shmem_exit(-1): 0 >> before_shmem_exit callbacks to make >> 2026-01-02 22:35:44.059 UTC [8521] DEBUG: shmem_exit(-1): 0 on_shmem_ex= it >> callbacks to make >> 2026-01-02 22:35:44.059 UTC [8521] DEBUG: proc_exit(-1): 0 callbacks to >> make >> 2026-01-02 22:35:44.060 UTC [8512] DEBUG: releasing pm child slot 1 >> 2026-01-02 22:35:44.060 UTC [8512] DEBUG: client backend (PID 8521) >> exited >> with exit code 1 >> 2026-01-02 22:35:44.863 UTC [8517] DEBUG: io 6400 |op invalid|targ= et >> invalid|state HANDED_OUT : adding cb #1, id >> 2/aio_shared_buffer_readv_cb >> 2026-01-02 22:35:44.863 UTC [8517] DEBUG: io 6400 |op invalid|targ= et >> smgr|state HANDED_OUT : adding cb #2, id 1/aio_md_readv_cb >> 2026-01-02 22:35:44.863 UTC [8517] DEBUG: io 6400 |op readv|target >> smgr|state DEFINED : calling cb #1 >> 2/aio_shared_buffer_readv_cb->stage(0) >> 2026-01-02 22:35:44.863 UTC [8517] DEBUG: io 6400 |op readv|target >> smgr|state STAGED : staged (synchronous: 0, in_batch: 1) >> 2026-01-02 22:35:44.863 UTC [8517] DEBUG: io 6400 |op readv|target >> smgr|state SUBMITTED : wait_one io_gen: 4, ref_gen: 4, cycle 0 >> 2026-01-02 22:35:44.863 UTC [8517] LOG: could not read blocks 0..0 in >> file >> "global/1262": Invalid argument >> 2026-01-02 22:35:44.863 UTC [8517] DEBUG: io 6400 |op readv|target >> smgr|state COMPLETED_IO : after shared completion: distilled result: >> (status ERROR, id 1, error_data: 22, result 0), raw_result: -22 >> 2026-01-02 22:35:44.863 UTC [8517] DEBUG: io 6400 |op readv|target >> smgr|state COMPLETED_SHARED: after local completion: result: (status >> ERROR, >> id 1, error_data 22, result 0), raw_result: -22 >> 2026-01-02 22:35:44.863 UTC [8517] DEBUG: drained 1/1, now expecting 0 >> 2026-01-02 22:35:44.863 UTC [8517] DEBUG: io 6400 |op invalid|targ= et >> invalid|state IDLE : wait_one io_gen: 5, ref_gen: 4, cycle 0 >> 2026-01-02 22:35:44.863 UTC [8517] DEBUG: wait_one with 0 sleeps >> 2026-01-02 22:35:44.863 UTC [8517] ERROR: could not read blocks 0..0 in >> file "global/1262": Invalid argument >> ``` >> >> --000000000000b6ea470647dad989 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Hi Evan,

In my previous email/findings, I didn'= t compile postgres with the=C2=A0liburing=C2=A0option.

I did it th= is time and see the same symptoms as you saw.

surya@surya:~/pgdata18= $ uname -r
5.4.0-216-generic
surya@surya:~/pgdata18$ uname -a
Linu= x surya 5.4.0-216-generic #236-Ubuntu SMP Fri Apr 11 19:55:34 UTC 2025 aarc= h64 aarch64 aarch64 GNU/Linux
surya@surya:~/pgdata18$
surya@surya:~/= pgdata18$ ~/pg18/bin/pg_ctl -D ~/pgdata18 restart
waiting for server to = shut down.... done
server stopped
waiting for server to start....2026= -01-08 06:20:36.301 UTC [17042] LOG: =C2=A0redirecting log output to loggin= g collector process
2026-01-08 06:20:36.301 UTC [17042] HINT: =C2=A0Futu= re log output will appear in directory "log".
=C2=A0done
se= rver started
surya@surya:~/pgdata18$ ls log/
postgresql-2026-01-08_06= 1910.log =C2=A0postgresql-2026-01-08_062036.log
postgresql-2026-01-08_06= 1955.log
surya@surya:~/pgdata18$ ~/pg18/bin/psql -d postgres
psql: er= ror: connection to server on socket "/tmp/.s.PGSQL.5432" failed: = FATAL: =C2=A0could not read blocks 0..0 in file "global/1260": In= valid argument

In the logs, I see
026-01-08 06:24:29.858 UTC [171= 26] DEBUG: =C2=A0InitPostgres
2026-01-08 06:24:29.858 UTC [17127] DEBUG:= =C2=A0logical replication launcher started
2026-01-08 06:24:29.858 UTC = [17127] DEBUG: =C2=A0InitPostgres
2026-01-08 06:24:29.858 UTC [17126] DE= BUG: =C2=A0io 6400 =C2=A0 =C2=A0 =C2=A0|op invalid|target invalid|state HAN= DED_OUT =C2=A0 =C2=A0 =C2=A0: adding cb #1, id 2/aio_shared_buffer_readv_cb=
2026-01-08 06:24:29.858 UTC [17126] DEBUG: =C2=A0io 6400 =C2=A0 =C2=A0 = =C2=A0|op invalid|target smgr|state HANDED_OUT =C2=A0 =C2=A0 =C2=A0: adding= cb #2, id 1/aio_md_readv_cb
2026-01-08 06:24:29.858 UTC [17126] DEBUG: = =C2=A0io 6400 =C2=A0 =C2=A0 =C2=A0|op readv|target smgr|state DEFINED =C2= =A0 =C2=A0 =C2=A0 =C2=A0 : calling cb #1 2/aio_shared_buffer_readv_cb->s= tage(0)
2026-01-08 06:24:29.859 UTC [17126] DEBUG: =C2=A0io 6400 =C2=A0 = =C2=A0 =C2=A0|op readv|target smgr|state STAGED =C2=A0 =C2=A0 =C2=A0 =C2=A0= =C2=A0: staged (synchronous: 0, in_batch: 1)
2026-01-08 06:24:29.859 UT= C [17126] DEBUG: =C2=A0io 6400 =C2=A0 =C2=A0 =C2=A0|op readv|target smgr|st= ate SUBMITTED =C2=A0 =C2=A0 =C2=A0 : wait_one io_gen: 1, ref_gen: 1, cycle = 0
2026-01-08 06:24:29.859 UTC [17126] LOG: =C2=A0could not read blocks 0= ..0 in file "global/1262": Invalid argument
2026-01-08 06:24:2= 9.859 UTC [17126] DEBUG: =C2=A0io 6400 =C2=A0 =C2=A0 =C2=A0|op readv|target= smgr|state COMPLETED_IO =C2=A0 =C2=A0: after shared completion: distilled = result: (status ERROR, id 1, error_data: 22, result 0), raw_result: -22
= 2026-01-08 06:24:29.859 UTC [17126] DEBUG: =C2=A0io 6400 =C2=A0 =C2=A0 =C2= =A0|op readv|target smgr|state COMPLETED_SHARED: after local completion: re= sult: (status ERROR, id 1, error_data 22, result 0), raw_result: -22
202= 6-01-08 06:24:29.859 UTC [17126] DEBUG: =C2=A0drained 1/1, now expecting 0<= br>2026-01-08 06:24:29.859 UTC [17126] DEBUG: =C2=A0io 6400 =C2=A0 =C2=A0 = =C2=A0|op invalid|target invalid|state IDLE =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0: wait_one io_gen: 2, ref_gen: 1, cycle 0
2026-01-08 06:24:29.= 859 UTC [17126] DEBUG: =C2=A0wait_one with 0 sleeps
2026-01-08 06:24:29.= 859 UTC [17126] ERROR: =C2=A0could not read blocks 0..0 in file "globa= l/1262": Invalid argument
2026-01-08 06:24:30.859 UTC [17126] DEBUG= : =C2=A0io 6400 =C2=A0 =C2=A0 =C2=A0|op invalid|target invalid|state HANDED= _OUT =C2=A0 =C2=A0 =C2=A0: adding cb #1, id 2/aio_shared_buffer_readv_cbhe = logs

I will do some more testing on this and update my findings.
-Surya Poondla

On Wed, Jan 7, 20= 26 at 8:15=E2=80=AFPM surya poondla <suryapoondla4@gmail.com> wrote:
Hi Evsi,

I created a new Ubuntu server and=C2=A0am able to = reproduce the same behavior you=C2=A0reported for Postgres 18.1 on aarch64 = architecture.

surya@surya:~/pgdata18/log$ uname -r
5.4.0-216-gene= ric
surya@surya:~/pgdata18/log$ uname -a
Linux surya 5.4.0-216-generi= c #236-Ubuntu SMP Fri Apr 11 19:55:34 UTC 2025 aarch64 aarch64 aarch64 GNU/= Linux

I did some testing and see the=C2=A0below
In the=C2=A0postg= resql.conf if I put=C2=A0
io_method =3D 'worker' or=C2=A0io_meth= od =3D 'sync', postgres is able to restart with no errors.
But i= f=C2=A0io_method =3D 'io_uring' then I see the below on my console<= br>
surya@surya:~/postgresql-18.1$ vim ~/pgdata18/postgresql.= conf
surya@surya:~/postgresql-18.1$ ~/pg18/bin/pg_ctl -D ~/pgdata18 re= start
waiting for server to shut down....2026-01-08 04:06:07.081 UTC [44= 973] DEBUG: =C2=A0logger shutting down
2026-01-08 04:06:07.081 UTC [4497= 3] DEBUG: =C2=A0shmem_exit(0): 0 before_shmem_exit callbacks to make
202= 6-01-08 04:06:07.081 UTC [44973] DEBUG: =C2=A0shmem_exit(0): 0 on_shmem_exi= t callbacks to make
2026-01-08 04:06:07.081 UTC [44973] DEBUG: =C2=A0pro= c_exit(0): 0 callbacks to make
2026-01-08 04:06:07.081 UTC [44973] DEBUG= : =C2=A0exit(0)
2026-01-08 04:06:07.081 UTC [44973] DEBUG: =C2=A0shmem_e= xit(-1): 0 before_shmem_exit callbacks to make
2026-01-08 04:06:07.081 U= TC [44973] DEBUG: =C2=A0shmem_exit(-1): 0 on_shmem_exit callbacks to make2026-01-08 04:06:07.081 UTC [44973] DEBUG: =C2=A0proc_exit(-1): 0 callbac= ks to make
=C2=A0done
server stopped
waiting for server to start..= ..2026-01-08 04:06:07.172 GMT [44988] LOG: =C2=A0invalid value for paramete= r "io_method": "io_uring"
2026-01-08 04:06:07.172 GM= T [44988] HINT: =C2=A0Available values: sync, worker.
2026-01-08 04:06:0= 7.172 UTC [44988] FATAL: =C2=A0configuration file "/home/surya/pgdata1= 8/postgresql.conf" contains errors
2026-01-08 04:06:07.172 UTC [449= 88] DEBUG: =C2=A0shmem_exit(1): 0 before_shmem_exit callbacks to make
20= 26-01-08 04:06:07.172 UTC [44988] DEBUG: =C2=A0shmem_exit(1): 0 on_shmem_ex= it callbacks to make
2026-01-08 04:06:07.172 UTC [44988] DEBUG: =C2=A0pr= oc_exit(1): 0 callbacks to make
2026-01-08 04:06:07.172 UTC [44988] DEBU= G: =C2=A0exit(1)
=C2=A0stopped waiting
pg_ctl: could not start server=
Examine the log output.


From the above we can see that the s= tderr says that "invalid value for parameter "io_method&quo= t;: "io_uring""

And in the logs I see similar= thing like you reported
2026-01-08 04:05:31.438 UTC [44972] DEBUG: =C2= =A0starting background worker process "logical replication launcher&qu= ot;
2026-01-08 04:05:31.438 UTC [44981] DEBUG: =C2=A0autovacuum launcher= started
2026-01-08 04:05:31.438 UTC [44981] DEBUG: =C2=A0InitPostgres2026-01-08 04:05:31.438 UTC [44982] DEBUG: =C2=A0logical replication laun= cher started
2026-01-08 04:05:31.438 UTC [44982] DEBUG: =C2=A0InitPostgr= es
2026-01-08 04:05:31.438 UTC [44981] DEBUG: =C2=A0io 6400 =C2=A0 =C2= =A0 =C2=A0|op invalid|target invalid|state HANDED_OUT =C2=A0 =C2=A0 =C2=A0:= adding cb #1, id 2/aio_shared_buffer_readv_cb
2026-01-08 04:05:31.438 U= TC [44981] DEBUG: =C2=A0io 6400 =C2=A0 =C2=A0 =C2=A0|op invalid|target smgr= |state HANDED_OUT =C2=A0 =C2=A0 =C2=A0: adding cb #2, id 1/aio_md_readv_cb<= br>2026-01-08 04:05:31.438 UTC [44981] DEBUG: =C2=A0io 6400 =C2=A0 =C2=A0 = =C2=A0|op readv|target smgr|state DEFINED =C2=A0 =C2=A0 =C2=A0 =C2=A0 : cal= ling cb #1 2/aio_shared_buffer_readv_cb->stage(0)
2026-01-08 04:05:31= .438 UTC [44981] DEBUG: =C2=A0io 6400 =C2=A0 =C2=A0 =C2=A0|op readv|target = smgr|state STAGED =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0: staged (synchronous: = 0, in_batch: 1)
2026-01-08 04:05:31.439 UTC [44974] DEBUG: =C2=A0io 6400= =C2=A0 =C2=A0 =C2=A0|op readv|target smgr|state COMPLETED_IO =C2=A0 =C2=A0= : after shared completion: distilled result: (status OK, id 0, error_data: = 0, result 1), raw_result: 8192
2026-01-08 04:05:31.439 UTC [44981] DEBUG= : =C2=A0io 6400 =C2=A0 =C2=A0 =C2=A0|op readv|target smgr|state COMPLETED_S= HARED: after local completion: result: (status OK, id 0, error_data 0, resu= lt 1), raw_result: 8192

I am working on a patch=C2=A0and will fix th= e inconsistencies in documentation about io_uring.

Best,
Surya Po= ondla

On Wed, Jan 7, 2026 at 7:54=E2=80=AFPM PG Bug reporting form <= ;noreply@postgr= esql.org> wrote:
The following bug has been logged on the website:

Bug reference:=C2=A0 =C2=A0 =C2=A0 19369
Logged by:=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 Evan Si
Email address:=C2=A0 =C2=A0 =C2=A0 evsi@amazon.com
PostgreSQL version: 18.1
Operating system:=C2=A0 =C2=A0Amazon Linux 2
Description:=C2=A0 =C2=A0 =C2=A0 =C2=A0

Hello,

The documentation doesn't explicitly state a minimum kernel version for=
io_uring, but in src/backend/storage/aio/README.md, it claims that:

> io_method=3Dio_uring is available on Linux 5.1+.

Attempting to set io_method to io_uring on versions without io_uring at all=
(below 5.1) causes the server to graciously report that "[the k]ernel = does
not support io_uring".
But setting io_uring on kernel versions between 5.1 and 5.6 sees the server=
start but connections failing with EINVAL.

```
[ec2-user@ip-172-31-56-49 postgres]$ psql postgres
psql: error: connection to server on socket "/tmp/.s.PGSQL.5432" = failed:
FATAL:=C2=A0 could not read blocks 0..0 in file "global/1260": In= valid argument
```

It seems like the implementation in postgres leverages non-vectored I/O
(i.e. io_uring_prep_read and io_uring_prep_write) in
src/backend/storage/aio/method_io_uring.c.

But, these opcodes aren't actually available until kernel 5.6
(https://github.com/axboe/liburing/issues/44),
(https://man7.org/linux/man-pages/man2/io= _uring_enter.2.html - under
IORING_OP_READ, IORING_OP_WRITE).

It seems kernel 5.4 LTS ended last month, but this seems worth clarifying, = I
think.

--

Precise reproduction example:

OS details
```
[ec2-user@ip-172-31-56-49 postgres]$ uname -a
Linux ip-172-31-56-49.us-west-2.compute.internal
5.4.301-221.450.amzn2.x86_64 #1 SMP Tue Nov 18 16:40:04 UTC 2025 x86_64
x86_64 x86_64 GNU/Linux
```

Build postgres with liburing 2.8, set postgresql.conf with
io_method=3Dio_uring, log_min_messages =3D debug3.

Postgres starts without complaint, but trying to connect will fail:

```
[ec2-user@ip-172-31-56-49 postgres]$ psql postgres
psql: error: connection to server on socket "/tmp/.s.PGSQL.5432" = failed:
FATAL:=C2=A0 could not read blocks 0..0 in file "global/1260": In= valid argument
```
Inside logfile:
```
2026-01-02 22:35:43.862 UTC [8517] DEBUG:=C2=A0 io 6400=C2=A0 =C2=A0 =C2=A0= |op invalid|target
invalid|state HANDED_OUT=C2=A0 =C2=A0 =C2=A0 : adding cb #1, id
2/aio_shared_buffer_readv_cb
2026-01-02 22:35:43.862 UTC [8517] DEBUG:=C2=A0 io 6400=C2=A0 =C2=A0 =C2=A0= |op invalid|target
smgr|state HANDED_OUT=C2=A0 =C2=A0 =C2=A0 : adding cb #2, id 1/aio_md_readv= _cb
2026-01-02 22:35:43.863 UTC [8517] DEBUG:=C2=A0 io 6400=C2=A0 =C2=A0 =C2=A0= |op readv|target
smgr|state DEFINED=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0: calling cb #1
2/aio_shared_buffer_readv_cb->stage(0)
2026-01-02 22:35:43.863 UTC [8517] DEBUG:=C2=A0 io 6400=C2=A0 =C2=A0 =C2=A0= |op readv|target
smgr|state STAGED=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 : staged (synchronous: = 0, in_batch: 1)
2026-01-02 22:35:43.863 UTC [8517] DEBUG:=C2=A0 io 6400=C2=A0 =C2=A0 =C2=A0= |op readv|target
smgr|state SUBMITTED=C2=A0 =C2=A0 =C2=A0 =C2=A0: wait_one io_gen: 3, ref_ge= n: 3, cycle 0
2026-01-02 22:35:43.863 UTC [8517] LOG:=C2=A0 could not read blocks 0..0 in= file
"global/1262": Invalid argument
2026-01-02 22:35:43.863 UTC [8517] DEBUG:=C2=A0 io 6400=C2=A0 =C2=A0 =C2=A0= |op readv|target
smgr|state COMPLETED_IO=C2=A0 =C2=A0 : after shared completion: distilled r= esult:
(status ERROR, id 1, error_data: 22, result 0), raw_result: -22
2026-01-02 22:35:43.863 UTC [8517] DEBUG:=C2=A0 io 6400=C2=A0 =C2=A0 =C2=A0= |op readv|target
smgr|state COMPLETED_SHARED: after local completion: result: (status ERROR,=
id 1, error_data 22, result 0), raw_result: -22
2026-01-02 22:35:43.863 UTC [8517] DEBUG:=C2=A0 drained 1/1, now expecting = 0
2026-01-02 22:35:43.863 UTC [8517] DEBUG:=C2=A0 io 6400=C2=A0 =C2=A0 =C2=A0= |op invalid|target
invalid|state IDLE=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 : wait_one io_g= en: 4, ref_gen: 3, cycle 0
2026-01-02 22:35:43.863 UTC [8517] DEBUG:=C2=A0 wait_one with 0 sleeps
2026-01-02 22:35:43.863 UTC [8517] ERROR:=C2=A0 could not read blocks 0..0 = in
file "global/1262": Invalid argument
2026-01-02 22:35:44.057 UTC [8512] DEBUG:=C2=A0 assigned pm child slot 1 fo= r
backend
2026-01-02 22:35:44.058 UTC [8512] DEBUG:=C2=A0 forked new client backend,<= br> pid=3D8521 socket=3D151
2026-01-02 22:35:44.058 UTC [8521] DEBUG:=C2=A0 InitPostgres
2026-01-02 22:35:44.059 UTC [8521] DEBUG:=C2=A0 io 0=C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0|op invalid|target
invalid|state HANDED_OUT=C2=A0 =C2=A0 =C2=A0 : adding cb #1, id
2/aio_shared_buffer_readv_cb
2026-01-02 22:35:44.059 UTC [8521] DEBUG:=C2=A0 io 0=C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0|op invalid|target
smgr|state HANDED_OUT=C2=A0 =C2=A0 =C2=A0 : adding cb #2, id 1/aio_md_readv= _cb
2026-01-02 22:35:44.059 UTC [8521] DEBUG:=C2=A0 io 0=C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0|op readv|target
smgr|state DEFINED=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0: calling cb #1
2/aio_shared_buffer_readv_cb->stage(0)
2026-01-02 22:35:44.059 UTC [8521] DEBUG:=C2=A0 io 0=C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0|op readv|target
smgr|state STAGED=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 : staged (synchronous: = 0, in_batch: 1)
2026-01-02 22:35:44.059 UTC [8521] DEBUG:=C2=A0 io 0=C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0|op readv|target
smgr|state SUBMITTED=C2=A0 =C2=A0 =C2=A0 =C2=A0: wait_one io_gen: 1, ref_ge= n: 1, cycle 0
2026-01-02 22:35:44.059 UTC [8521] LOG:=C2=A0 could not read blocks 0..0 in= file
"global/1260": Invalid argument
2026-01-02 22:35:44.059 UTC [8521] DEBUG:=C2=A0 io 0=C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0|op readv|target
smgr|state COMPLETED_IO=C2=A0 =C2=A0 : after shared completion: distilled r= esult:
(status ERROR, id 1, error_data: 22, result 0), raw_result: -22
2026-01-02 22:35:44.059 UTC [8521] DEBUG:=C2=A0 io 0=C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0|op readv|target
smgr|state COMPLETED_SHARED: after local completion: result: (status ERROR,=
id 1, error_data 22, result 0), raw_result: -22
2026-01-02 22:35:44.059 UTC [8521] DEBUG:=C2=A0 drained 1/1, now expecting = 0
2026-01-02 22:35:44.059 UTC [8521] DEBUG:=C2=A0 io 0=C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0|op invalid|target
invalid|state IDLE=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 : wait_one io_g= en: 2, ref_gen: 1, cycle 0
2026-01-02 22:35:44.059 UTC [8521] DEBUG:=C2=A0 wait_one with 0 sleeps
2026-01-02 22:35:44.059 UTC [8521] FATAL:=C2=A0 could not read blocks 0..0 = in
file "global/1260": Invalid argument
2026-01-02 22:35:44.059 UTC [8521] DEBUG:=C2=A0 shmem_exit(1): 5
before_shmem_exit callbacks to make
2026-01-02 22:35:44.059 UTC [8521] DEBUG:=C2=A0 shmem_exit(1): 7 on_shmem_e= xit
callbacks to make
2026-01-02 22:35:44.059 UTC [8521] DEBUG:=C2=A0 proc_exit(1): 2 callbacks t= o make
2026-01-02 22:35:44.059 UTC [8521] DEBUG:=C2=A0 exit(1)
2026-01-02 22:35:44.059 UTC [8521] DEBUG:=C2=A0 shmem_exit(-1): 0
before_shmem_exit callbacks to make
2026-01-02 22:35:44.059 UTC [8521] DEBUG:=C2=A0 shmem_exit(-1): 0 on_shmem_= exit
callbacks to make
2026-01-02 22:35:44.059 UTC [8521] DEBUG:=C2=A0 proc_exit(-1): 0 callbacks = to
make
2026-01-02 22:35:44.060 UTC [8512] DEBUG:=C2=A0 releasing pm child slot 1 2026-01-02 22:35:44.060 UTC [8512] DEBUG:=C2=A0 client backend (PID 8521) e= xited
with exit code 1
2026-01-02 22:35:44.863 UTC [8517] DEBUG:=C2=A0 io 6400=C2=A0 =C2=A0 =C2=A0= |op invalid|target
invalid|state HANDED_OUT=C2=A0 =C2=A0 =C2=A0 : adding cb #1, id
2/aio_shared_buffer_readv_cb
2026-01-02 22:35:44.863 UTC [8517] DEBUG:=C2=A0 io 6400=C2=A0 =C2=A0 =C2=A0= |op invalid|target
smgr|state HANDED_OUT=C2=A0 =C2=A0 =C2=A0 : adding cb #2, id 1/aio_md_readv= _cb
2026-01-02 22:35:44.863 UTC [8517] DEBUG:=C2=A0 io 6400=C2=A0 =C2=A0 =C2=A0= |op readv|target
smgr|state DEFINED=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0: calling cb #1
2/aio_shared_buffer_readv_cb->stage(0)
2026-01-02 22:35:44.863 UTC [8517] DEBUG:=C2=A0 io 6400=C2=A0 =C2=A0 =C2=A0= |op readv|target
smgr|state STAGED=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 : staged (synchronous: = 0, in_batch: 1)
2026-01-02 22:35:44.863 UTC [8517] DEBUG:=C2=A0 io 6400=C2=A0 =C2=A0 =C2=A0= |op readv|target
smgr|state SUBMITTED=C2=A0 =C2=A0 =C2=A0 =C2=A0: wait_one io_gen: 4, ref_ge= n: 4, cycle 0
2026-01-02 22:35:44.863 UTC [8517] LOG:=C2=A0 could not read blocks 0..0 in= file
"global/1262": Invalid argument
2026-01-02 22:35:44.863 UTC [8517] DEBUG:=C2=A0 io 6400=C2=A0 =C2=A0 =C2=A0= |op readv|target
smgr|state COMPLETED_IO=C2=A0 =C2=A0 : after shared completion: distilled r= esult:
(status ERROR, id 1, error_data: 22, result 0), raw_result: -22
2026-01-02 22:35:44.863 UTC [8517] DEBUG:=C2=A0 io 6400=C2=A0 =C2=A0 =C2=A0= |op readv|target
smgr|state COMPLETED_SHARED: after local completion: result: (status ERROR,=
id 1, error_data 22, result 0), raw_result: -22
2026-01-02 22:35:44.863 UTC [8517] DEBUG:=C2=A0 drained 1/1, now expecting = 0
2026-01-02 22:35:44.863 UTC [8517] DEBUG:=C2=A0 io 6400=C2=A0 =C2=A0 =C2=A0= |op invalid|target
invalid|state IDLE=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 : wait_one io_g= en: 5, ref_gen: 4, cycle 0
2026-01-02 22:35:44.863 UTC [8517] DEBUG:=C2=A0 wait_one with 0 sleeps
2026-01-02 22:35:44.863 UTC [8517] ERROR:=C2=A0 could not read blocks 0..0 = in
file "global/1262": Invalid argument
```

--000000000000b6ea470647dad989--