So, in this case, we appear to be attempting a write, but the `io_abd` field of
the `zio` is `NULL`.
```
> ffffff03e497c630::print zio_t io_abd
io_abd = 0
```
I think we're here in `vdev_disk_io_start`:
```
785 if (zio->io_type == ZIO_TYPE_READ) {
786 bp->b_un.b_addr =
787 abd_borrow_buf(zio->io_abd, zio->io_size);
788 } else {
789 bp->b_un.b_addr =
790 abd_borrow_buf_copy(zio->io_abd, zio->io_size);
791 }
```
The `zio` is still allocated, and we can see exactly where it was allocated now
(since we have kmem_flags set):
```
> ffffff03e497c630::whatis
ffffff03e497c630 is allocated from zio_cache:
ADDR BUFADDR TIMESTAMP THREAD
CACHE LASTLOG CONTENTS
ffffff03e4b99b58 ffffff03e497c630 ba631849d6 ffffff000fd48c40
ffffff03dd631848 ffffff03c9473c00 ffffff03d3524880
kmem_cache_alloc_debug+0x2e0
kmem_cache_alloc+0xd4
zio_create+0x8e
zio_write_phys+0xa1
l2arc_write_buffers+0x32b
l2arc_feed_thread+0x23c
thread_start+8
```
It looks like the `::zio_state` MDB command doesn't quite work, either:
```
> ::zio_state
mdb: unexpected value ZIO_STAGE_ENCRYPT (64) of enum type enum zio_stage
(member io_stage of type struct zio)
> ::zio_state -r
mdb: unexpected value ZIO_STAGE_ENCRYPT (64) of enum type enum zio_stage
(member io_stage of type struct zio)
```
In case it's helpful for anybody, I've copied the output of
`ffffff03e497c630::print zio_t` and put it in this file:
[zio-printed.txt](https://github.com/openzfs/openzfs/files/1729506/zio-printed.txt)
I'm not familiar enough with the ZIO pipeline to know why `io_abd` would be
`NULL`, though, without spending some time reading the code.
--
You are receiving this because you are subscribed to this thread.
Reply to this email directly or view it on GitHub:
https://github.com/openzfs/openzfs/pull/489#issuecomment-366072204
------------------------------------------
openzfs-developer
Archives:
https://openzfs.topicbox.com/groups/developer/discussions/T91797982fdd5b7d9-M32c3bbb0bd557f8a43d97de0
Powered by Topicbox: https://topicbox.com