I debugged the crash that I got a bit further, in case it's helpful: When we died we're trying to encrypt a dnode, and `zio_crypt_init_uios_dnode` is setting `total_len = 0` (as well as `*no_crypt = B_TRUE`). In `zio_do_crypt_data` we carry on to call `zio_do_crypt_uio` after this returns, with `datalen = 0` (that's the `enc_len` that `init_uios_dnode` set to `0`), which then calls `crypto_encrypt` with the `plaindata.cd_length = 0`. This causes the AES module inside KCF to return `0xC` (`CRYPTO_DATA_LEN_RANGE`) because the length we gave it doesn't seem valid. So, we return `EIO` (the 5 you can see in the panic message).
I'm not really sure what we should be doing here... the fact that we've set `no_crypt = B_TRUE` will mean that `zio_encrypt` is going to do the copy anyway, so I don't think we have to call in to try to encrypt in this case at all? For now, to keep testing, I just made `zio_do_crypt_data` ignore the return of `zio_do_crypt_uio` if `no_crypt` is set and that seems to hack around it. -- 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/124#issuecomment-321176320 ------------------------------------------ openzfs-developer Archives: https://openzfs.topicbox.com/groups/developer/discussions/T1625245905c55186-M359ff8053e3a282efb573401 Powered by Topicbox: https://topicbox.com
