On Sat, Jul 06, 2019 at 10:06:14PM -0500, joshua stein wrote:
> When booting on a 4k NVMe disk, the kernel will always print:
> 
>      hib block_io biowait error 22 blk 4229561 size 512
> 
> This is from hibernate_resume() trying to read the signature of a 
> previous hibernation.  ZZZ also fails in the io path.
> 
> A bunch of things in subr_hibernate.c have DEV_BSIZE (512) 
> hard-coded, which goes through hibernate_block_io(), and then 
> bounds_check_with_label() in subr_disk.c which returns EINVAL 
> because the block number is not divisible by 8 and the block count 
> (512) is not divisible by d_secsize (4096).
> 

Getting this to work on a 4k sector disk is going to be difficult as there
are assumptions in the hibernate code for the amount of space reserved for
block I/O. For example, IIRC wd(4) has a single 4K page for everything,
including device soft state used during the side-effect-free I/O routine.

To make matters worse, softraid shares that page, so you get even less space.

There will likely be a ton of surgery required, unless you can write only
512 bytes of a 4k block on those disks, at 512 byte offsets inside the
block (without damaging the rest of the block).

I don't have any of this hardware, so I probably won't be of much help here
aside from advice.

-ml

Reply via email to