I am no ZFS expert but maybe? If your write request is sync then it will write to ZIL as fast as possible and respond with acknowledgement when completed and allows subsequent writes. At the same time, ZFS will write what is buffered in memory to your pool as fast as it can. But what is in your ZIL is a log of the write transactions to your pool. So I assume if your pool is way slow to keep up or your memory fills up, it will cause the whole process to wait. Someone please correct me if this is wrong.