Skip to content

Commit

Permalink
Workaround issue of Linux vdev_disk.c, (#16678)
Browse files Browse the repository at this point in the history
in some cases not linearizing buffers with disk sector crossing a
page boundary. It is fine for hardware, but somehow required by LUKS.
It is not typical for ZFS to produce such buffers, but it may happen
if 6KB block is compressed to 4KB, while still having 2KB alignment.
Banning the 6KB buffers helps vdevs with ashifh=12.

Signed-off-by:	Alexander Motin <[email protected]>
Sponsored by:	iXsystems, Inc.

Reviewed-by: Tony Hutter <[email protected]>
Reviewed-by: Tino Reichardt <[email protected]>
  • Loading branch information
amotin authored Oct 23, 2024
1 parent 152ae5c commit aefc2da
Showing 1 changed file with 14 additions and 0 deletions.
14 changes: 14 additions & 0 deletions module/zfs/zio.c
Original file line number Diff line number Diff line change
Expand Up @@ -187,6 +187,20 @@ zio_init(void)
continue;
#endif

#if defined(__linux__) && defined(_KERNEL)
/*
* Workaround issue of Linux vdev_disk.c, in some cases not
* linearizing buffers with disk sector crossing a page
* boundary. It is fine for hardware, but somehow required by
* LUKS. It is not typical for ZFS to produce such buffers, but
* it may happen if 6KB block is compressed to 4KB, while still
* having 2KB alignment. Banning the 6KB buffers helps vdevs
* with ashifh=12.
*/
if (size > PAGESIZE && !IS_P2ALIGNED(size, PAGESIZE))
continue;
#endif

if (IS_P2ALIGNED(size, PAGESIZE))
align = PAGESIZE;
else
Expand Down

0 comments on commit aefc2da

Please sign in to comment.