Go to file
Rob Norris f237b8e2a4 vdev_disk: try harder to ensure IO alignment rules
It seems out our notion of "properly" aligned IO was incomplete. In
particular, dm-crypt does its own splitting, and assumes that a logical
block will never cross an order-0 page boundary (ie, the physical page
size, not compound size). This effectively means that it needs to be
possible to split a BIO at any page or block size boundary and have it
work correctly.

This updates the alignment check function to enforce these rules (to the
extent possible).

Our response to misaligned data is to make some new allocation that is
properly aligned, and copy the data into it. It turns out that
linearising (via abd_borrow_buf()) is not enough, because we allocate eg
4K blocks from a general purpose slab, and so may receive (or already
have) a 4K block that crosses pages.

So instead, we allocate a new ABD, which is guaranteed to be aligned
properly to block sizes, and then copy everything into it, and back out
on the way back.

Sponsored-by: Klara, Inc.
Sponsored-by: Wasabi Technology, Inc.
Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Reviewed-by: Alexander Motin <mav@FreeBSD.org>
Reviewed-by: Tony Hutter <hutter2@llnl.gov>
Signed-off-by: Rob Norris <rob.norris@klarasystems.com>
Closes #16687 #16631 #15646 #15533 #14533
(cherry picked from commit 63bafe60ec741c269d29e26b192a8a5c4f6acf92)
2024-11-06 10:06:30 -08:00
.github ZTS: Add Fedora 41, remove Fedora 39 2024-11-05 11:09:22 -08:00
cmd zdb: show bp in uberblock dump 2024-11-05 15:43:53 -08:00
config Fallback to strerror() when strerror_l() isn't available 2024-11-05 15:43:53 -08:00
contrib Fix inconsistent mount options for ZFS root 2024-11-05 15:43:53 -08:00
etc etc/init.d: decide which variant to use at build time. 2024-04-22 09:28:06 -07:00
include Fix gcc unused value warning in FreeBSD simd.h 2024-11-06 10:06:29 -08:00
lib libzfs: use zfs_strerror() in place of strerror() 2024-11-05 15:43:53 -08:00
man man: update recordsize max size info 2024-11-05 15:43:52 -08:00
module vdev_disk: try harder to ensure IO alignment rules 2024-11-06 10:06:30 -08:00
rpm contrib: link zpool to zfs in bash-completion (#16376) 2024-08-26 15:10:16 -07:00
scripts ZTS: Use QEMU for tests on Linux and FreeBSD 2024-11-04 11:06:02 -08:00
tests Fix generation of kernel uevents for snapshot rename on linux 2024-11-05 15:43:53 -08:00
udev Avoid computing strlen() inside loops 2024-11-05 15:43:52 -08:00
.cirrus.yml CI: add FreeBSD build with Cirrus CI 2023-10-07 09:08:20 -07:00
.editorconfig Add an .editorconfig; document git whitespace settings 2020-01-27 13:32:52 -08:00
.gitignore Packaging: Auto-generate changelog during configure (#15528) 2023-11-16 14:23:03 -08:00
.gitmodules .gitmodules: link to openzfs github repository 2021-04-12 09:37:23 -07:00
.mailmap AUTHORS: refresh with recent new contributors (#16362) 2024-07-23 11:58:49 -07:00
AUTHORS AUTHORS: refresh with recent new contributors (#16362) 2024-07-23 11:58:49 -07:00
autogen.sh Ubuntu 22.04 integration: ShellCheck 2022-11-18 11:24:48 -08:00
CODE_OF_CONDUCT.md Documentation corrections 2022-12-22 11:34:28 -08:00
configure.ac Packaging: Auto-generate changelog during configure (#15528) 2023-11-16 14:23:03 -08:00
copy-builtin copy-builtin: add hooks with sed/>> 2022-05-10 10:17:43 -07:00
COPYRIGHT Fix typos 2020-06-09 21:24:09 -07:00
LICENSE Update build system and packaging 2018-05-29 16:00:33 -07:00
Makefile.am Process script directory for all configs 2022-10-27 16:45:14 -07:00
META Linux 6.11 compat: META 2024-11-04 10:34:48 -08:00
NEWS Fix NEWS file 2020-08-26 21:44:41 -07:00
NOTICE Update build system and packaging 2018-05-29 16:00:33 -07:00
README.md FreeBSD: Fix the build on FreeBSD 12 2023-11-28 15:19:07 -08:00
RELEASES.md Add RELEASES.md file 2021-04-02 16:33:40 -07:00
TEST Remove CI builder customization from TEST 2020-03-16 10:46:03 -07:00
zfs.release.in Move zfs.release generation to configure step 2012-07-12 12:22:51 -07:00

img

OpenZFS is an advanced file system and volume manager which was originally developed for Solaris and is now maintained by the OpenZFS community. This repository contains the code for running OpenZFS on Linux and FreeBSD.

codecov coverity

Official Resources

Installation

Full documentation for installing OpenZFS on your favorite operating system can be found at the Getting Started Page.

Contribute & Develop

We have a separate document with contribution guidelines.

We have a Code of Conduct.

Release

OpenZFS is released under a CDDL license. For more details see the NOTICE, LICENSE and COPYRIGHT files; UCRL-CODE-235197

Supported Kernels

  • The META file contains the officially recognized supported Linux kernel versions.
  • Supported FreeBSD versions are any supported branches and releases starting from 12.4-RELEASE.