mirror of
https://git.proxmox.com/git/mirror_zfs.git
synced 2025-08-06 15:07:39 +03:00
Compare commits
275 Commits
Author | SHA1 | Date | |
---|---|---|---|
![]() |
92f430b00f | ||
![]() |
2f8fc4a869 | ||
![]() |
a39a14eb6e | ||
![]() |
36864e3d77 | ||
![]() |
fea534d1d0 | ||
![]() |
cc43549b08 | ||
![]() |
04b02f0663 | ||
![]() |
20f00819f3 | ||
![]() |
81de1eae4c | ||
![]() |
5952fc15b9 | ||
![]() |
a486cac359 | ||
![]() |
fbac52e1e9 | ||
![]() |
8539bdf568 | ||
![]() |
c312a988b5 | ||
![]() |
bd5465e4eb | ||
![]() |
5fb1d520fe | ||
![]() |
6f2080f1ab | ||
![]() |
9f0be8fca0 | ||
![]() |
12657df52a | ||
![]() |
153c982aac | ||
![]() |
398bdcd884 | ||
![]() |
a9c37b7c38 | ||
![]() |
1c6d2f71aa | ||
![]() |
ab455c7b80 | ||
![]() |
76bd2ae5c8 | ||
![]() |
e6f8c1f612 | ||
![]() |
4f2118edaf | ||
![]() |
8f6f85472f | ||
![]() |
c22f5c1c55 | ||
![]() |
01095b288f | ||
![]() |
eff0634c1c | ||
![]() |
2c41e2a109 | ||
![]() |
81bcab3525 | ||
![]() |
1422bcaaf8 | ||
![]() |
97c2569371 | ||
![]() |
2bbc8e10ae | ||
![]() |
74fadc0cc9 | ||
![]() |
08b0a161cc | ||
![]() |
559d34e8c2 | ||
![]() |
a848b05b13 | ||
![]() |
7cc60afb0b | ||
![]() |
b0f2bcd063 | ||
![]() |
a6a2f37acd | ||
![]() |
9e009acbdc | ||
![]() |
be73f72453 | ||
![]() |
76d0c74c35 | ||
![]() |
c30a228608 | ||
![]() |
846796c424 | ||
![]() |
e4a2ab7c90 | ||
![]() |
38468bbad6 | ||
![]() |
61d88b0243 | ||
![]() |
6b2c046d18 | ||
![]() |
9070f890e1 | ||
![]() |
091da72c66 | ||
![]() |
8cacac7ed4 | ||
![]() |
865ca576ab | ||
![]() |
9530eb64e0 | ||
![]() |
059ab2ddc2 | ||
![]() |
4541c95a9b | ||
![]() |
3062b3866c | ||
![]() |
52f3f92bbf | ||
![]() |
91656b4e2a | ||
![]() |
53cbf06d68 | ||
![]() |
6503f8c6f0 | ||
![]() |
ad07b09cc3 | ||
![]() |
49da67eb39 | ||
![]() |
112dca3483 | ||
![]() |
a2c5295d70 | ||
![]() |
f145371660 | ||
![]() |
8100e476ea | ||
![]() |
95bd9d4ebc | ||
![]() |
6f8ff94016 | ||
![]() |
a1786ca93c | ||
![]() |
c2a1ea3a33 | ||
![]() |
c48d819d8d | ||
![]() |
fcd0a2fb89 | ||
![]() |
bb05632632 | ||
![]() |
a901229fe6 | ||
![]() |
5f7037067e | ||
![]() |
f3e4043a36 | ||
![]() |
91bc62642e | ||
![]() |
acfd6511cf | ||
![]() |
f741c841dd | ||
![]() |
637f918211 | ||
![]() |
7e72312eff | ||
![]() |
383256c329 | ||
![]() |
c2668b2d10 | ||
![]() |
b4ce059a76 | ||
![]() |
92d1686a2a | ||
![]() |
7ea899be04 | ||
![]() |
e085d66f7a | ||
![]() |
af062c480c | ||
![]() |
f2ab5b82da | ||
![]() |
1bdce0410c | ||
![]() |
55b21552d3 | ||
![]() |
c4fa9c2962 | ||
![]() |
8487b6c9b4 | ||
![]() |
0be3b266ed | ||
![]() |
001ab5941d | ||
![]() |
7784947923 | ||
![]() |
a0f8d3c584 | ||
![]() |
2adca179b6 | ||
![]() |
a77b6398ed | ||
![]() |
d1b0c4ec5a | ||
![]() |
3266d4d655 | ||
![]() |
51bec16060 | ||
![]() |
3b5c3f52d2 | ||
![]() |
67f0469f70 | ||
![]() |
1aa4351c1f | ||
![]() |
0e21e473a7 | ||
![]() |
6e9911212e | ||
![]() |
42bad93414 | ||
![]() |
a28f5a94f4 | ||
![]() |
0dfcfe023e | ||
![]() |
cf55fdea24 | ||
![]() |
6edbbe0646 | ||
![]() |
198621f910 | ||
![]() |
e6c98d11ec | ||
![]() |
083d322fa0 | ||
![]() |
c36faf668b | ||
![]() |
404254bacb | ||
![]() |
8eba6a5ba1 | ||
![]() |
fabdd502f4 | ||
![]() |
675b49d2a1 | ||
![]() |
54eec0fa59 | ||
![]() |
bc06d8164b | ||
![]() |
76745cf5b8 | ||
![]() |
0c88ae6187 | ||
![]() |
307fd0da1f | ||
![]() |
9f1c5e0b10 | ||
![]() |
5ba50c8135 | ||
![]() |
25565403aa | ||
![]() |
47b7dc976b | ||
![]() |
125731436d | ||
![]() |
4425a7bb85 | ||
![]() |
e47b033eae | ||
![]() |
cfec8f13a2 | ||
![]() |
997db7a7fc | ||
![]() |
e411081aa0 | ||
![]() |
a55b6fe94a | ||
![]() |
939e9f0b6a | ||
![]() |
679b164cd3 | ||
![]() |
c2d9494f99 | ||
![]() |
b952e061df | ||
![]() |
0fea7fc109 | ||
![]() |
0f6d955a35 | ||
![]() |
c3d2412b05 | ||
![]() |
74064cb175 | ||
![]() |
30b97ce218 | ||
![]() |
9519e7ebcc | ||
![]() |
f9b02fe7e3 | ||
![]() |
cb8da70329 | ||
![]() |
c944c46a98 | ||
![]() |
166a7bc602 | ||
![]() |
e90124a7c8 | ||
![]() |
18b3bea861 | ||
![]() |
d67eb17e27 | ||
![]() |
1862c1c0a8 | ||
![]() |
b57f53036d | ||
![]() |
4b8bf3c48a | ||
![]() |
696943533c | ||
![]() |
2284a61129 | ||
![]() |
e1833a72f9 | ||
![]() |
5bb034f533 | ||
![]() |
1e08e49a28 | ||
![]() |
6604fe9a06 | ||
![]() |
7cbe7bbbd4 | ||
![]() |
2dcc8fe035 | ||
![]() |
38875918d8 | ||
![]() |
0d51852ec7 | ||
![]() |
73a73cba71 | ||
![]() |
87947f2440 | ||
![]() |
0e87150b6c | ||
![]() |
7742e29387 | ||
![]() |
f54052a122 | ||
![]() |
d874f27776 | ||
![]() |
84d7d53e91 | ||
![]() |
d90042dedb | ||
![]() |
0e46085ee6 | ||
![]() |
3b0c1131ef | ||
![]() |
5988de77b0 | ||
![]() |
00debc1361 | ||
![]() |
af10714e42 | ||
![]() |
747781a345 | ||
![]() |
b17ea73f9d | ||
![]() |
17cdb7a2b1 | ||
![]() |
b673bcba4d | ||
![]() |
d8886275df | ||
![]() |
1aee375947 | ||
![]() |
a1907b038a | ||
![]() |
d359f7f547 | ||
![]() |
90603601b4 | ||
![]() |
ecd0b1528e | ||
![]() |
3ed1d608a8 | ||
![]() |
c165daa0b1 | ||
![]() |
1a5414ba2f | ||
![]() |
409aad3f33 | ||
![]() |
1917c26944 | ||
![]() |
2b64d41be8 | ||
![]() |
9753feaa63 | ||
![]() |
3c0b8da206 | ||
![]() |
d7abeef621 | ||
![]() |
7fb7eb9a63 | ||
![]() |
3f9af023f6 | ||
![]() |
f7675ae30f | ||
![]() |
920603990a | ||
![]() |
9a4b2f08d3 | ||
![]() |
8023d9d4b5 | ||
![]() |
23f063d2e6 | ||
![]() |
18474efeec | ||
![]() |
260065099e | ||
![]() |
4c9f2cec46 | ||
![]() |
ee3677d321 | ||
![]() |
0274a9a57d | ||
![]() |
025f8b2e74 | ||
![]() |
37e8f3ae17 | ||
![]() |
7313c6e382 | ||
![]() |
1c6b0302ef | ||
![]() |
7e3af4658b | ||
![]() |
1a54b13aaf | ||
![]() |
9061a4da0b | ||
![]() |
e12d76176d | ||
![]() |
8131793d6f | ||
![]() |
c82eb27b22 | ||
![]() |
661bb434e6 | ||
![]() |
ae48c2f6a9 | ||
![]() |
b96845b632 | ||
![]() |
55cbd1f9bd | ||
![]() |
880b73956b | ||
![]() |
d367ef2995 | ||
![]() |
7546fbd6e9 | ||
![]() |
903d3f9187 | ||
![]() |
86b5853cfb | ||
![]() |
19a8dd48e1 | ||
![]() |
8ac70aade7 | ||
![]() |
bbc0d34bfd | ||
![]() |
f3823a9ab2 | ||
![]() |
fd2cae969f | ||
![]() |
f7b4bca66a | ||
![]() |
7e3ce4efaa | ||
![]() |
77d81974b6 | ||
![]() |
5237760b17 | ||
![]() |
ede715d1e4 | ||
![]() |
e30c69365d | ||
![]() |
78d39d91fa | ||
![]() |
2b359c7824 | ||
![]() |
ace2e17a9b | ||
![]() |
b4cd10ce5b | ||
![]() |
f52d7aaaac | ||
![]() |
d5db840260 | ||
![]() |
bcd61d9579 | ||
![]() |
36a67b50a2 | ||
![]() |
3d9129a7b6 | ||
![]() |
0409c47fe0 | ||
![]() |
b5a3825244 | ||
![]() |
77df762a1b | ||
![]() |
56871e465a | ||
![]() |
c645b07eaa | ||
![]() |
5bc27acf51 | ||
![]() |
7f830d783b | ||
![]() |
58162960a1 | ||
![]() |
666903610d | ||
![]() |
26ecd8b993 | ||
![]() |
774dcba86d | ||
![]() |
09f6b2ebe3 | ||
![]() |
2609d93b65 | ||
![]() |
10f46d2aba | ||
![]() |
0df10dc911 | ||
![]() |
0fbe9d352c | ||
![]() |
84f44ec07f | ||
![]() |
fc9608e2e6 | ||
![]() |
d32c05949a | ||
![]() |
1ebb6b866f | ||
![]() |
f019b445f3 | ||
![]() |
03822a61be |
1
.github/PULL_REQUEST_TEMPLATE.md
vendored
1
.github/PULL_REQUEST_TEMPLATE.md
vendored
@ -27,7 +27,6 @@ https://openzfs.github.io/openzfs-docs/Developer%20Resources/Buildbot%20Options.
|
|||||||
- [ ] New feature (non-breaking change which adds functionality)
|
- [ ] New feature (non-breaking change which adds functionality)
|
||||||
- [ ] Performance enhancement (non-breaking change which improves efficiency)
|
- [ ] Performance enhancement (non-breaking change which improves efficiency)
|
||||||
- [ ] Code cleanup (non-breaking change which makes code smaller or more readable)
|
- [ ] Code cleanup (non-breaking change which makes code smaller or more readable)
|
||||||
- [ ] Quality assurance (non-breaking change which makes the code more robust against bugs)
|
|
||||||
- [ ] Breaking change (fix or feature that would cause existing functionality to change)
|
- [ ] Breaking change (fix or feature that would cause existing functionality to change)
|
||||||
- [ ] Library ABI change (libzfs, libzfs\_core, libnvpair, libuutil and libzfsbootenv)
|
- [ ] Library ABI change (libzfs, libzfs\_core, libnvpair, libuutil and libzfsbootenv)
|
||||||
- [ ] Documentation (a change to man pages or other documentation)
|
- [ ] Documentation (a change to man pages or other documentation)
|
||||||
|
49
.github/workflows/labels.yml
vendored
49
.github/workflows/labels.yml
vendored
@ -1,49 +0,0 @@
|
|||||||
name: labels
|
|
||||||
|
|
||||||
on:
|
|
||||||
pull_request_target:
|
|
||||||
types: [ opened, synchronize, reopened, converted_to_draft, ready_for_review ]
|
|
||||||
|
|
||||||
permissions:
|
|
||||||
pull-requests: write
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
open:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
if: ${{ github.event.action == 'opened' && github.event.pull_request.draft }}
|
|
||||||
steps:
|
|
||||||
- env:
|
|
||||||
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
||||||
ISSUE: ${{ github.event.pull_request.html_url }}
|
|
||||||
run: |
|
|
||||||
gh pr edit $ISSUE --add-label "Status: Work in Progress"
|
|
||||||
|
|
||||||
push:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
if: ${{ github.event.action == 'synchronize' || github.event.action == 'reopened' }}
|
|
||||||
steps:
|
|
||||||
- env:
|
|
||||||
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
||||||
ISSUE: ${{ github.event.pull_request.html_url }}
|
|
||||||
run: |
|
|
||||||
gh pr edit $ISSUE --remove-label "Status: Accepted,Status: Inactive,Status: Revision Needed,Status: Stale"
|
|
||||||
|
|
||||||
draft:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
if: ${{ github.event.action == 'converted_to_draft' }}
|
|
||||||
steps:
|
|
||||||
- env:
|
|
||||||
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
||||||
ISSUE: ${{ github.event.pull_request.html_url }}
|
|
||||||
run: |
|
|
||||||
gh pr edit $ISSUE --remove-label "Status: Accepted,Status: Code Review Needed,Status: Inactive,Status: Revision Needed,Status: Stale" --add-label "Status: Work in Progress"
|
|
||||||
|
|
||||||
rfr:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
if: ${{ github.event.action == 'ready_for_review' }}
|
|
||||||
steps:
|
|
||||||
- env:
|
|
||||||
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
||||||
ISSUE: ${{ github.event.pull_request.html_url }}
|
|
||||||
run: |
|
|
||||||
gh pr edit $ISSUE --remove-label "Status: Accepted,Status: Inactive,Status: Revision Needed,Status: Stale,Status: Work in Progress" --add-label "Status: Code Review Needed"
|
|
@ -29,7 +29,6 @@ FULL_RUN_IGNORE_REGEX = list(map(re.compile, [
|
|||||||
Patterns of files that are considered to trigger full CI.
|
Patterns of files that are considered to trigger full CI.
|
||||||
"""
|
"""
|
||||||
FULL_RUN_REGEX = list(map(re.compile, [
|
FULL_RUN_REGEX = list(map(re.compile, [
|
||||||
r'\.github/workflows/scripts/.*',
|
|
||||||
r'cmd.*',
|
r'cmd.*',
|
||||||
r'configs/.*',
|
r'configs/.*',
|
||||||
r'META',
|
r'META',
|
||||||
|
44
.github/workflows/scripts/qemu-1-setup.sh
vendored
44
.github/workflows/scripts/qemu-1-setup.sh
vendored
@ -10,12 +10,36 @@ set -eu
|
|||||||
export DEBIAN_FRONTEND="noninteractive"
|
export DEBIAN_FRONTEND="noninteractive"
|
||||||
sudo apt-get -y update
|
sudo apt-get -y update
|
||||||
sudo apt-get install -y axel cloud-image-utils daemonize guestfs-tools \
|
sudo apt-get install -y axel cloud-image-utils daemonize guestfs-tools \
|
||||||
virt-manager linux-modules-extra-$(uname -r) zfsutils-linux
|
ksmtuned virt-manager linux-modules-extra-$(uname -r) zfsutils-linux
|
||||||
|
|
||||||
# generate ssh keys
|
# generate ssh keys
|
||||||
rm -f ~/.ssh/id_ed25519
|
rm -f ~/.ssh/id_ed25519
|
||||||
ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519 -q -N ""
|
ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519 -q -N ""
|
||||||
|
|
||||||
|
# we expect RAM shortage
|
||||||
|
cat << EOF | sudo tee /etc/ksmtuned.conf > /dev/null
|
||||||
|
# /etc/ksmtuned.conf - Configuration file for ksmtuned
|
||||||
|
# https://docs.redhat.com/en/documentation/red_hat_enterprise_linux/7/html/virtualization_tuning_and_optimization_guide/chap-ksm
|
||||||
|
KSM_MONITOR_INTERVAL=60
|
||||||
|
|
||||||
|
# Millisecond sleep between ksm scans for 16Gb server.
|
||||||
|
# Smaller servers sleep more, bigger sleep less.
|
||||||
|
KSM_SLEEP_MSEC=30
|
||||||
|
|
||||||
|
KSM_NPAGES_BOOST=0
|
||||||
|
KSM_NPAGES_DECAY=0
|
||||||
|
KSM_NPAGES_MIN=1000
|
||||||
|
KSM_NPAGES_MAX=25000
|
||||||
|
|
||||||
|
KSM_THRES_COEF=80
|
||||||
|
KSM_THRES_CONST=8192
|
||||||
|
|
||||||
|
LOGFILE=/var/log/ksmtuned.log
|
||||||
|
DEBUG=1
|
||||||
|
EOF
|
||||||
|
sudo systemctl restart ksm
|
||||||
|
sudo systemctl restart ksmtuned
|
||||||
|
|
||||||
# not needed
|
# not needed
|
||||||
sudo systemctl stop docker.socket
|
sudo systemctl stop docker.socket
|
||||||
sudo systemctl stop multipathd.socket
|
sudo systemctl stop multipathd.socket
|
||||||
@ -41,14 +65,16 @@ $DISK
|
|||||||
sync
|
sync
|
||||||
sleep 1
|
sleep 1
|
||||||
|
|
||||||
# swap with same size as RAM (16GiB)
|
# swap with same size as RAM
|
||||||
sudo mkswap $DISK-part1
|
sudo mkswap $DISK-part1
|
||||||
sudo swapon $DISK-part1
|
sudo swapon $DISK-part1
|
||||||
|
|
||||||
# JBOD 2xdisk for OpenZFS storage (test vm's)
|
# 60GB data disk
|
||||||
SSD1="$DISK-part2"
|
SSD1="$DISK-part2"
|
||||||
sudo fallocate -l 12G /test.ssd2
|
|
||||||
SSD2=$(sudo losetup -b 4096 -f /test.ssd2 --show)
|
# 10GB data disk on ext4
|
||||||
|
sudo fallocate -l 10G /test.ssd1
|
||||||
|
SSD2=$(sudo losetup -b 4096 -f /test.ssd1 --show)
|
||||||
|
|
||||||
# adjust zfs module parameter and create pool
|
# adjust zfs module parameter and create pool
|
||||||
exec 1>/dev/null
|
exec 1>/dev/null
|
||||||
@ -57,11 +83,11 @@ ARC_MAX=$((1024*1024*512))
|
|||||||
echo $ARC_MIN | sudo tee /sys/module/zfs/parameters/zfs_arc_min
|
echo $ARC_MIN | sudo tee /sys/module/zfs/parameters/zfs_arc_min
|
||||||
echo $ARC_MAX | sudo tee /sys/module/zfs/parameters/zfs_arc_max
|
echo $ARC_MAX | sudo tee /sys/module/zfs/parameters/zfs_arc_max
|
||||||
echo 1 | sudo tee /sys/module/zfs/parameters/zvol_use_blk_mq
|
echo 1 | sudo tee /sys/module/zfs/parameters/zvol_use_blk_mq
|
||||||
sudo zpool create -f -o ashift=12 zpool $SSD1 $SSD2 -O relatime=off \
|
sudo zpool create -f -o ashift=12 zpool $SSD1 $SSD2 \
|
||||||
-O atime=off -O xattr=sa -O compression=lz4 -O sync=disabled \
|
-O relatime=off -O atime=off -O xattr=sa -O compression=lz4 \
|
||||||
-O redundant_metadata=none -O mountpoint=/mnt/tests
|
-O mountpoint=/mnt/tests
|
||||||
|
|
||||||
# no need for some scheduler
|
# no need for some scheduler
|
||||||
for i in /sys/block/s*/queue/scheduler; do
|
for i in /sys/block/s*/queue/scheduler; do
|
||||||
echo "none" | sudo tee $i
|
echo "none" | sudo tee $i > /dev/null
|
||||||
done
|
done
|
||||||
|
168
.github/workflows/scripts/qemu-2-start.sh
vendored
168
.github/workflows/scripts/qemu-2-start.sh
vendored
@ -12,15 +12,15 @@ OS="$1"
|
|||||||
# OS variant (virt-install --os-variant list)
|
# OS variant (virt-install --os-variant list)
|
||||||
OSv=$OS
|
OSv=$OS
|
||||||
|
|
||||||
# FreeBSD urls's
|
# compressed with .zst extension
|
||||||
FREEBSD_REL="https://download.freebsd.org/releases/CI-IMAGES"
|
REPO="https://github.com/mcmilk/openzfs-freebsd-images"
|
||||||
FREEBSD_SNAP="https://download.freebsd.org/snapshots/CI-IMAGES"
|
FREEBSD="$REPO/releases/download/v2024-12-14"
|
||||||
URLxz=""
|
URLzs=""
|
||||||
|
|
||||||
# Ubuntu mirrors
|
# Ubuntu mirrors
|
||||||
UBMIRROR="https://cloud-images.ubuntu.com"
|
#UBMIRROR="https://cloud-images.ubuntu.com"
|
||||||
#UBMIRROR="https://mirrors.cloud.tencent.com/ubuntu-cloud-images"
|
#UBMIRROR="https://mirrors.cloud.tencent.com/ubuntu-cloud-images"
|
||||||
#UBMIRROR="https://mirror.citrahost.com/ubuntu-cloud-images"
|
UBMIRROR="https://mirror.citrahost.com/ubuntu-cloud-images"
|
||||||
|
|
||||||
# default nic model for vm's
|
# default nic model for vm's
|
||||||
NIC="virtio"
|
NIC="virtio"
|
||||||
@ -34,14 +34,11 @@ case "$OS" in
|
|||||||
OSNAME="AlmaLinux 9"
|
OSNAME="AlmaLinux 9"
|
||||||
URL="https://repo.almalinux.org/almalinux/9/cloud/x86_64/images/AlmaLinux-9-GenericCloud-latest.x86_64.qcow2"
|
URL="https://repo.almalinux.org/almalinux/9/cloud/x86_64/images/AlmaLinux-9-GenericCloud-latest.x86_64.qcow2"
|
||||||
;;
|
;;
|
||||||
almalinux10)
|
|
||||||
OSNAME="AlmaLinux 10"
|
|
||||||
OSv="almalinux9"
|
|
||||||
URL="https://repo.almalinux.org/almalinux/10/cloud/x86_64/images/AlmaLinux-10-GenericCloud-latest.x86_64.qcow2"
|
|
||||||
;;
|
|
||||||
archlinux)
|
archlinux)
|
||||||
OSNAME="Archlinux"
|
OSNAME="Archlinux"
|
||||||
URL="https://geo.mirror.pkgbuild.com/images/latest/Arch-Linux-x86_64-cloudimg.qcow2"
|
URL="https://geo.mirror.pkgbuild.com/images/latest/Arch-Linux-x86_64-cloudimg.qcow2"
|
||||||
|
# dns sometimes fails with that url :/
|
||||||
|
echo "89.187.191.12 geo.mirror.pkgbuild.com" | sudo tee /etc/hosts > /dev/null
|
||||||
;;
|
;;
|
||||||
centos-stream10)
|
centos-stream10)
|
||||||
OSNAME="CentOS Stream 10"
|
OSNAME="CentOS Stream 10"
|
||||||
@ -61,6 +58,11 @@ case "$OS" in
|
|||||||
OSNAME="Debian 12"
|
OSNAME="Debian 12"
|
||||||
URL="https://cloud.debian.org/images/cloud/bookworm/latest/debian-12-generic-amd64.qcow2"
|
URL="https://cloud.debian.org/images/cloud/bookworm/latest/debian-12-generic-amd64.qcow2"
|
||||||
;;
|
;;
|
||||||
|
fedora40)
|
||||||
|
OSNAME="Fedora 40"
|
||||||
|
OSv="fedora-unknown"
|
||||||
|
URL="https://download.fedoraproject.org/pub/fedora/linux/releases/40/Cloud/x86_64/images/Fedora-Cloud-Base-Generic.x86_64-40-1.14.qcow2"
|
||||||
|
;;
|
||||||
fedora41)
|
fedora41)
|
||||||
OSNAME="Fedora 41"
|
OSNAME="Fedora 41"
|
||||||
OSv="fedora-unknown"
|
OSv="fedora-unknown"
|
||||||
@ -72,56 +74,36 @@ case "$OS" in
|
|||||||
URL="https://download.fedoraproject.org/pub/fedora/linux/releases/42/Cloud/x86_64/images/Fedora-Cloud-Base-Generic-42-1.1.x86_64.qcow2"
|
URL="https://download.fedoraproject.org/pub/fedora/linux/releases/42/Cloud/x86_64/images/Fedora-Cloud-Base-Generic-42-1.1.x86_64.qcow2"
|
||||||
;;
|
;;
|
||||||
freebsd13-4r)
|
freebsd13-4r)
|
||||||
FreeBSD="13.4-RELEASE"
|
OSNAME="FreeBSD 13.4-RELEASE"
|
||||||
OSNAME="FreeBSD $FreeBSD"
|
|
||||||
OSv="freebsd13.0"
|
OSv="freebsd13.0"
|
||||||
URLxz="$FREEBSD_REL/$FreeBSD/amd64/Latest/FreeBSD-$FreeBSD-amd64-BASIC-CI.raw.xz"
|
URLzs="$FREEBSD/amd64-freebsd-13.4-RELEASE.qcow2.zst"
|
||||||
KSRC="$FREEBSD_REL/../amd64/$FreeBSD/src.txz"
|
BASH="/usr/local/bin/bash"
|
||||||
NIC="rtl8139"
|
|
||||||
;;
|
|
||||||
freebsd13-5r)
|
|
||||||
FreeBSD="13.5-RELEASE"
|
|
||||||
OSNAME="FreeBSD $FreeBSD"
|
|
||||||
OSv="freebsd13.0"
|
|
||||||
URLxz="$FREEBSD_REL/$FreeBSD/amd64/Latest/FreeBSD-$FreeBSD-amd64-BASIC-CI.raw.xz"
|
|
||||||
KSRC="$FREEBSD_REL/../amd64/$FreeBSD/src.txz"
|
|
||||||
NIC="rtl8139"
|
NIC="rtl8139"
|
||||||
;;
|
;;
|
||||||
freebsd14-2r)
|
freebsd14-2r)
|
||||||
FreeBSD="14.2-RELEASE"
|
OSNAME="FreeBSD 14.2-RELEASE"
|
||||||
OSNAME="FreeBSD $FreeBSD"
|
|
||||||
OSv="freebsd14.0"
|
OSv="freebsd14.0"
|
||||||
KSRC="$FREEBSD_REL/../amd64/$FreeBSD/src.txz"
|
URLzs="$FREEBSD/amd64-freebsd-14.2-RELEASE.qcow2.zst"
|
||||||
URLxz="$FREEBSD_REL/$FreeBSD/amd64/Latest/FreeBSD-$FreeBSD-amd64-BASIC-CI.raw.xz"
|
BASH="/usr/local/bin/bash"
|
||||||
;;
|
;;
|
||||||
freebsd14-3r)
|
freebsd13-4s)
|
||||||
FreeBSD="14.3-RELEASE"
|
OSNAME="FreeBSD 13.4-STABLE"
|
||||||
OSNAME="FreeBSD $FreeBSD"
|
|
||||||
OSv="freebsd14.0"
|
|
||||||
URLxz="$FREEBSD_REL/$FreeBSD/amd64/Latest/FreeBSD-$FreeBSD-amd64-BASIC-CI.raw.xz"
|
|
||||||
KSRC="$FREEBSD_REL/../amd64/$FreeBSD/src.txz"
|
|
||||||
;;
|
|
||||||
freebsd13-5s)
|
|
||||||
FreeBSD="13.5-STABLE"
|
|
||||||
OSNAME="FreeBSD $FreeBSD"
|
|
||||||
OSv="freebsd13.0"
|
OSv="freebsd13.0"
|
||||||
URLxz="$FREEBSD_SNAP/$FreeBSD/amd64/Latest/FreeBSD-$FreeBSD-amd64-BASIC-CI.raw.xz"
|
URLzs="$FREEBSD/amd64-freebsd-13.4-STABLE.qcow2.zst"
|
||||||
KSRC="$FREEBSD_SNAP/../amd64/$FreeBSD/src.txz"
|
BASH="/usr/local/bin/bash"
|
||||||
NIC="rtl8139"
|
NIC="rtl8139"
|
||||||
;;
|
;;
|
||||||
freebsd14-3s)
|
freebsd14-2s)
|
||||||
FreeBSD="14.3-STABLE"
|
OSNAME="FreeBSD 14.2-STABLE"
|
||||||
OSNAME="FreeBSD $FreeBSD"
|
|
||||||
OSv="freebsd14.0"
|
OSv="freebsd14.0"
|
||||||
URLxz="$FREEBSD_SNAP/$FreeBSD/amd64/Latest/FreeBSD-$FreeBSD-amd64-BASIC-CI-ufs.raw.xz"
|
URLzs="$FREEBSD/amd64-freebsd-14.2-STABLE.qcow2.zst"
|
||||||
KSRC="$FREEBSD_SNAP/../amd64/$FreeBSD/src.txz"
|
BASH="/usr/local/bin/bash"
|
||||||
;;
|
;;
|
||||||
freebsd15-0c)
|
freebsd15-0c)
|
||||||
FreeBSD="15.0-CURRENT"
|
OSNAME="FreeBSD 15.0-CURRENT"
|
||||||
OSNAME="FreeBSD $FreeBSD"
|
|
||||||
OSv="freebsd14.0"
|
OSv="freebsd14.0"
|
||||||
URLxz="$FREEBSD_SNAP/$FreeBSD/amd64/Latest/FreeBSD-$FreeBSD-amd64-BASIC-CI-ufs.raw.xz"
|
URLzs="$FREEBSD/amd64-freebsd-15.0-CURRENT.qcow2.zst"
|
||||||
KSRC="$FREEBSD_SNAP/../amd64/$FreeBSD/src.txz"
|
BASH="/usr/local/bin/bash"
|
||||||
;;
|
;;
|
||||||
tumbleweed)
|
tumbleweed)
|
||||||
OSNAME="openSUSE Tumbleweed"
|
OSNAME="openSUSE Tumbleweed"
|
||||||
@ -129,6 +111,11 @@ case "$OS" in
|
|||||||
MIRROR="http://opensuse-mirror-gce-us.susecloud.net"
|
MIRROR="http://opensuse-mirror-gce-us.susecloud.net"
|
||||||
URL="$MIRROR/tumbleweed/appliances/openSUSE-MicroOS.x86_64-OpenStack-Cloud.qcow2"
|
URL="$MIRROR/tumbleweed/appliances/openSUSE-MicroOS.x86_64-OpenStack-Cloud.qcow2"
|
||||||
;;
|
;;
|
||||||
|
ubuntu20)
|
||||||
|
OSNAME="Ubuntu 20.04"
|
||||||
|
OSv="ubuntu20.04"
|
||||||
|
URL="$UBMIRROR/focal/current/focal-server-cloudimg-amd64.img"
|
||||||
|
;;
|
||||||
ubuntu22)
|
ubuntu22)
|
||||||
OSNAME="Ubuntu 22.04"
|
OSNAME="Ubuntu 22.04"
|
||||||
OSv="ubuntu22.04"
|
OSv="ubuntu22.04"
|
||||||
@ -152,7 +139,7 @@ echo "ENV=$ENV" >> $ENV
|
|||||||
# result path
|
# result path
|
||||||
echo 'RESPATH="/var/tmp/test_results"' >> $ENV
|
echo 'RESPATH="/var/tmp/test_results"' >> $ENV
|
||||||
|
|
||||||
# FreeBSD 13 has problems with: e1000 and virtio
|
# FreeBSD 13 has problems with: e1000+virtio
|
||||||
echo "NIC=$NIC" >> $ENV
|
echo "NIC=$NIC" >> $ENV
|
||||||
|
|
||||||
# freebsd15 -> used in zfs-qemu.yml
|
# freebsd15 -> used in zfs-qemu.yml
|
||||||
@ -164,48 +151,34 @@ echo "OSv=\"$OSv\"" >> $ENV
|
|||||||
# FreeBSD 15 (Current) -> used for summary
|
# FreeBSD 15 (Current) -> used for summary
|
||||||
echo "OSNAME=\"$OSNAME\"" >> $ENV
|
echo "OSNAME=\"$OSNAME\"" >> $ENV
|
||||||
|
|
||||||
# default vm count for testings
|
|
||||||
VMs=2
|
|
||||||
echo "VMs=\"$VMs\"" >> $ENV
|
|
||||||
|
|
||||||
# default cpu count for testing vm's
|
|
||||||
CPU=2
|
|
||||||
echo "CPU=\"$CPU\"" >> $ENV
|
|
||||||
|
|
||||||
sudo mkdir -p "/mnt/tests"
|
sudo mkdir -p "/mnt/tests"
|
||||||
sudo chown -R $(whoami) /mnt/tests
|
sudo chown -R $(whoami) /mnt/tests
|
||||||
|
|
||||||
DISK="/dev/zvol/zpool/openzfs"
|
|
||||||
sudo zfs create -ps -b 64k -V 80g zpool/openzfs
|
|
||||||
while true; do test -b $DISK && break; sleep 1; done
|
|
||||||
|
|
||||||
# we are downloading via axel, curl and wget are mostly slower and
|
# we are downloading via axel, curl and wget are mostly slower and
|
||||||
# require more return value checking
|
# require more return value checking
|
||||||
IMG="/mnt/tests/cloud-image"
|
IMG="/mnt/tests/cloudimg.qcow2"
|
||||||
if [ ! -z "$URLxz" ]; then
|
if [ ! -z "$URLzs" ]; then
|
||||||
echo "Loading $URLxz ..."
|
echo "Loading image $URLzs ..."
|
||||||
time axel -q -o "$IMG" "$URLxz"
|
time axel -q -o "$IMG.zst" "$URLzs"
|
||||||
echo "Loading $KSRC ..."
|
zstd -q -d --rm "$IMG.zst"
|
||||||
time axel -q -o ~/src.txz $KSRC
|
|
||||||
else
|
else
|
||||||
echo "Loading $URL ..."
|
echo "Loading image $URL ..."
|
||||||
time axel -q -o "$IMG" "$URL"
|
time axel -q -o "$IMG" "$URL"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
DISK="/dev/zvol/zpool/openzfs"
|
||||||
|
FORMAT="raw"
|
||||||
|
sudo zfs create -ps -b 64k -V 80g zpool/openzfs
|
||||||
|
while true; do test -b $DISK && break; sleep 1; done
|
||||||
echo "Importing VM image to zvol..."
|
echo "Importing VM image to zvol..."
|
||||||
if [ ! -z "$URLxz" ]; then
|
sudo qemu-img dd -f qcow2 -O raw if=$IMG of=$DISK bs=4M
|
||||||
xzcat -T0 $IMG | sudo dd of=$DISK bs=4M
|
|
||||||
else
|
|
||||||
sudo qemu-img dd -f qcow2 -O raw if=$IMG of=$DISK bs=4M
|
|
||||||
fi
|
|
||||||
rm -f $IMG
|
rm -f $IMG
|
||||||
|
|
||||||
PUBKEY=$(cat ~/.ssh/id_ed25519.pub)
|
PUBKEY=$(cat ~/.ssh/id_ed25519.pub)
|
||||||
if [ ${OS:0:7} != "freebsd" ]; then
|
cat <<EOF > /tmp/user-data
|
||||||
cat <<EOF > /tmp/user-data
|
|
||||||
#cloud-config
|
#cloud-config
|
||||||
|
|
||||||
hostname: $OS
|
fqdn: $OS
|
||||||
|
|
||||||
users:
|
users:
|
||||||
- name: root
|
- name: root
|
||||||
@ -221,19 +194,6 @@ growpart:
|
|||||||
devices: ['/']
|
devices: ['/']
|
||||||
ignore_growroot_disabled: false
|
ignore_growroot_disabled: false
|
||||||
EOF
|
EOF
|
||||||
else
|
|
||||||
cat <<EOF > /tmp/user-data
|
|
||||||
#cloud-config
|
|
||||||
|
|
||||||
hostname: $OS
|
|
||||||
|
|
||||||
# minimized config without sudo for nuageinit of FreeBSD
|
|
||||||
growpart:
|
|
||||||
mode: auto
|
|
||||||
devices: ['/']
|
|
||||||
ignore_growroot_disabled: false
|
|
||||||
EOF
|
|
||||||
fi
|
|
||||||
|
|
||||||
sudo virsh net-update default add ip-dhcp-host \
|
sudo virsh net-update default add ip-dhcp-host \
|
||||||
"<host mac='52:54:00:83:79:00' ip='192.168.122.10'/>" --live --config
|
"<host mac='52:54:00:83:79:00' ip='192.168.122.10'/>" --live --config
|
||||||
@ -249,7 +209,7 @@ sudo virt-install \
|
|||||||
--graphics none \
|
--graphics none \
|
||||||
--network bridge=virbr0,model=$NIC,mac='52:54:00:83:79:00' \
|
--network bridge=virbr0,model=$NIC,mac='52:54:00:83:79:00' \
|
||||||
--cloud-init user-data=/tmp/user-data \
|
--cloud-init user-data=/tmp/user-data \
|
||||||
--disk $DISK,bus=virtio,cache=none,format=raw,driver.discard=unmap \
|
--disk $DISK,bus=virtio,cache=none,format=$FORMAT,driver.discard=unmap \
|
||||||
--import --noautoconsole >/dev/null
|
--import --noautoconsole >/dev/null
|
||||||
|
|
||||||
# Give the VMs hostnames so we don't have to refer to them with
|
# Give the VMs hostnames so we don't have to refer to them with
|
||||||
@ -257,7 +217,7 @@ sudo virt-install \
|
|||||||
#
|
#
|
||||||
# vm0: Initial VM we install dependencies and build ZFS on.
|
# vm0: Initial VM we install dependencies and build ZFS on.
|
||||||
# vm1..2 Testing VMs
|
# vm1..2 Testing VMs
|
||||||
for ((i=0; i<=VMs; i++)); do
|
for i in {0..9} ; do
|
||||||
echo "192.168.122.1$i vm$i" | sudo tee -a /etc/hosts
|
echo "192.168.122.1$i vm$i" | sudo tee -a /etc/hosts
|
||||||
done
|
done
|
||||||
|
|
||||||
@ -271,29 +231,3 @@ StrictHostKeyChecking no
|
|||||||
# small timeout, used in while loops later
|
# small timeout, used in while loops later
|
||||||
ConnectTimeout 1
|
ConnectTimeout 1
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
if [ ${OS:0:7} != "freebsd" ]; then
|
|
||||||
# enable KSM on Linux
|
|
||||||
sudo virsh dommemstat --domain "openzfs" --period 5
|
|
||||||
sudo virsh node-memory-tune 100 50 1
|
|
||||||
echo 1 | sudo tee /sys/kernel/mm/ksm/run > /dev/null
|
|
||||||
else
|
|
||||||
# on FreeBSD we need some more init stuff, because of nuageinit
|
|
||||||
BASH="/usr/local/bin/bash"
|
|
||||||
while pidof /usr/bin/qemu-system-x86_64 >/dev/null; do
|
|
||||||
ssh 2>/dev/null root@vm0 "uname -a" && break
|
|
||||||
done
|
|
||||||
ssh root@vm0 "pkg install -y bash ca_root_nss git qemu-guest-agent python3 py311-cloud-init"
|
|
||||||
ssh root@vm0 "chsh -s $BASH root"
|
|
||||||
ssh root@vm0 'sysrc qemu_guest_agent_enable="YES"'
|
|
||||||
ssh root@vm0 'sysrc cloudinit_enable="YES"'
|
|
||||||
ssh root@vm0 "pw add user zfs -w no -s $BASH"
|
|
||||||
ssh root@vm0 'mkdir -p ~zfs/.ssh'
|
|
||||||
ssh root@vm0 'echo "zfs ALL=(ALL:ALL) NOPASSWD: ALL" >> /usr/local/etc/sudoers'
|
|
||||||
ssh root@vm0 'echo "PubkeyAuthentication yes" >> /etc/ssh/sshd_config'
|
|
||||||
scp ~/.ssh/id_ed25519.pub "root@vm0:~zfs/.ssh/authorized_keys"
|
|
||||||
ssh root@vm0 'chown -R zfs ~zfs'
|
|
||||||
ssh root@vm0 'service sshd restart'
|
|
||||||
scp ~/src.txz "root@vm0:/tmp/src.txz"
|
|
||||||
ssh root@vm0 'tar -C / -zxf /tmp/src.txz'
|
|
||||||
fi
|
|
||||||
|
33
.github/workflows/scripts/qemu-3-deps-vm.sh
vendored
33
.github/workflows/scripts/qemu-3-deps-vm.sh
vendored
@ -4,8 +4,6 @@
|
|||||||
# 3) install dependencies for compiling and loading
|
# 3) install dependencies for compiling and loading
|
||||||
#
|
#
|
||||||
# $1: OS name (like 'fedora41')
|
# $1: OS name (like 'fedora41')
|
||||||
# $2: (optional) Experimental Fedora kernel version, like "6.14" to
|
|
||||||
# install instead of Fedora defaults.
|
|
||||||
######################################################################
|
######################################################################
|
||||||
|
|
||||||
set -eu
|
set -eu
|
||||||
@ -57,7 +55,6 @@ function freebsd() {
|
|||||||
'^samba4[[:digit:]]+$' \
|
'^samba4[[:digit:]]+$' \
|
||||||
'^py3[[:digit:]]+-cffi$' \
|
'^py3[[:digit:]]+-cffi$' \
|
||||||
'^py3[[:digit:]]+-sysctl$' \
|
'^py3[[:digit:]]+-sysctl$' \
|
||||||
'^py3[[:digit:]]+-setuptools$' \
|
|
||||||
'^py3[[:digit:]]+-packaging$'
|
'^py3[[:digit:]]+-packaging$'
|
||||||
echo "##[endgroup]"
|
echo "##[endgroup]"
|
||||||
}
|
}
|
||||||
@ -97,25 +94,6 @@ function tumbleweed() {
|
|||||||
echo "##[endgroup]"
|
echo "##[endgroup]"
|
||||||
}
|
}
|
||||||
|
|
||||||
# $1: Kernel version to install (like '6.14rc7')
|
|
||||||
function install_fedora_experimental_kernel {
|
|
||||||
|
|
||||||
our_version="$1"
|
|
||||||
sudo dnf -y copr enable @kernel-vanilla/stable
|
|
||||||
sudo dnf -y copr enable @kernel-vanilla/mainline
|
|
||||||
all="$(sudo dnf list --showduplicates kernel-*)"
|
|
||||||
echo "Available versions:"
|
|
||||||
echo "$all"
|
|
||||||
|
|
||||||
# You can have a bunch of minor variants of the version we want '6.14'.
|
|
||||||
# Pick the newest variant (sorted by version number).
|
|
||||||
specific_version=$(echo "$all" | grep $our_version | awk '{print $2}' | sort -V | tail -n 1)
|
|
||||||
list="$(echo "$all" | grep $specific_version | grep -Ev 'kernel-rt|kernel-selftests|kernel-debuginfo' | sed 's/.x86_64//g' | awk '{print $1"-"$2}')"
|
|
||||||
sudo dnf install -y $list
|
|
||||||
sudo dnf -y copr disable @kernel-vanilla/stable
|
|
||||||
sudo dnf -y copr disable @kernel-vanilla/mainline
|
|
||||||
}
|
|
||||||
|
|
||||||
# Install dependencies
|
# Install dependencies
|
||||||
case "$1" in
|
case "$1" in
|
||||||
almalinux8)
|
almalinux8)
|
||||||
@ -128,7 +106,7 @@ case "$1" in
|
|||||||
sudo dnf install -y kernel-abi-whitelists
|
sudo dnf install -y kernel-abi-whitelists
|
||||||
echo "##[endgroup]"
|
echo "##[endgroup]"
|
||||||
;;
|
;;
|
||||||
almalinux9|almalinux10|centos-stream9|centos-stream10)
|
almalinux9|centos-stream9|centos-stream10)
|
||||||
echo "##[group]Enable epel and crb repositories"
|
echo "##[group]Enable epel and crb repositories"
|
||||||
sudo dnf config-manager -y --set-enabled crb
|
sudo dnf config-manager -y --set-enabled crb
|
||||||
sudo dnf install -y epel-release
|
sudo dnf install -y epel-release
|
||||||
@ -154,11 +132,6 @@ case "$1" in
|
|||||||
|
|
||||||
# Fedora 42+ moves /usr/bin/script from 'util-linux' to 'util-linux-script'
|
# Fedora 42+ moves /usr/bin/script from 'util-linux' to 'util-linux-script'
|
||||||
sudo dnf install -y util-linux-script || true
|
sudo dnf install -y util-linux-script || true
|
||||||
|
|
||||||
# Optional: Install an experimental kernel ($2 = kernel version)
|
|
||||||
if [ -n "${2:-}" ] ; then
|
|
||||||
install_fedora_experimental_kernel "$2"
|
|
||||||
fi
|
|
||||||
;;
|
;;
|
||||||
freebsd*)
|
freebsd*)
|
||||||
freebsd
|
freebsd
|
||||||
@ -171,7 +144,9 @@ case "$1" in
|
|||||||
echo "##[group]Install Ubuntu specific"
|
echo "##[group]Install Ubuntu specific"
|
||||||
sudo apt-get install -yq linux-tools-common libtirpc-dev \
|
sudo apt-get install -yq linux-tools-common libtirpc-dev \
|
||||||
linux-modules-extra-$(uname -r)
|
linux-modules-extra-$(uname -r)
|
||||||
sudo apt-get install -yq dh-sequence-dkms
|
if [ "$1" != "ubuntu20" ]; then
|
||||||
|
sudo apt-get install -yq dh-sequence-dkms
|
||||||
|
fi
|
||||||
echo "##[endgroup]"
|
echo "##[endgroup]"
|
||||||
echo "##[group]Delete Ubuntu OpenZFS modules"
|
echo "##[group]Delete Ubuntu OpenZFS modules"
|
||||||
for i in $(find /lib/modules -name zfs -type d); do sudo rm -rvf $i; done
|
for i in $(find /lib/modules -name zfs -type d); do sudo rm -rvf $i; done
|
||||||
|
15
.github/workflows/scripts/qemu-3-deps.sh
vendored
15
.github/workflows/scripts/qemu-3-deps.sh
vendored
@ -3,25 +3,12 @@
|
|||||||
# script on it.
|
# script on it.
|
||||||
#
|
#
|
||||||
# $1: OS name (like 'fedora41')
|
# $1: OS name (like 'fedora41')
|
||||||
# $2: (optional) Experimental kernel version to install on fedora,
|
|
||||||
# like "6.14".
|
|
||||||
######################################################################
|
######################################################################
|
||||||
|
|
||||||
.github/workflows/scripts/qemu-wait-for-vm.sh vm0
|
.github/workflows/scripts/qemu-wait-for-vm.sh vm0
|
||||||
|
|
||||||
# SPECIAL CASE:
|
|
||||||
#
|
|
||||||
# If the user passed in an experimental kernel version to test on Fedora,
|
|
||||||
# we need to update the kernel version in zfs's META file to allow the
|
|
||||||
# build to happen. We update our local copy of META here, since we know
|
|
||||||
# it will be rsync'd up in the next step.
|
|
||||||
if [ -n "${2:-}" ] ; then
|
|
||||||
sed -i -E 's/Linux-Maximum: .+/Linux-Maximum: 99.99/g' META
|
|
||||||
fi
|
|
||||||
|
|
||||||
scp .github/workflows/scripts/qemu-3-deps-vm.sh zfs@vm0:qemu-3-deps-vm.sh
|
scp .github/workflows/scripts/qemu-3-deps-vm.sh zfs@vm0:qemu-3-deps-vm.sh
|
||||||
PID=`pidof /usr/bin/qemu-system-x86_64`
|
PID=`pidof /usr/bin/qemu-system-x86_64`
|
||||||
ssh zfs@vm0 '$HOME/qemu-3-deps-vm.sh' "$@"
|
ssh zfs@vm0 '$HOME/qemu-3-deps-vm.sh' $1
|
||||||
# wait for poweroff to succeed
|
# wait for poweroff to succeed
|
||||||
tail --pid=$PID -f /dev/null
|
tail --pid=$PID -f /dev/null
|
||||||
sleep 5 # avoid this: "error: Domain is already active"
|
sleep 5 # avoid this: "error: Domain is already active"
|
||||||
|
2
.github/workflows/scripts/qemu-4-build-vm.sh
vendored
2
.github/workflows/scripts/qemu-4-build-vm.sh
vendored
@ -326,7 +326,7 @@ fi
|
|||||||
#
|
#
|
||||||
# rhel8.10
|
# rhel8.10
|
||||||
# almalinux9.5
|
# almalinux9.5
|
||||||
# fedora42
|
# fedora40
|
||||||
source /etc/os-release
|
source /etc/os-release
|
||||||
sudo hostname "$ID$VERSION_ID"
|
sudo hostname "$ID$VERSION_ID"
|
||||||
|
|
||||||
|
34
.github/workflows/scripts/qemu-5-setup.sh
vendored
34
.github/workflows/scripts/qemu-5-setup.sh
vendored
@ -14,33 +14,39 @@ PID=$(pidof /usr/bin/qemu-system-x86_64)
|
|||||||
tail --pid=$PID -f /dev/null
|
tail --pid=$PID -f /dev/null
|
||||||
sudo virsh undefine openzfs
|
sudo virsh undefine openzfs
|
||||||
|
|
||||||
|
# default values per test vm:
|
||||||
|
VMs=2
|
||||||
|
CPU=2
|
||||||
|
|
||||||
# cpu pinning
|
# cpu pinning
|
||||||
CPUSET=("0,1" "2,3")
|
CPUSET=("0,1" "2,3")
|
||||||
|
|
||||||
case "$OS" in
|
case "$OS" in
|
||||||
freebsd*)
|
freebsd*)
|
||||||
# FreeBSD needs only 6GiB
|
# FreeBSD can't be optimized via ksmtuned
|
||||||
RAM=6
|
RAM=6
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
# Linux needs more memory, but can be optimized to share it via KSM
|
# Linux can be optimized via ksmtuned
|
||||||
RAM=8
|
RAM=8
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
|
# this can be different for each distro
|
||||||
|
echo "VMs=$VMs" >> $ENV
|
||||||
|
|
||||||
# create snapshot we can clone later
|
# create snapshot we can clone later
|
||||||
sudo zfs snapshot zpool/openzfs@now
|
sudo zfs snapshot zpool/openzfs@now
|
||||||
|
|
||||||
# setup the testing vm's
|
# setup the testing vm's
|
||||||
PUBKEY=$(cat ~/.ssh/id_ed25519.pub)
|
PUBKEY=$(cat ~/.ssh/id_ed25519.pub)
|
||||||
|
for i in $(seq 1 $VMs); do
|
||||||
|
|
||||||
# start testing VMs
|
|
||||||
for ((i=1; i<=VMs; i++)); do
|
|
||||||
echo "Creating disk for vm$i..."
|
echo "Creating disk for vm$i..."
|
||||||
DISK="/dev/zvol/zpool/vm$i"
|
DISK="/dev/zvol/zpool/vm$i"
|
||||||
FORMAT="raw"
|
FORMAT="raw"
|
||||||
sudo zfs clone zpool/openzfs@now zpool/vm$i-system
|
sudo zfs clone zpool/openzfs@now zpool/vm$i
|
||||||
sudo zfs create -ps -b 64k -V 64g zpool/vm$i-tests
|
sudo zfs create -ps -b 64k -V 80g zpool/vm$i-2
|
||||||
|
|
||||||
cat <<EOF > /tmp/user-data
|
cat <<EOF > /tmp/user-data
|
||||||
#cloud-config
|
#cloud-config
|
||||||
@ -77,21 +83,23 @@ EOF
|
|||||||
--graphics none \
|
--graphics none \
|
||||||
--cloud-init user-data=/tmp/user-data \
|
--cloud-init user-data=/tmp/user-data \
|
||||||
--network bridge=virbr0,model=$NIC,mac="52:54:00:83:79:0$i" \
|
--network bridge=virbr0,model=$NIC,mac="52:54:00:83:79:0$i" \
|
||||||
--disk $DISK-system,bus=virtio,cache=none,format=$FORMAT,driver.discard=unmap \
|
--disk $DISK,bus=virtio,cache=none,format=$FORMAT,driver.discard=unmap \
|
||||||
--disk $DISK-tests,bus=virtio,cache=none,format=$FORMAT,driver.discard=unmap \
|
--disk $DISK-2,bus=virtio,cache=none,format=$FORMAT,driver.discard=unmap \
|
||||||
--import --noautoconsole >/dev/null
|
--import --noautoconsole >/dev/null
|
||||||
done
|
done
|
||||||
|
|
||||||
# generate some memory stats
|
# check the memory state from time to time
|
||||||
cat <<EOF > cronjob.sh
|
cat <<EOF > cronjob.sh
|
||||||
|
# $OS
|
||||||
exec 1>>/var/tmp/stats.txt
|
exec 1>>/var/tmp/stats.txt
|
||||||
exec 2>&1
|
exec 2>&1
|
||||||
echo "********************************************************************************"
|
echo "*******************************************************"
|
||||||
|
date
|
||||||
uptime
|
uptime
|
||||||
free -m
|
free -m
|
||||||
|
df -h /mnt/tests
|
||||||
zfs list
|
zfs list
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
sudo chmod +x cronjob.sh
|
sudo chmod +x cronjob.sh
|
||||||
sudo mv -f cronjob.sh /root/cronjob.sh
|
sudo mv -f cronjob.sh /root/cronjob.sh
|
||||||
echo '*/5 * * * * /root/cronjob.sh' > crontab.txt
|
echo '*/5 * * * * /root/cronjob.sh' > crontab.txt
|
||||||
@ -100,7 +108,7 @@ rm crontab.txt
|
|||||||
|
|
||||||
# check if the machines are okay
|
# check if the machines are okay
|
||||||
echo "Waiting for vm's to come up... (${VMs}x CPU=$CPU RAM=$RAM)"
|
echo "Waiting for vm's to come up... (${VMs}x CPU=$CPU RAM=$RAM)"
|
||||||
for ((i=1; i<=VMs; i++)); do
|
for i in $(seq 1 $VMs); do
|
||||||
.github/workflows/scripts/qemu-wait-for-vm.sh vm$i
|
.github/workflows/scripts/qemu-wait-for-vm.sh vm$i
|
||||||
done
|
done
|
||||||
echo "All $VMs VMs are up now."
|
echo "All $VMs VMs are up now."
|
||||||
@ -108,7 +116,7 @@ echo "All $VMs VMs are up now."
|
|||||||
# Save the VM's serial output (ttyS0) to /var/tmp/console.txt
|
# Save the VM's serial output (ttyS0) to /var/tmp/console.txt
|
||||||
# - ttyS0 on the VM corresponds to a local /dev/pty/N entry
|
# - ttyS0 on the VM corresponds to a local /dev/pty/N entry
|
||||||
# - use 'virsh ttyconsole' to lookup the /dev/pty/N entry
|
# - use 'virsh ttyconsole' to lookup the /dev/pty/N entry
|
||||||
for ((i=1; i<=VMs; i++)); do
|
for i in $(seq 1 $VMs); do
|
||||||
mkdir -p $RESPATH/vm$i
|
mkdir -p $RESPATH/vm$i
|
||||||
read "pty" <<< $(sudo virsh ttyconsole vm$i)
|
read "pty" <<< $(sudo virsh ttyconsole vm$i)
|
||||||
sudo nohup bash -c "cat $pty > $RESPATH/vm$i/console.txt" &
|
sudo nohup bash -c "cat $pty > $RESPATH/vm$i/console.txt" &
|
||||||
|
22
.github/workflows/scripts/qemu-6-tests.sh
vendored
22
.github/workflows/scripts/qemu-6-tests.sh
vendored
@ -45,7 +45,7 @@ if [ -z ${1:-} ]; then
|
|||||||
echo 0 > /tmp/ctr
|
echo 0 > /tmp/ctr
|
||||||
date "+%s" > /tmp/tsstart
|
date "+%s" > /tmp/tsstart
|
||||||
|
|
||||||
for ((i=1; i<=VMs; i++)); do
|
for i in $(seq 1 $VMs); do
|
||||||
IP="192.168.122.1$i"
|
IP="192.168.122.1$i"
|
||||||
daemonize -c /var/tmp -p vm${i}.pid -o vm${i}log.txt -- \
|
daemonize -c /var/tmp -p vm${i}.pid -o vm${i}log.txt -- \
|
||||||
$SSH zfs@$IP $TESTS $OS $i $VMs $CI_TYPE
|
$SSH zfs@$IP $TESTS $OS $i $VMs $CI_TYPE
|
||||||
@ -58,7 +58,7 @@ if [ -z ${1:-} ]; then
|
|||||||
done
|
done
|
||||||
|
|
||||||
# wait for all vm's to finish
|
# wait for all vm's to finish
|
||||||
for ((i=1; i<=VMs; i++)); do
|
for i in $(seq 1 $VMs); do
|
||||||
tail --pid=$(cat vm${i}.pid) -f /dev/null
|
tail --pid=$(cat vm${i}.pid) -f /dev/null
|
||||||
pid=$(cat vm${i}log.pid)
|
pid=$(cat vm${i}log.pid)
|
||||||
rm -f vm${i}log.pid
|
rm -f vm${i}log.pid
|
||||||
@ -72,31 +72,19 @@ fi
|
|||||||
export PATH="$PATH:/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/sbin:/usr/local/bin"
|
export PATH="$PATH:/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/sbin:/usr/local/bin"
|
||||||
case "$1" in
|
case "$1" in
|
||||||
freebsd*)
|
freebsd*)
|
||||||
TDIR="/usr/local/share/zfs"
|
|
||||||
sudo kldstat -n zfs 2>/dev/null && sudo kldunload zfs
|
sudo kldstat -n zfs 2>/dev/null && sudo kldunload zfs
|
||||||
sudo -E ./zfs/scripts/zfs.sh
|
sudo -E ./zfs/scripts/zfs.sh
|
||||||
sudo mv -f /var/tmp/*.txt /tmp
|
TDIR="/usr/local/share/zfs"
|
||||||
sudo newfs -U -t -L tmp /dev/vtbd1 >/dev/null
|
|
||||||
sudo mount -o noatime /dev/vtbd1 /var/tmp
|
|
||||||
sudo chmod 1777 /var/tmp
|
|
||||||
sudo mv -f /tmp/*.txt /var/tmp
|
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
# use xfs @ /var/tmp for all distros
|
# use xfs @ /var/tmp for all distros
|
||||||
TDIR="/usr/share/zfs"
|
|
||||||
sudo -E modprobe zfs
|
|
||||||
sudo mv -f /var/tmp/*.txt /tmp
|
sudo mv -f /var/tmp/*.txt /tmp
|
||||||
sudo mkfs.xfs -fq /dev/vdb
|
sudo mkfs.xfs -fq /dev/vdb
|
||||||
sudo mount -o noatime /dev/vdb /var/tmp
|
sudo mount -o noatime /dev/vdb /var/tmp
|
||||||
sudo chmod 1777 /var/tmp
|
sudo chmod 1777 /var/tmp
|
||||||
sudo mv -f /tmp/*.txt /var/tmp
|
sudo mv -f /tmp/*.txt /var/tmp
|
||||||
;;
|
sudo -E modprobe zfs
|
||||||
esac
|
TDIR="/usr/share/zfs"
|
||||||
|
|
||||||
# enable io_uring on el9/el10
|
|
||||||
case "$1" in
|
|
||||||
almalinux9|almalinux10|centos-stream*)
|
|
||||||
sudo sysctl kernel.io_uring_disabled=0 > /dev/null
|
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
|
4
.github/workflows/scripts/qemu-7-prepare.sh
vendored
4
.github/workflows/scripts/qemu-7-prepare.sh
vendored
@ -28,7 +28,7 @@ BASE="$HOME/work/zfs/zfs"
|
|||||||
MERGE="$BASE/.github/workflows/scripts/merge_summary.awk"
|
MERGE="$BASE/.github/workflows/scripts/merge_summary.awk"
|
||||||
|
|
||||||
# catch result files of testings (vm's should be there)
|
# catch result files of testings (vm's should be there)
|
||||||
for ((i=1; i<=VMs; i++)); do
|
for i in $(seq 1 $VMs); do
|
||||||
rsync -arL zfs@vm$i:$RESPATH/current $RESPATH/vm$i || true
|
rsync -arL zfs@vm$i:$RESPATH/current $RESPATH/vm$i || true
|
||||||
scp zfs@vm$i:"/var/tmp/*.txt" $RESPATH/vm$i || true
|
scp zfs@vm$i:"/var/tmp/*.txt" $RESPATH/vm$i || true
|
||||||
scp zfs@vm$i:"/var/tmp/*.rpm" $RESPATH/vm$i || true
|
scp zfs@vm$i:"/var/tmp/*.rpm" $RESPATH/vm$i || true
|
||||||
@ -37,7 +37,7 @@ cp -f /var/tmp/*.txt $RESPATH || true
|
|||||||
cd $RESPATH
|
cd $RESPATH
|
||||||
|
|
||||||
# prepare result files for summary
|
# prepare result files for summary
|
||||||
for ((i=1; i<=VMs; i++)); do
|
for i in $(seq 1 $VMs); do
|
||||||
file="vm$i/build-stderr.txt"
|
file="vm$i/build-stderr.txt"
|
||||||
test -s $file && mv -f $file build-stderr.txt
|
test -s $file && mv -f $file build-stderr.txt
|
||||||
|
|
||||||
|
2
.github/workflows/scripts/qemu-8-summary.sh
vendored
2
.github/workflows/scripts/qemu-8-summary.sh
vendored
@ -45,7 +45,7 @@ fi
|
|||||||
|
|
||||||
echo -e "\nFull logs for download:\n $1\n"
|
echo -e "\nFull logs for download:\n $1\n"
|
||||||
|
|
||||||
for ((i=1; i<=VMs; i++)); do
|
for i in $(seq 1 $VMs); do
|
||||||
rv=$(cat vm$i/tests-exitcode.txt)
|
rv=$(cat vm$i/tests-exitcode.txt)
|
||||||
|
|
||||||
if [ $rv = 0 ]; then
|
if [ $rv = 0 ]; then
|
||||||
|
2
.github/workflows/zfs-qemu-packages.yml
vendored
2
.github/workflows/zfs-qemu-packages.yml
vendored
@ -47,7 +47,7 @@ jobs:
|
|||||||
strategy:
|
strategy:
|
||||||
fail-fast: false
|
fail-fast: false
|
||||||
matrix:
|
matrix:
|
||||||
os: ['almalinux8', 'almalinux9', 'almalinux10', 'fedora41', 'fedora42']
|
os: ['almalinux8', 'almalinux9', 'fedora40', 'fedora41', 'fedora42']
|
||||||
runs-on: ubuntu-24.04
|
runs-on: ubuntu-24.04
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v4
|
||||||
|
31
.github/workflows/zfs-qemu.yml
vendored
31
.github/workflows/zfs-qemu.yml
vendored
@ -15,11 +15,6 @@ on:
|
|||||||
required: false
|
required: false
|
||||||
default: false
|
default: false
|
||||||
description: 'Test on CentOS 10 stream'
|
description: 'Test on CentOS 10 stream'
|
||||||
fedora_kernel_ver:
|
|
||||||
type: string
|
|
||||||
required: false
|
|
||||||
default: ""
|
|
||||||
description: "(optional) Experimental kernel version to install on Fedora (like '6.14' or '6.13.3-0.rc3')"
|
|
||||||
|
|
||||||
concurrency:
|
concurrency:
|
||||||
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
|
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
|
||||||
@ -39,8 +34,8 @@ jobs:
|
|||||||
- name: Generate OS config and CI type
|
- name: Generate OS config and CI type
|
||||||
id: os
|
id: os
|
||||||
run: |
|
run: |
|
||||||
FULL_OS='["almalinux8", "almalinux9", "almalinux10", "debian11", "debian12", "fedora41", "fedora42", "freebsd13-4r", "freebsd14-3s", "freebsd15-0c", "ubuntu22", "ubuntu24"]'
|
FULL_OS='["almalinux8", "almalinux9", "debian11", "debian12", "fedora40", "fedora41", "fedora42", "freebsd13-4r", "freebsd14-2r", "freebsd15-0c", "ubuntu20", "ubuntu22", "ubuntu24"]'
|
||||||
QUICK_OS='["almalinux8", "almalinux9", "almalinux10", "debian12", "fedora42", "freebsd14-3s", "ubuntu24"]'
|
QUICK_OS='["almalinux8", "almalinux9", "debian12", "fedora42", "freebsd14-2r", "ubuntu24"]'
|
||||||
# determine CI type when running on PR
|
# determine CI type when running on PR
|
||||||
ci_type="full"
|
ci_type="full"
|
||||||
if ${{ github.event_name == 'pull_request' }}; then
|
if ${{ github.event_name == 'pull_request' }}; then
|
||||||
@ -53,15 +48,7 @@ jobs:
|
|||||||
else
|
else
|
||||||
os_selection="$FULL_OS"
|
os_selection="$FULL_OS"
|
||||||
fi
|
fi
|
||||||
|
os_json=$(echo ${os_selection} | jq -c)
|
||||||
if [ ${{ github.event.inputs.fedora_kernel_ver }} != "" ] ; then
|
|
||||||
# They specified a custom kernel version for Fedora. Use only
|
|
||||||
# Fedora runners.
|
|
||||||
os_json=$(echo ${os_selection} | jq -c '[.[] | select(startswith("fedora"))]')
|
|
||||||
else
|
|
||||||
# Normal case
|
|
||||||
os_json=$(echo ${os_selection} | jq -c)
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Add optional runners
|
# Add optional runners
|
||||||
if [ "${{ github.event.inputs.include_stream9 }}" == 'true' ]; then
|
if [ "${{ github.event.inputs.include_stream9 }}" == 'true' ]; then
|
||||||
@ -81,12 +68,12 @@ jobs:
|
|||||||
strategy:
|
strategy:
|
||||||
fail-fast: false
|
fail-fast: false
|
||||||
matrix:
|
matrix:
|
||||||
# rhl: almalinux8, almalinux9, centos-stream9, fedora41
|
# rhl: almalinux8, almalinux9, centos-stream9, fedora40, fedora41
|
||||||
# debian: debian11, debian12, ubuntu22, ubuntu24
|
# debian: debian11, debian12, ubuntu20, ubuntu22, ubuntu24
|
||||||
# misc: archlinux, tumbleweed
|
# misc: archlinux, tumbleweed
|
||||||
# FreeBSD variants of 2025-06:
|
# FreeBSD variants of 2024-12:
|
||||||
# FreeBSD Release: freebsd13-4r, freebsd13-5r, freebsd14-1r, freebsd14-2r, freebsd14-3r
|
# FreeBSD Release: freebsd13-4r, freebsd14-2r
|
||||||
# FreeBSD Stable: freebsd13-5s, freebsd14-3s
|
# FreeBSD Stable: freebsd13-4s, freebsd14-2s
|
||||||
# FreeBSD Current: freebsd15-0c
|
# FreeBSD Current: freebsd15-0c
|
||||||
os: ${{ fromJson(needs.test-config.outputs.test_os) }}
|
os: ${{ fromJson(needs.test-config.outputs.test_os) }}
|
||||||
runs-on: ubuntu-24.04
|
runs-on: ubuntu-24.04
|
||||||
@ -105,7 +92,7 @@ jobs:
|
|||||||
|
|
||||||
- name: Install dependencies
|
- name: Install dependencies
|
||||||
timeout-minutes: 20
|
timeout-minutes: 20
|
||||||
run: .github/workflows/scripts/qemu-3-deps.sh ${{ matrix.os }} ${{ github.event.inputs.fedora_kernel_ver }}
|
run: .github/workflows/scripts/qemu-3-deps.sh ${{ matrix.os }}
|
||||||
|
|
||||||
- name: Build modules
|
- name: Build modules
|
||||||
timeout-minutes: 30
|
timeout-minutes: 30
|
||||||
|
8
.mailmap
8
.mailmap
@ -80,13 +80,11 @@ Youzhong Yang <youzhong@gmail.com>
|
|||||||
|
|
||||||
# Signed-off-by: overriding Author:
|
# Signed-off-by: overriding Author:
|
||||||
Alexander Ziaee <ziaee@FreeBSD.org> <concussious@runbox.com>
|
Alexander Ziaee <ziaee@FreeBSD.org> <concussious@runbox.com>
|
||||||
Felix Schmidt <felixschmidt20@aol.com> <f.sch.prototype@gmail.com>
|
Ryan <errornointernet@envs.net> <error.nointernet@gmail.com>
|
||||||
Olivier Certner <olce@FreeBSD.org> <olce.freebsd@certner.fr>
|
Sietse <sietse@wizdom.nu> <uglymotha@wizdom.nu>
|
||||||
Phil Sutter <phil@nwl.cc> <p.github@nwl.cc>
|
Phil Sutter <phil@nwl.cc> <p.github@nwl.cc>
|
||||||
poscat <poscat@poscat.moe> <poscat0x04@outlook.com>
|
poscat <poscat@poscat.moe> <poscat0x04@outlook.com>
|
||||||
Qiuhao Chen <chenqiuhao1997@gmail.com> <haohao0924@126.com>
|
Qiuhao Chen <chenqiuhao1997@gmail.com> <haohao0924@126.com>
|
||||||
Ryan <errornointernet@envs.net> <error.nointernet@gmail.com>
|
|
||||||
Sietse <sietse@wizdom.nu> <uglymotha@wizdom.nu>
|
|
||||||
Yuxin Wang <yuxinwang9999@gmail.com> <Bi11gates9999@gmail.com>
|
Yuxin Wang <yuxinwang9999@gmail.com> <Bi11gates9999@gmail.com>
|
||||||
Zhenlei Huang <zlei@FreeBSD.org> <zlei.huang@gmail.com>
|
Zhenlei Huang <zlei@FreeBSD.org> <zlei.huang@gmail.com>
|
||||||
|
|
||||||
@ -103,7 +101,6 @@ Tulsi Jain <tulsi.jain@delphix.com> <tulsi.jain@Tulsi-Jains-MacBook-Pro.local>
|
|||||||
# Mappings from Github no-reply addresses
|
# Mappings from Github no-reply addresses
|
||||||
ajs124 <git@ajs124.de> <ajs124@users.noreply.github.com>
|
ajs124 <git@ajs124.de> <ajs124@users.noreply.github.com>
|
||||||
Alek Pinchuk <apinchuk@axcient.com> <alek-p@users.noreply.github.com>
|
Alek Pinchuk <apinchuk@axcient.com> <alek-p@users.noreply.github.com>
|
||||||
Aleksandr Liber <aleksandr.liber@perforce.com> <61714074+AleksandrLiber@users.noreply.github.com>
|
|
||||||
Alexander Lobakin <alobakin@pm.me> <solbjorn@users.noreply.github.com>
|
Alexander Lobakin <alobakin@pm.me> <solbjorn@users.noreply.github.com>
|
||||||
Alexey Smirnoff <fling@member.fsf.org> <fling-@users.noreply.github.com>
|
Alexey Smirnoff <fling@member.fsf.org> <fling-@users.noreply.github.com>
|
||||||
Allen Holl <allen.m.holl@gmail.com> <65494904+allen-4@users.noreply.github.com>
|
Allen Holl <allen.m.holl@gmail.com> <65494904+allen-4@users.noreply.github.com>
|
||||||
@ -140,7 +137,6 @@ Fedor Uporov <fuporov.vstack@gmail.com> <60701163+fuporovvStack@users.noreply.gi
|
|||||||
Felix Dörre <felix@dogcraft.de> <felixdoerre@users.noreply.github.com>
|
Felix Dörre <felix@dogcraft.de> <felixdoerre@users.noreply.github.com>
|
||||||
Felix Neumärker <xdch47@posteo.de> <34678034+xdch47@users.noreply.github.com>
|
Felix Neumärker <xdch47@posteo.de> <34678034+xdch47@users.noreply.github.com>
|
||||||
Finix Yan <yancw@info2soft.com> <Finix1979@users.noreply.github.com>
|
Finix Yan <yancw@info2soft.com> <Finix1979@users.noreply.github.com>
|
||||||
Friedrich Weber <f.weber@proxmox.com> <56110206+frwbr@users.noreply.github.com>
|
|
||||||
Gaurav Kumar <gauravk.18@gmail.com> <gaurkuma@users.noreply.github.com>
|
Gaurav Kumar <gauravk.18@gmail.com> <gaurkuma@users.noreply.github.com>
|
||||||
George Gaydarov <git@gg7.io> <gg7@users.noreply.github.com>
|
George Gaydarov <git@gg7.io> <gg7@users.noreply.github.com>
|
||||||
Georgy Yakovlev <gyakovlev@gentoo.org> <168902+gyakovlev@users.noreply.github.com>
|
Georgy Yakovlev <gyakovlev@gentoo.org> <168902+gyakovlev@users.noreply.github.com>
|
||||||
|
10
AUTHORS
10
AUTHORS
@ -29,7 +29,6 @@ CONTRIBUTORS:
|
|||||||
Alejandro Colomar <Colomar.6.4.3@GMail.com>
|
Alejandro Colomar <Colomar.6.4.3@GMail.com>
|
||||||
Alejandro R. Sedeño <asedeno@mit.edu>
|
Alejandro R. Sedeño <asedeno@mit.edu>
|
||||||
Alek Pinchuk <alek@nexenta.com>
|
Alek Pinchuk <alek@nexenta.com>
|
||||||
Aleksandr Liber <aleksandr.liber@perforce.com>
|
|
||||||
Aleksa Sarai <cyphar@cyphar.com>
|
Aleksa Sarai <cyphar@cyphar.com>
|
||||||
Alexander Eremin <a.eremin@nexenta.com>
|
Alexander Eremin <a.eremin@nexenta.com>
|
||||||
Alexander Lobakin <alobakin@pm.me>
|
Alexander Lobakin <alobakin@pm.me>
|
||||||
@ -82,7 +81,6 @@ CONTRIBUTORS:
|
|||||||
Arne Jansen <arne@die-jansens.de>
|
Arne Jansen <arne@die-jansens.de>
|
||||||
Aron Xu <happyaron.xu@gmail.com>
|
Aron Xu <happyaron.xu@gmail.com>
|
||||||
Arshad Hussain <arshad.hussain@aeoncomputing.com>
|
Arshad Hussain <arshad.hussain@aeoncomputing.com>
|
||||||
Artem <artem.vlasenko@ossrevival.org>
|
|
||||||
Arun KV <arun.kv@datacore.com>
|
Arun KV <arun.kv@datacore.com>
|
||||||
Arvind Sankar <nivedita@alum.mit.edu>
|
Arvind Sankar <nivedita@alum.mit.edu>
|
||||||
Attila Fülöp <attila@fueloep.org>
|
Attila Fülöp <attila@fueloep.org>
|
||||||
@ -229,12 +227,10 @@ CONTRIBUTORS:
|
|||||||
Fedor Uporov <fuporov.vstack@gmail.com>
|
Fedor Uporov <fuporov.vstack@gmail.com>
|
||||||
Felix Dörre <felix@dogcraft.de>
|
Felix Dörre <felix@dogcraft.de>
|
||||||
Felix Neumärker <xdch47@posteo.de>
|
Felix Neumärker <xdch47@posteo.de>
|
||||||
Felix Schmidt <felixschmidt20@aol.com>
|
|
||||||
Feng Sun <loyou85@gmail.com>
|
Feng Sun <loyou85@gmail.com>
|
||||||
Finix Yan <yancw@info2soft.com>
|
Finix Yan <yancw@info2soft.com>
|
||||||
Francesco Mazzoli <f@mazzo.li>
|
Francesco Mazzoli <f@mazzo.li>
|
||||||
Frederik Wessels <wessels147@gmail.com>
|
Frederik Wessels <wessels147@gmail.com>
|
||||||
Friedrich Weber <f.weber@proxmox.com>
|
|
||||||
Frédéric Vanniere <f.vanniere@planet-work.com>
|
Frédéric Vanniere <f.vanniere@planet-work.com>
|
||||||
Gabriel A. Devenyi <gdevenyi@gmail.com>
|
Gabriel A. Devenyi <gdevenyi@gmail.com>
|
||||||
Garrett D'Amore <garrett@nexenta.com>
|
Garrett D'Amore <garrett@nexenta.com>
|
||||||
@ -488,7 +484,7 @@ CONTRIBUTORS:
|
|||||||
Olaf Faaland <faaland1@llnl.gov>
|
Olaf Faaland <faaland1@llnl.gov>
|
||||||
Oleg Drokin <green@linuxhacker.ru>
|
Oleg Drokin <green@linuxhacker.ru>
|
||||||
Oleg Stepura <oleg@stepura.com>
|
Oleg Stepura <oleg@stepura.com>
|
||||||
Olivier Certner <olce@FreeBSD.org>
|
Olivier Certner <olce.freebsd@certner.fr>
|
||||||
Olivier Mazouffre <olivier.mazouffre@ims-bordeaux.fr>
|
Olivier Mazouffre <olivier.mazouffre@ims-bordeaux.fr>
|
||||||
omni <omni+vagant@hack.org>
|
omni <omni+vagant@hack.org>
|
||||||
Orivej Desh <orivej@gmx.fr>
|
Orivej Desh <orivej@gmx.fr>
|
||||||
@ -526,7 +522,6 @@ CONTRIBUTORS:
|
|||||||
P.SCH <p88@yahoo.com>
|
P.SCH <p88@yahoo.com>
|
||||||
Qiuhao Chen <chenqiuhao1997@gmail.com>
|
Qiuhao Chen <chenqiuhao1997@gmail.com>
|
||||||
Quartz <yyhran@163.com>
|
Quartz <yyhran@163.com>
|
||||||
Quentin Thébault <quentin.thebault@defenso.fr>
|
|
||||||
Quentin Zdanis <zdanisq@gmail.com>
|
Quentin Zdanis <zdanisq@gmail.com>
|
||||||
Rafael Kitover <rkitover@gmail.com>
|
Rafael Kitover <rkitover@gmail.com>
|
||||||
RageLtMan <sempervictus@users.noreply.github.com>
|
RageLtMan <sempervictus@users.noreply.github.com>
|
||||||
@ -578,7 +573,6 @@ CONTRIBUTORS:
|
|||||||
Scot W. Stevenson <scot.stevenson@gmail.com>
|
Scot W. Stevenson <scot.stevenson@gmail.com>
|
||||||
Sean Eric Fagan <sef@ixsystems.com>
|
Sean Eric Fagan <sef@ixsystems.com>
|
||||||
Sebastian Gottschall <s.gottschall@dd-wrt.com>
|
Sebastian Gottschall <s.gottschall@dd-wrt.com>
|
||||||
Sebastian Pauka <me@spauka.se>
|
|
||||||
Sebastian Wuerl <s.wuerl@mailbox.org>
|
Sebastian Wuerl <s.wuerl@mailbox.org>
|
||||||
Sebastien Roy <seb@delphix.com>
|
Sebastien Roy <seb@delphix.com>
|
||||||
Sen Haerens <sen@senhaerens.be>
|
Sen Haerens <sen@senhaerens.be>
|
||||||
@ -595,7 +589,6 @@ CONTRIBUTORS:
|
|||||||
Shen Yan <shenyanxxxy@qq.com>
|
Shen Yan <shenyanxxxy@qq.com>
|
||||||
Sietse <sietse@wizdom.nu>
|
Sietse <sietse@wizdom.nu>
|
||||||
Simon Guest <simon.guest@tesujimath.org>
|
Simon Guest <simon.guest@tesujimath.org>
|
||||||
Simon Howard <fraggle@soulsphere.org>
|
|
||||||
Simon Klinkert <simon.klinkert@gmail.com>
|
Simon Klinkert <simon.klinkert@gmail.com>
|
||||||
Sowrabha Gopal <sowrabha.gopal@delphix.com>
|
Sowrabha Gopal <sowrabha.gopal@delphix.com>
|
||||||
Spencer Kinny <spencerkinny1995@gmail.com>
|
Spencer Kinny <spencerkinny1995@gmail.com>
|
||||||
@ -617,7 +610,6 @@ CONTRIBUTORS:
|
|||||||
Stéphane Lesimple <speed47_github@speed47.net>
|
Stéphane Lesimple <speed47_github@speed47.net>
|
||||||
Suman Chakravartula <schakrava@gmail.com>
|
Suman Chakravartula <schakrava@gmail.com>
|
||||||
Sydney Vanda <sydney.m.vanda@intel.com>
|
Sydney Vanda <sydney.m.vanda@intel.com>
|
||||||
Syed Shahrukh Hussain <syed.shahrukh@ossrevival.org>
|
|
||||||
Sören Tempel <soeren+git@soeren-tempel.net>
|
Sören Tempel <soeren+git@soeren-tempel.net>
|
||||||
Tamas TEVESZ <ice@extreme.hu>
|
Tamas TEVESZ <ice@extreme.hu>
|
||||||
Teodor Spæren <teodor_spaeren@riseup.net>
|
Teodor Spæren <teodor_spaeren@riseup.net>
|
||||||
|
4
META
4
META
@ -1,10 +1,10 @@
|
|||||||
Meta: 1
|
Meta: 1
|
||||||
Name: zfs
|
Name: zfs
|
||||||
Branch: 1.0
|
Branch: 1.0
|
||||||
Version: 2.3.99
|
Version: 2.3.2
|
||||||
Release: 1
|
Release: 1
|
||||||
Release-Tags: relext
|
Release-Tags: relext
|
||||||
License: CDDL
|
License: CDDL
|
||||||
Author: OpenZFS
|
Author: OpenZFS
|
||||||
Linux-Maximum: 6.15
|
Linux-Maximum: 6.14
|
||||||
Linux-Minimum: 4.18
|
Linux-Minimum: 4.18
|
||||||
|
@ -735,14 +735,13 @@ def calculate():
|
|||||||
v[group["percent"]] if v[group["percent"]] > 0 else 0
|
v[group["percent"]] if v[group["percent"]] > 0 else 0
|
||||||
|
|
||||||
if l2exist:
|
if l2exist:
|
||||||
l2asize = cur["l2_asize"]
|
|
||||||
v["l2hits"] = d["l2_hits"] / sint
|
v["l2hits"] = d["l2_hits"] / sint
|
||||||
v["l2miss"] = d["l2_misses"] / sint
|
v["l2miss"] = d["l2_misses"] / sint
|
||||||
v["l2read"] = v["l2hits"] + v["l2miss"]
|
v["l2read"] = v["l2hits"] + v["l2miss"]
|
||||||
v["l2hit%"] = 100 * v["l2hits"] / v["l2read"] if v["l2read"] > 0 else 0
|
v["l2hit%"] = 100 * v["l2hits"] / v["l2read"] if v["l2read"] > 0 else 0
|
||||||
|
|
||||||
v["l2miss%"] = 100 - v["l2hit%"] if v["l2read"] > 0 else 0
|
v["l2miss%"] = 100 - v["l2hit%"] if v["l2read"] > 0 else 0
|
||||||
v["l2asize"] = l2asize
|
v["l2asize"] = cur["l2_asize"]
|
||||||
v["l2size"] = cur["l2_size"]
|
v["l2size"] = cur["l2_size"]
|
||||||
v["l2bytes"] = d["l2_read_bytes"] / sint
|
v["l2bytes"] = d["l2_read_bytes"] / sint
|
||||||
v["l2wbytes"] = d["l2_write_bytes"] / sint
|
v["l2wbytes"] = d["l2_write_bytes"] / sint
|
||||||
@ -752,11 +751,11 @@ def calculate():
|
|||||||
v["l2mru"] = cur["l2_mru_asize"]
|
v["l2mru"] = cur["l2_mru_asize"]
|
||||||
v["l2data"] = cur["l2_bufc_data_asize"]
|
v["l2data"] = cur["l2_bufc_data_asize"]
|
||||||
v["l2meta"] = cur["l2_bufc_metadata_asize"]
|
v["l2meta"] = cur["l2_bufc_metadata_asize"]
|
||||||
v["l2pref%"] = 100 * v["l2pref"] / l2asize if l2asize > 0 else 0
|
v["l2pref%"] = 100 * v["l2pref"] / v["l2asize"]
|
||||||
v["l2mfu%"] = 100 * v["l2mfu"] / l2asize if l2asize > 0 else 0
|
v["l2mfu%"] = 100 * v["l2mfu"] / v["l2asize"]
|
||||||
v["l2mru%"] = 100 * v["l2mru"] / l2asize if l2asize > 0 else 0
|
v["l2mru%"] = 100 * v["l2mru"] / v["l2asize"]
|
||||||
v["l2data%"] = 100 * v["l2data"] / l2asize if l2asize > 0 else 0
|
v["l2data%"] = 100 * v["l2data"] / v["l2asize"]
|
||||||
v["l2meta%"] = 100 * v["l2meta"] / l2asize if l2asize > 0 else 0
|
v["l2meta%"] = 100 * v["l2meta"] / v["l2asize"]
|
||||||
|
|
||||||
v["grow"] = 0 if cur["arc_no_grow"] else 1
|
v["grow"] = 0 if cur["arc_no_grow"] else 1
|
||||||
v["need"] = cur["arc_need_free"]
|
v["need"] = cur["arc_need_free"]
|
||||||
|
@ -2545,14 +2545,12 @@ snprintf_blkptr_compact(char *blkbuf, size_t buflen, const blkptr_t *bp,
|
|||||||
|
|
||||||
blkbuf[0] = '\0';
|
blkbuf[0] = '\0';
|
||||||
|
|
||||||
for (i = 0; i < ndvas; i++) {
|
for (i = 0; i < ndvas; i++)
|
||||||
(void) snprintf(blkbuf + strlen(blkbuf),
|
(void) snprintf(blkbuf + strlen(blkbuf),
|
||||||
buflen - strlen(blkbuf), "%llu:%llx:%llx%s ",
|
buflen - strlen(blkbuf), "%llu:%llx:%llx ",
|
||||||
(u_longlong_t)DVA_GET_VDEV(&dva[i]),
|
(u_longlong_t)DVA_GET_VDEV(&dva[i]),
|
||||||
(u_longlong_t)DVA_GET_OFFSET(&dva[i]),
|
(u_longlong_t)DVA_GET_OFFSET(&dva[i]),
|
||||||
(u_longlong_t)DVA_GET_ASIZE(&dva[i]),
|
(u_longlong_t)DVA_GET_ASIZE(&dva[i]));
|
||||||
(DVA_GET_GANG(&dva[i]) ? "G" : ""));
|
|
||||||
}
|
|
||||||
|
|
||||||
if (BP_IS_HOLE(bp)) {
|
if (BP_IS_HOLE(bp)) {
|
||||||
(void) snprintf(blkbuf + strlen(blkbuf),
|
(void) snprintf(blkbuf + strlen(blkbuf),
|
||||||
@ -8983,7 +8981,7 @@ zdb_read_block(char *thing, spa_t *spa)
|
|||||||
|
|
||||||
DVA_SET_VDEV(&dva[0], vd->vdev_id);
|
DVA_SET_VDEV(&dva[0], vd->vdev_id);
|
||||||
DVA_SET_OFFSET(&dva[0], offset);
|
DVA_SET_OFFSET(&dva[0], offset);
|
||||||
DVA_SET_GANG(&dva[0], 0);
|
DVA_SET_GANG(&dva[0], !!(flags & ZDB_FLAG_GBH));
|
||||||
DVA_SET_ASIZE(&dva[0], vdev_psize_to_asize(vd, psize));
|
DVA_SET_ASIZE(&dva[0], vdev_psize_to_asize(vd, psize));
|
||||||
|
|
||||||
BP_SET_BIRTH(bp, TXG_INITIAL, TXG_INITIAL);
|
BP_SET_BIRTH(bp, TXG_INITIAL, TXG_INITIAL);
|
||||||
@ -8998,7 +8996,7 @@ zdb_read_block(char *thing, spa_t *spa)
|
|||||||
BP_SET_BYTEORDER(bp, ZFS_HOST_BYTEORDER);
|
BP_SET_BYTEORDER(bp, ZFS_HOST_BYTEORDER);
|
||||||
|
|
||||||
spa_config_enter(spa, SCL_STATE, FTAG, RW_READER);
|
spa_config_enter(spa, SCL_STATE, FTAG, RW_READER);
|
||||||
zio = zio_root(spa, NULL, NULL, ZIO_FLAG_CANFAIL);
|
zio = zio_root(spa, NULL, NULL, 0);
|
||||||
|
|
||||||
if (vd == vd->vdev_top) {
|
if (vd == vd->vdev_top) {
|
||||||
/*
|
/*
|
||||||
|
@ -37,7 +37,6 @@
|
|||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
#include <ctype.h>
|
#include <ctype.h>
|
||||||
#include <sys/debug.h>
|
#include <sys/debug.h>
|
||||||
#include <dirent.h>
|
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
#include <getopt.h>
|
#include <getopt.h>
|
||||||
#include <libgen.h>
|
#include <libgen.h>
|
||||||
@ -122,7 +121,6 @@ static int zfs_do_change_key(int argc, char **argv);
|
|||||||
static int zfs_do_project(int argc, char **argv);
|
static int zfs_do_project(int argc, char **argv);
|
||||||
static int zfs_do_version(int argc, char **argv);
|
static int zfs_do_version(int argc, char **argv);
|
||||||
static int zfs_do_redact(int argc, char **argv);
|
static int zfs_do_redact(int argc, char **argv);
|
||||||
static int zfs_do_rewrite(int argc, char **argv);
|
|
||||||
static int zfs_do_wait(int argc, char **argv);
|
static int zfs_do_wait(int argc, char **argv);
|
||||||
|
|
||||||
#ifdef __FreeBSD__
|
#ifdef __FreeBSD__
|
||||||
@ -195,7 +193,6 @@ typedef enum {
|
|||||||
HELP_CHANGE_KEY,
|
HELP_CHANGE_KEY,
|
||||||
HELP_VERSION,
|
HELP_VERSION,
|
||||||
HELP_REDACT,
|
HELP_REDACT,
|
||||||
HELP_REWRITE,
|
|
||||||
HELP_JAIL,
|
HELP_JAIL,
|
||||||
HELP_UNJAIL,
|
HELP_UNJAIL,
|
||||||
HELP_WAIT,
|
HELP_WAIT,
|
||||||
@ -230,7 +227,7 @@ static zfs_command_t command_table[] = {
|
|||||||
{ "promote", zfs_do_promote, HELP_PROMOTE },
|
{ "promote", zfs_do_promote, HELP_PROMOTE },
|
||||||
{ "rename", zfs_do_rename, HELP_RENAME },
|
{ "rename", zfs_do_rename, HELP_RENAME },
|
||||||
{ "bookmark", zfs_do_bookmark, HELP_BOOKMARK },
|
{ "bookmark", zfs_do_bookmark, HELP_BOOKMARK },
|
||||||
{ "diff", zfs_do_diff, HELP_DIFF },
|
{ "program", zfs_do_channel_program, HELP_CHANNEL_PROGRAM },
|
||||||
{ NULL },
|
{ NULL },
|
||||||
{ "list", zfs_do_list, HELP_LIST },
|
{ "list", zfs_do_list, HELP_LIST },
|
||||||
{ NULL },
|
{ NULL },
|
||||||
@ -252,31 +249,27 @@ static zfs_command_t command_table[] = {
|
|||||||
{ NULL },
|
{ NULL },
|
||||||
{ "send", zfs_do_send, HELP_SEND },
|
{ "send", zfs_do_send, HELP_SEND },
|
||||||
{ "receive", zfs_do_receive, HELP_RECEIVE },
|
{ "receive", zfs_do_receive, HELP_RECEIVE },
|
||||||
{ "redact", zfs_do_redact, HELP_REDACT },
|
|
||||||
{ NULL },
|
{ NULL },
|
||||||
{ "allow", zfs_do_allow, HELP_ALLOW },
|
{ "allow", zfs_do_allow, HELP_ALLOW },
|
||||||
|
{ NULL },
|
||||||
{ "unallow", zfs_do_unallow, HELP_UNALLOW },
|
{ "unallow", zfs_do_unallow, HELP_UNALLOW },
|
||||||
{ NULL },
|
{ NULL },
|
||||||
{ "hold", zfs_do_hold, HELP_HOLD },
|
{ "hold", zfs_do_hold, HELP_HOLD },
|
||||||
{ "holds", zfs_do_holds, HELP_HOLDS },
|
{ "holds", zfs_do_holds, HELP_HOLDS },
|
||||||
{ "release", zfs_do_release, HELP_RELEASE },
|
{ "release", zfs_do_release, HELP_RELEASE },
|
||||||
{ NULL },
|
{ "diff", zfs_do_diff, HELP_DIFF },
|
||||||
{ "load-key", zfs_do_load_key, HELP_LOAD_KEY },
|
{ "load-key", zfs_do_load_key, HELP_LOAD_KEY },
|
||||||
{ "unload-key", zfs_do_unload_key, HELP_UNLOAD_KEY },
|
{ "unload-key", zfs_do_unload_key, HELP_UNLOAD_KEY },
|
||||||
{ "change-key", zfs_do_change_key, HELP_CHANGE_KEY },
|
{ "change-key", zfs_do_change_key, HELP_CHANGE_KEY },
|
||||||
{ NULL },
|
{ "redact", zfs_do_redact, HELP_REDACT },
|
||||||
{ "program", zfs_do_channel_program, HELP_CHANNEL_PROGRAM },
|
|
||||||
{ "rewrite", zfs_do_rewrite, HELP_REWRITE },
|
|
||||||
{ "wait", zfs_do_wait, HELP_WAIT },
|
{ "wait", zfs_do_wait, HELP_WAIT },
|
||||||
|
|
||||||
#ifdef __FreeBSD__
|
#ifdef __FreeBSD__
|
||||||
{ NULL },
|
|
||||||
{ "jail", zfs_do_jail, HELP_JAIL },
|
{ "jail", zfs_do_jail, HELP_JAIL },
|
||||||
{ "unjail", zfs_do_unjail, HELP_UNJAIL },
|
{ "unjail", zfs_do_unjail, HELP_UNJAIL },
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef __linux__
|
#ifdef __linux__
|
||||||
{ NULL },
|
|
||||||
{ "zone", zfs_do_zone, HELP_ZONE },
|
{ "zone", zfs_do_zone, HELP_ZONE },
|
||||||
{ "unzone", zfs_do_unzone, HELP_UNZONE },
|
{ "unzone", zfs_do_unzone, HELP_UNZONE },
|
||||||
#endif
|
#endif
|
||||||
@ -439,9 +432,6 @@ get_usage(zfs_help_t idx)
|
|||||||
case HELP_REDACT:
|
case HELP_REDACT:
|
||||||
return (gettext("\tredact <snapshot> <bookmark> "
|
return (gettext("\tredact <snapshot> <bookmark> "
|
||||||
"<redaction_snapshot> ...\n"));
|
"<redaction_snapshot> ...\n"));
|
||||||
case HELP_REWRITE:
|
|
||||||
return (gettext("\trewrite [-rvx] [-o <offset>] [-l <length>] "
|
|
||||||
"<directory|file ...>\n"));
|
|
||||||
case HELP_JAIL:
|
case HELP_JAIL:
|
||||||
return (gettext("\tjail <jailid|jailname> <filesystem>\n"));
|
return (gettext("\tjail <jailid|jailname> <filesystem>\n"));
|
||||||
case HELP_UNJAIL:
|
case HELP_UNJAIL:
|
||||||
@ -2996,8 +2986,7 @@ us_type2str(unsigned field_type)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
userspace_cb(void *arg, const char *domain, uid_t rid, uint64_t space,
|
userspace_cb(void *arg, const char *domain, uid_t rid, uint64_t space)
|
||||||
uint64_t default_quota)
|
|
||||||
{
|
{
|
||||||
us_cbdata_t *cb = (us_cbdata_t *)arg;
|
us_cbdata_t *cb = (us_cbdata_t *)arg;
|
||||||
zfs_userquota_prop_t prop = cb->cb_prop;
|
zfs_userquota_prop_t prop = cb->cb_prop;
|
||||||
@ -3153,7 +3142,7 @@ userspace_cb(void *arg, const char *domain, uid_t rid, uint64_t space,
|
|||||||
prop == ZFS_PROP_PROJECTUSED) {
|
prop == ZFS_PROP_PROJECTUSED) {
|
||||||
propname = "used";
|
propname = "used";
|
||||||
if (!nvlist_exists(props, "quota"))
|
if (!nvlist_exists(props, "quota"))
|
||||||
(void) nvlist_add_uint64(props, "quota", default_quota);
|
(void) nvlist_add_uint64(props, "quota", 0);
|
||||||
} else if (prop == ZFS_PROP_USERQUOTA || prop == ZFS_PROP_GROUPQUOTA ||
|
} else if (prop == ZFS_PROP_USERQUOTA || prop == ZFS_PROP_GROUPQUOTA ||
|
||||||
prop == ZFS_PROP_PROJECTQUOTA) {
|
prop == ZFS_PROP_PROJECTQUOTA) {
|
||||||
propname = "quota";
|
propname = "quota";
|
||||||
@ -3162,10 +3151,8 @@ userspace_cb(void *arg, const char *domain, uid_t rid, uint64_t space,
|
|||||||
} else if (prop == ZFS_PROP_USEROBJUSED ||
|
} else if (prop == ZFS_PROP_USEROBJUSED ||
|
||||||
prop == ZFS_PROP_GROUPOBJUSED || prop == ZFS_PROP_PROJECTOBJUSED) {
|
prop == ZFS_PROP_GROUPOBJUSED || prop == ZFS_PROP_PROJECTOBJUSED) {
|
||||||
propname = "objused";
|
propname = "objused";
|
||||||
if (!nvlist_exists(props, "objquota")) {
|
if (!nvlist_exists(props, "objquota"))
|
||||||
(void) nvlist_add_uint64(props, "objquota",
|
(void) nvlist_add_uint64(props, "objquota", 0);
|
||||||
default_quota);
|
|
||||||
}
|
|
||||||
} else if (prop == ZFS_PROP_USEROBJQUOTA ||
|
} else if (prop == ZFS_PROP_USEROBJQUOTA ||
|
||||||
prop == ZFS_PROP_GROUPOBJQUOTA ||
|
prop == ZFS_PROP_GROUPOBJQUOTA ||
|
||||||
prop == ZFS_PROP_PROJECTOBJQUOTA) {
|
prop == ZFS_PROP_PROJECTOBJQUOTA) {
|
||||||
@ -4453,7 +4440,7 @@ zfs_do_rollback(int argc, char **argv)
|
|||||||
if (cb.cb_create > 0)
|
if (cb.cb_create > 0)
|
||||||
min_txg = cb.cb_create;
|
min_txg = cb.cb_create;
|
||||||
|
|
||||||
if ((ret = zfs_iter_snapshots_sorted_v2(zhp, 0, rollback_check, &cb,
|
if ((ret = zfs_iter_snapshots_v2(zhp, 0, rollback_check, &cb,
|
||||||
min_txg, 0)) != 0)
|
min_txg, 0)) != 0)
|
||||||
goto out;
|
goto out;
|
||||||
if ((ret = zfs_iter_bookmarks_v2(zhp, 0, rollback_check, &cb)) != 0)
|
if ((ret = zfs_iter_bookmarks_v2(zhp, 0, rollback_check, &cb)) != 0)
|
||||||
@ -9026,192 +9013,6 @@ zfs_do_project(int argc, char **argv)
|
|||||||
return (ret);
|
return (ret);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
|
||||||
zfs_rewrite_file(const char *path, boolean_t verbose, zfs_rewrite_args_t *args)
|
|
||||||
{
|
|
||||||
int fd, ret = 0;
|
|
||||||
|
|
||||||
fd = open(path, O_WRONLY);
|
|
||||||
if (fd < 0) {
|
|
||||||
ret = errno;
|
|
||||||
(void) fprintf(stderr, gettext("failed to open %s: %s\n"),
|
|
||||||
path, strerror(errno));
|
|
||||||
return (ret);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (ioctl(fd, ZFS_IOC_REWRITE, args) < 0) {
|
|
||||||
ret = errno;
|
|
||||||
(void) fprintf(stderr, gettext("failed to rewrite %s: %s\n"),
|
|
||||||
path, strerror(errno));
|
|
||||||
} else if (verbose) {
|
|
||||||
printf("%s\n", path);
|
|
||||||
}
|
|
||||||
|
|
||||||
close(fd);
|
|
||||||
return (ret);
|
|
||||||
}
|
|
||||||
|
|
||||||
static int
|
|
||||||
zfs_rewrite_dir(const char *path, boolean_t verbose, boolean_t xdev, dev_t dev,
|
|
||||||
zfs_rewrite_args_t *args, nvlist_t *dirs)
|
|
||||||
{
|
|
||||||
struct dirent *ent;
|
|
||||||
DIR *dir;
|
|
||||||
int ret = 0, err;
|
|
||||||
|
|
||||||
dir = opendir(path);
|
|
||||||
if (dir == NULL) {
|
|
||||||
if (errno == ENOENT)
|
|
||||||
return (0);
|
|
||||||
ret = errno;
|
|
||||||
(void) fprintf(stderr, gettext("failed to opendir %s: %s\n"),
|
|
||||||
path, strerror(errno));
|
|
||||||
return (ret);
|
|
||||||
}
|
|
||||||
|
|
||||||
size_t plen = strlen(path) + 1;
|
|
||||||
while ((ent = readdir(dir)) != NULL) {
|
|
||||||
char *fullname;
|
|
||||||
struct stat st;
|
|
||||||
|
|
||||||
if (ent->d_type != DT_REG && ent->d_type != DT_DIR)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
if (strcmp(ent->d_name, ".") == 0 ||
|
|
||||||
strcmp(ent->d_name, "..") == 0)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
if (plen + strlen(ent->d_name) >= PATH_MAX) {
|
|
||||||
(void) fprintf(stderr, gettext("path too long %s/%s\n"),
|
|
||||||
path, ent->d_name);
|
|
||||||
ret = ENAMETOOLONG;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (asprintf(&fullname, "%s/%s", path, ent->d_name) == -1) {
|
|
||||||
(void) fprintf(stderr,
|
|
||||||
gettext("failed to allocate memory\n"));
|
|
||||||
ret = ENOMEM;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (xdev) {
|
|
||||||
if (lstat(fullname, &st) < 0) {
|
|
||||||
ret = errno;
|
|
||||||
(void) fprintf(stderr,
|
|
||||||
gettext("failed to stat %s: %s\n"),
|
|
||||||
fullname, strerror(errno));
|
|
||||||
free(fullname);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
if (st.st_dev != dev) {
|
|
||||||
free(fullname);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (ent->d_type == DT_REG) {
|
|
||||||
err = zfs_rewrite_file(fullname, verbose, args);
|
|
||||||
if (err)
|
|
||||||
ret = err;
|
|
||||||
} else { /* DT_DIR */
|
|
||||||
fnvlist_add_uint64(dirs, fullname, dev);
|
|
||||||
}
|
|
||||||
|
|
||||||
free(fullname);
|
|
||||||
}
|
|
||||||
|
|
||||||
closedir(dir);
|
|
||||||
return (ret);
|
|
||||||
}
|
|
||||||
|
|
||||||
static int
|
|
||||||
zfs_rewrite_path(const char *path, boolean_t verbose, boolean_t recurse,
|
|
||||||
boolean_t xdev, zfs_rewrite_args_t *args, nvlist_t *dirs)
|
|
||||||
{
|
|
||||||
struct stat st;
|
|
||||||
int ret = 0;
|
|
||||||
|
|
||||||
if (lstat(path, &st) < 0) {
|
|
||||||
ret = errno;
|
|
||||||
(void) fprintf(stderr, gettext("failed to stat %s: %s\n"),
|
|
||||||
path, strerror(errno));
|
|
||||||
return (ret);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (S_ISREG(st.st_mode)) {
|
|
||||||
ret = zfs_rewrite_file(path, verbose, args);
|
|
||||||
} else if (S_ISDIR(st.st_mode) && recurse) {
|
|
||||||
ret = zfs_rewrite_dir(path, verbose, xdev, st.st_dev, args,
|
|
||||||
dirs);
|
|
||||||
}
|
|
||||||
return (ret);
|
|
||||||
}
|
|
||||||
|
|
||||||
static int
|
|
||||||
zfs_do_rewrite(int argc, char **argv)
|
|
||||||
{
|
|
||||||
int ret = 0, err, c;
|
|
||||||
boolean_t recurse = B_FALSE, verbose = B_FALSE, xdev = B_FALSE;
|
|
||||||
|
|
||||||
if (argc < 2)
|
|
||||||
usage(B_FALSE);
|
|
||||||
|
|
||||||
zfs_rewrite_args_t args;
|
|
||||||
memset(&args, 0, sizeof (args));
|
|
||||||
|
|
||||||
while ((c = getopt(argc, argv, "l:o:rvx")) != -1) {
|
|
||||||
switch (c) {
|
|
||||||
case 'l':
|
|
||||||
args.len = strtoll(optarg, NULL, 0);
|
|
||||||
break;
|
|
||||||
case 'o':
|
|
||||||
args.off = strtoll(optarg, NULL, 0);
|
|
||||||
break;
|
|
||||||
case 'r':
|
|
||||||
recurse = B_TRUE;
|
|
||||||
break;
|
|
||||||
case 'v':
|
|
||||||
verbose = B_TRUE;
|
|
||||||
break;
|
|
||||||
case 'x':
|
|
||||||
xdev = B_TRUE;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
(void) fprintf(stderr, gettext("invalid option '%c'\n"),
|
|
||||||
optopt);
|
|
||||||
usage(B_FALSE);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
argv += optind;
|
|
||||||
argc -= optind;
|
|
||||||
if (argc == 0) {
|
|
||||||
(void) fprintf(stderr,
|
|
||||||
gettext("missing file or directory target(s)\n"));
|
|
||||||
usage(B_FALSE);
|
|
||||||
}
|
|
||||||
|
|
||||||
nvlist_t *dirs = fnvlist_alloc();
|
|
||||||
for (int i = 0; i < argc; i++) {
|
|
||||||
err = zfs_rewrite_path(argv[i], verbose, recurse, xdev, &args,
|
|
||||||
dirs);
|
|
||||||
if (err)
|
|
||||||
ret = err;
|
|
||||||
}
|
|
||||||
nvpair_t *dir;
|
|
||||||
while ((dir = nvlist_next_nvpair(dirs, NULL)) != NULL) {
|
|
||||||
err = zfs_rewrite_dir(nvpair_name(dir), verbose, xdev,
|
|
||||||
fnvpair_value_uint64(dir), &args, dirs);
|
|
||||||
if (err)
|
|
||||||
ret = err;
|
|
||||||
fnvlist_remove_nvpair(dirs, dir);
|
|
||||||
}
|
|
||||||
fnvlist_free(dirs);
|
|
||||||
|
|
||||||
return (ret);
|
|
||||||
}
|
|
||||||
|
|
||||||
static int
|
static int
|
||||||
zfs_do_wait(int argc, char **argv)
|
zfs_do_wait(int argc, char **argv)
|
||||||
{
|
{
|
||||||
|
@ -435,30 +435,26 @@ print_data_handler(int id, const char *pool, zinject_record_t *record,
|
|||||||
|
|
||||||
if (*count == 0) {
|
if (*count == 0) {
|
||||||
(void) printf("%3s %-15s %-6s %-6s %-8s %3s %-4s "
|
(void) printf("%3s %-15s %-6s %-6s %-8s %3s %-4s "
|
||||||
"%-15s %-6s %-15s\n", "ID", "POOL", "OBJSET", "OBJECT",
|
"%-15s\n", "ID", "POOL", "OBJSET", "OBJECT", "TYPE",
|
||||||
"TYPE", "LVL", "DVAs", "RANGE", "MATCH", "INJECT");
|
"LVL", "DVAs", "RANGE");
|
||||||
(void) printf("--- --------------- ------ "
|
(void) printf("--- --------------- ------ "
|
||||||
"------ -------- --- ---- --------------- "
|
"------ -------- --- ---- ---------------\n");
|
||||||
"------ ------\n");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
*count += 1;
|
*count += 1;
|
||||||
|
|
||||||
char rangebuf[32];
|
(void) printf("%3d %-15s %-6llu %-6llu %-8s %-3d 0x%02x ",
|
||||||
if (record->zi_start == 0 && record->zi_end == -1ULL)
|
id, pool, (u_longlong_t)record->zi_objset,
|
||||||
snprintf(rangebuf, sizeof (rangebuf), "all");
|
|
||||||
else
|
|
||||||
snprintf(rangebuf, sizeof (rangebuf), "[%llu, %llu]",
|
|
||||||
(u_longlong_t)record->zi_start,
|
|
||||||
(u_longlong_t)record->zi_end);
|
|
||||||
|
|
||||||
|
|
||||||
(void) printf("%3d %-15s %-6llu %-6llu %-8s %-3d 0x%02x %-15s "
|
|
||||||
"%6" PRIu64 " %6" PRIu64 "\n", id, pool,
|
|
||||||
(u_longlong_t)record->zi_objset,
|
|
||||||
(u_longlong_t)record->zi_object, type_to_name(record->zi_type),
|
(u_longlong_t)record->zi_object, type_to_name(record->zi_type),
|
||||||
record->zi_level, record->zi_dvas, rangebuf,
|
record->zi_level, record->zi_dvas);
|
||||||
record->zi_match_count, record->zi_inject_count);
|
|
||||||
|
|
||||||
|
if (record->zi_start == 0 &&
|
||||||
|
record->zi_end == -1ULL)
|
||||||
|
(void) printf("all\n");
|
||||||
|
else
|
||||||
|
(void) printf("[%llu, %llu]\n", (u_longlong_t)record->zi_start,
|
||||||
|
(u_longlong_t)record->zi_end);
|
||||||
|
|
||||||
return (0);
|
return (0);
|
||||||
}
|
}
|
||||||
@ -476,14 +472,11 @@ print_device_handler(int id, const char *pool, zinject_record_t *record,
|
|||||||
return (0);
|
return (0);
|
||||||
|
|
||||||
if (*count == 0) {
|
if (*count == 0) {
|
||||||
(void) printf("%3s %-15s %-16s %-5s %-10s %-9s "
|
(void) printf("%3s %-15s %-16s %-5s %-10s %-9s\n",
|
||||||
"%-6s %-6s\n",
|
"ID", "POOL", "GUID", "TYPE", "ERROR", "FREQ");
|
||||||
"ID", "POOL", "GUID", "TYPE", "ERROR", "FREQ",
|
|
||||||
"MATCH", "INJECT");
|
|
||||||
(void) printf(
|
(void) printf(
|
||||||
"--- --------------- ---------------- "
|
"--- --------------- ---------------- "
|
||||||
"----- ---------- --------- "
|
"----- ---------- ---------\n");
|
||||||
"------ ------\n");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
*count += 1;
|
*count += 1;
|
||||||
@ -491,11 +484,9 @@ print_device_handler(int id, const char *pool, zinject_record_t *record,
|
|||||||
double freq = record->zi_freq == 0 ? 100.0f :
|
double freq = record->zi_freq == 0 ? 100.0f :
|
||||||
(((double)record->zi_freq) / ZI_PERCENTAGE_MAX) * 100.0f;
|
(((double)record->zi_freq) / ZI_PERCENTAGE_MAX) * 100.0f;
|
||||||
|
|
||||||
(void) printf("%3d %-15s %llx %-5s %-10s %8.4f%% "
|
(void) printf("%3d %-15s %llx %-5s %-10s %8.4f%%\n", id, pool,
|
||||||
"%6" PRIu64 " %6" PRIu64 "\n", id, pool,
|
(u_longlong_t)record->zi_guid, iotype_to_str(record->zi_iotype),
|
||||||
(u_longlong_t)record->zi_guid,
|
err_to_str(record->zi_error), freq);
|
||||||
iotype_to_str(record->zi_iotype), err_to_str(record->zi_error),
|
|
||||||
freq, record->zi_match_count, record->zi_inject_count);
|
|
||||||
|
|
||||||
return (0);
|
return (0);
|
||||||
}
|
}
|
||||||
@ -513,26 +504,18 @@ print_delay_handler(int id, const char *pool, zinject_record_t *record,
|
|||||||
return (0);
|
return (0);
|
||||||
|
|
||||||
if (*count == 0) {
|
if (*count == 0) {
|
||||||
(void) printf("%3s %-15s %-16s %-10s %-5s %-9s "
|
(void) printf("%3s %-15s %-15s %-15s %s\n",
|
||||||
"%-6s %-6s\n",
|
"ID", "POOL", "DELAY (ms)", "LANES", "GUID");
|
||||||
"ID", "POOL", "GUID", "DELAY (ms)", "LANES", "FREQ",
|
(void) printf("--- --------------- --------------- "
|
||||||
"MATCH", "INJECT");
|
"--------------- ----------------\n");
|
||||||
(void) printf("--- --------------- ---------------- "
|
|
||||||
"---------- ----- --------- "
|
|
||||||
"------ ------\n");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
*count += 1;
|
*count += 1;
|
||||||
|
|
||||||
double freq = record->zi_freq == 0 ? 100.0f :
|
(void) printf("%3d %-15s %-15llu %-15llu %llx\n", id, pool,
|
||||||
(((double)record->zi_freq) / ZI_PERCENTAGE_MAX) * 100.0f;
|
|
||||||
|
|
||||||
(void) printf("%3d %-15s %llx %10llu %5llu %8.4f%% "
|
|
||||||
"%6" PRIu64 " %6" PRIu64 "\n", id, pool,
|
|
||||||
(u_longlong_t)record->zi_guid,
|
|
||||||
(u_longlong_t)NSEC2MSEC(record->zi_timer),
|
(u_longlong_t)NSEC2MSEC(record->zi_timer),
|
||||||
(u_longlong_t)record->zi_nlanes,
|
(u_longlong_t)record->zi_nlanes,
|
||||||
freq, record->zi_match_count, record->zi_inject_count);
|
(u_longlong_t)record->zi_guid);
|
||||||
|
|
||||||
return (0);
|
return (0);
|
||||||
}
|
}
|
||||||
|
@ -521,11 +521,11 @@ get_usage(zpool_help_t idx)
|
|||||||
return (gettext("\ttrim [-dw] [-r <rate>] [-c | -s] <pool> "
|
return (gettext("\ttrim [-dw] [-r <rate>] [-c | -s] <pool> "
|
||||||
"[<device> ...]\n"));
|
"[<device> ...]\n"));
|
||||||
case HELP_STATUS:
|
case HELP_STATUS:
|
||||||
return (gettext("\tstatus [-DdegiLPpstvx] "
|
return (gettext("\tstatus [--power] [-j [--json-int, "
|
||||||
"[-c script1[,script2,...]] ...\n"
|
"--json-flat-vdevs, ...\n"
|
||||||
"\t [-j|--json [--json-flat-vdevs] [--json-int] "
|
"\t --json-pool-key-guid]] [-c [script1,script2,...]] "
|
||||||
"[--json-pool-key-guid]] ...\n"
|
"[-dDegiLpPstvx] ...\n"
|
||||||
"\t [-T d|u] [--power] [pool] [interval [count]]\n"));
|
"\t [-T d|u] [pool] [interval [count]]\n"));
|
||||||
case HELP_UPGRADE:
|
case HELP_UPGRADE:
|
||||||
return (gettext("\tupgrade\n"
|
return (gettext("\tupgrade\n"
|
||||||
"\tupgrade -v\n"
|
"\tupgrade -v\n"
|
||||||
@ -10432,9 +10432,10 @@ print_status_reason(zpool_handle_t *zhp, status_cbdata_t *cbp,
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case ZPOOL_STATUS_REMOVED_DEV:
|
case ZPOOL_STATUS_REMOVED_DEV:
|
||||||
snprintf(status, ST_SIZE, gettext("One or more devices have "
|
snprintf(status, ST_SIZE, gettext("One or more devices has "
|
||||||
"been removed.\n\tSufficient replicas exist for the pool "
|
"been removed by the administrator.\n\tSufficient "
|
||||||
"to continue functioning in a\n\tdegraded state.\n"));
|
"replicas exist for the pool to continue functioning in "
|
||||||
|
"a\n\tdegraded state.\n"));
|
||||||
snprintf(action, AC_SIZE, gettext("Online the device "
|
snprintf(action, AC_SIZE, gettext("Online the device "
|
||||||
"using zpool online' or replace the device with\n\t'zpool "
|
"using zpool online' or replace the device with\n\t'zpool "
|
||||||
"replace'.\n"));
|
"replace'.\n"));
|
||||||
@ -10979,30 +10980,28 @@ status_callback(zpool_handle_t *zhp, void *data)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* zpool status [-dDegiLpPstvx] [-c [script1,script2,...]] ...
|
* zpool status [-c [script1,script2,...]] [-dDegiLpPstvx] [--power] ...
|
||||||
* [-j|--json [--json-flat-vdevs] [--json-int] ...
|
* [-T d|u] [pool] [interval [count]]
|
||||||
* [--json-pool-key-guid]] [--power] [-T d|u] ...
|
|
||||||
* [pool] [interval [count]]
|
|
||||||
*
|
*
|
||||||
* -c CMD For each vdev, run command CMD
|
* -c CMD For each vdev, run command CMD
|
||||||
* -D Display dedup status (undocumented)
|
|
||||||
* -d Display Direct I/O write verify errors
|
* -d Display Direct I/O write verify errors
|
||||||
|
* -D Display dedup status (undocumented)
|
||||||
* -e Display only unhealthy vdevs
|
* -e Display only unhealthy vdevs
|
||||||
* -g Display guid for individual vdev name.
|
* -g Display guid for individual vdev name.
|
||||||
* -i Display vdev initialization status.
|
* -i Display vdev initialization status.
|
||||||
* -j [...] Display output in JSON format
|
|
||||||
* --json-flat-vdevs Display vdevs in flat hierarchy
|
|
||||||
* --json-int Display numbers in integer format instead of string
|
|
||||||
* --json-pool-key-guid Use pool GUID as key for pool objects
|
|
||||||
* -L Follow links when resolving vdev path name.
|
* -L Follow links when resolving vdev path name.
|
||||||
* -P Display full path for vdev name.
|
|
||||||
* -p Display values in parsable (exact) format.
|
* -p Display values in parsable (exact) format.
|
||||||
* --power Display vdev enclosure slot power status
|
* -P Display full path for vdev name.
|
||||||
* -s Display slow IOs column.
|
* -s Display slow IOs column.
|
||||||
* -T Display a timestamp in date(1) or Unix format
|
|
||||||
* -t Display vdev TRIM status.
|
* -t Display vdev TRIM status.
|
||||||
|
* -T Display a timestamp in date(1) or Unix format
|
||||||
* -v Display complete error logs
|
* -v Display complete error logs
|
||||||
* -x Display only pools with potential problems
|
* -x Display only pools with potential problems
|
||||||
|
* -j Display output in JSON format
|
||||||
|
* --power Display vdev enclosure slot power status
|
||||||
|
* --json-int Display numbers in inteeger format instead of string
|
||||||
|
* --json-flat-vdevs Display vdevs in flat hierarchy
|
||||||
|
* --json-pool-key-guid Use pool GUID as key for pool objects
|
||||||
*
|
*
|
||||||
* Describes the health status of all pools or some subset.
|
* Describes the health status of all pools or some subset.
|
||||||
*/
|
*/
|
||||||
@ -12069,11 +12068,6 @@ zpool_do_events_nvprint(nvlist_t *nvl, int depth)
|
|||||||
zfs_valstr_zio_stage(i32, flagstr,
|
zfs_valstr_zio_stage(i32, flagstr,
|
||||||
sizeof (flagstr));
|
sizeof (flagstr));
|
||||||
printf(gettext("0x%x [%s]"), i32, flagstr);
|
printf(gettext("0x%x [%s]"), i32, flagstr);
|
||||||
} else if (strcmp(name,
|
|
||||||
FM_EREPORT_PAYLOAD_ZFS_ZIO_TYPE) == 0) {
|
|
||||||
zfs_valstr_zio_type(i32, flagstr,
|
|
||||||
sizeof (flagstr));
|
|
||||||
printf(gettext("0x%x [%s]"), i32, flagstr);
|
|
||||||
} else if (strcmp(name,
|
} else if (strcmp(name,
|
||||||
FM_EREPORT_PAYLOAD_ZFS_ZIO_PRIORITY) == 0) {
|
FM_EREPORT_PAYLOAD_ZFS_ZIO_PRIORITY) == 0) {
|
||||||
zfs_valstr_zio_priority(i32, flagstr,
|
zfs_valstr_zio_priority(i32, flagstr,
|
||||||
|
41
cmd/ztest.c
41
cmd/ztest.c
@ -1816,7 +1816,7 @@ ztest_zd_fini(ztest_ds_t *zd)
|
|||||||
(ztest_random(10) == 0 ? DMU_TX_NOWAIT : DMU_TX_WAIT)
|
(ztest_random(10) == 0 ? DMU_TX_NOWAIT : DMU_TX_WAIT)
|
||||||
|
|
||||||
static uint64_t
|
static uint64_t
|
||||||
ztest_tx_assign(dmu_tx_t *tx, dmu_tx_flag_t txg_how, const char *tag)
|
ztest_tx_assign(dmu_tx_t *tx, uint64_t txg_how, const char *tag)
|
||||||
{
|
{
|
||||||
uint64_t txg;
|
uint64_t txg;
|
||||||
int error;
|
int error;
|
||||||
@ -1829,10 +1829,9 @@ ztest_tx_assign(dmu_tx_t *tx, dmu_tx_flag_t txg_how, const char *tag)
|
|||||||
if (error == ERESTART) {
|
if (error == ERESTART) {
|
||||||
ASSERT3U(txg_how, ==, DMU_TX_NOWAIT);
|
ASSERT3U(txg_how, ==, DMU_TX_NOWAIT);
|
||||||
dmu_tx_wait(tx);
|
dmu_tx_wait(tx);
|
||||||
} else if (error == ENOSPC) {
|
|
||||||
ztest_record_enospc(tag);
|
|
||||||
} else {
|
} else {
|
||||||
ASSERT(error == EDQUOT || error == EIO);
|
ASSERT3U(error, ==, ENOSPC);
|
||||||
|
ztest_record_enospc(tag);
|
||||||
}
|
}
|
||||||
dmu_tx_abort(tx);
|
dmu_tx_abort(tx);
|
||||||
return (0);
|
return (0);
|
||||||
@ -1994,8 +1993,7 @@ ztest_log_write(ztest_ds_t *zd, dmu_tx_t *tx, lr_write_t *lr)
|
|||||||
|
|
||||||
if (write_state == WR_COPIED &&
|
if (write_state == WR_COPIED &&
|
||||||
dmu_read(zd->zd_os, lr->lr_foid, lr->lr_offset, lr->lr_length,
|
dmu_read(zd->zd_os, lr->lr_foid, lr->lr_offset, lr->lr_length,
|
||||||
((lr_write_t *)&itx->itx_lr) + 1, DMU_READ_NO_PREFETCH |
|
((lr_write_t *)&itx->itx_lr) + 1, DMU_READ_NO_PREFETCH) != 0) {
|
||||||
DMU_KEEP_CACHING) != 0) {
|
|
||||||
zil_itx_destroy(itx);
|
zil_itx_destroy(itx);
|
||||||
itx = zil_itx_create(TX_WRITE, sizeof (*lr));
|
itx = zil_itx_create(TX_WRITE, sizeof (*lr));
|
||||||
write_state = WR_NEED_COPY;
|
write_state = WR_NEED_COPY;
|
||||||
@ -2267,19 +2265,19 @@ ztest_replay_write(void *arg1, void *arg2, boolean_t byteswap)
|
|||||||
ASSERT(doi.doi_data_block_size);
|
ASSERT(doi.doi_data_block_size);
|
||||||
ASSERT0(offset % doi.doi_data_block_size);
|
ASSERT0(offset % doi.doi_data_block_size);
|
||||||
if (ztest_random(4) != 0) {
|
if (ztest_random(4) != 0) {
|
||||||
dmu_flags_t flags = ztest_random(2) ?
|
int prefetch = ztest_random(2) ?
|
||||||
DMU_READ_PREFETCH : DMU_READ_NO_PREFETCH;
|
DMU_READ_PREFETCH : DMU_READ_NO_PREFETCH;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* We will randomly set when to do O_DIRECT on a read.
|
* We will randomly set when to do O_DIRECT on a read.
|
||||||
*/
|
*/
|
||||||
if (ztest_random(4) == 0)
|
if (ztest_random(4) == 0)
|
||||||
flags |= DMU_DIRECTIO;
|
prefetch |= DMU_DIRECTIO;
|
||||||
|
|
||||||
ztest_block_tag_t rbt;
|
ztest_block_tag_t rbt;
|
||||||
|
|
||||||
VERIFY(dmu_read(os, lr->lr_foid, offset,
|
VERIFY(dmu_read(os, lr->lr_foid, offset,
|
||||||
sizeof (rbt), &rbt, flags) == 0);
|
sizeof (rbt), &rbt, prefetch) == 0);
|
||||||
if (rbt.bt_magic == BT_MAGIC) {
|
if (rbt.bt_magic == BT_MAGIC) {
|
||||||
ztest_bt_verify(&rbt, os, lr->lr_foid, 0,
|
ztest_bt_verify(&rbt, os, lr->lr_foid, 0,
|
||||||
offset, gen, txg, crtxg);
|
offset, gen, txg, crtxg);
|
||||||
@ -2310,7 +2308,7 @@ ztest_replay_write(void *arg1, void *arg2, boolean_t byteswap)
|
|||||||
dmu_write(os, lr->lr_foid, offset, length, data, tx);
|
dmu_write(os, lr->lr_foid, offset, length, data, tx);
|
||||||
} else {
|
} else {
|
||||||
memcpy(abuf->b_data, data, length);
|
memcpy(abuf->b_data, data, length);
|
||||||
VERIFY0(dmu_assign_arcbuf_by_dbuf(db, offset, abuf, tx, 0));
|
VERIFY0(dmu_assign_arcbuf_by_dbuf(db, offset, abuf, tx));
|
||||||
}
|
}
|
||||||
|
|
||||||
(void) ztest_log_write(zd, tx, lr);
|
(void) ztest_log_write(zd, tx, lr);
|
||||||
@ -2535,7 +2533,7 @@ ztest_get_data(void *arg, uint64_t arg2, lr_write_t *lr, char *buf,
|
|||||||
object, offset, size, ZTRL_READER);
|
object, offset, size, ZTRL_READER);
|
||||||
|
|
||||||
error = dmu_read(os, object, offset, size, buf,
|
error = dmu_read(os, object, offset, size, buf,
|
||||||
DMU_READ_NO_PREFETCH | DMU_KEEP_CACHING);
|
DMU_READ_NO_PREFETCH);
|
||||||
ASSERT0(error);
|
ASSERT0(error);
|
||||||
} else {
|
} else {
|
||||||
ASSERT3P(zio, !=, NULL);
|
ASSERT3P(zio, !=, NULL);
|
||||||
@ -2551,6 +2549,7 @@ ztest_get_data(void *arg, uint64_t arg2, lr_write_t *lr, char *buf,
|
|||||||
object, offset, size, ZTRL_READER);
|
object, offset, size, ZTRL_READER);
|
||||||
|
|
||||||
error = dmu_buf_hold_noread(os, object, offset, zgd, &db);
|
error = dmu_buf_hold_noread(os, object, offset, zgd, &db);
|
||||||
|
|
||||||
if (error == 0) {
|
if (error == 0) {
|
||||||
blkptr_t *bp = &lr->lr_blkptr;
|
blkptr_t *bp = &lr->lr_blkptr;
|
||||||
|
|
||||||
@ -2827,7 +2826,7 @@ ztest_io(ztest_ds_t *zd, uint64_t object, uint64_t offset)
|
|||||||
enum ztest_io_type io_type;
|
enum ztest_io_type io_type;
|
||||||
uint64_t blocksize;
|
uint64_t blocksize;
|
||||||
void *data;
|
void *data;
|
||||||
dmu_flags_t dmu_read_flags = DMU_READ_NO_PREFETCH;
|
uint32_t dmu_read_flags = DMU_READ_NO_PREFETCH;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* We will randomly set when to do O_DIRECT on a read.
|
* We will randomly set when to do O_DIRECT on a read.
|
||||||
@ -4917,7 +4916,7 @@ ztest_dsl_dataset_promote_busy(ztest_ds_t *zd, uint64_t id)
|
|||||||
fatal(B_FALSE, "dmu_take_snapshot(%s) = %d", snap1name, error);
|
fatal(B_FALSE, "dmu_take_snapshot(%s) = %d", snap1name, error);
|
||||||
}
|
}
|
||||||
|
|
||||||
error = dsl_dataset_clone(clone1name, snap1name);
|
error = dmu_objset_clone(clone1name, snap1name);
|
||||||
if (error) {
|
if (error) {
|
||||||
if (error == ENOSPC) {
|
if (error == ENOSPC) {
|
||||||
ztest_record_enospc(FTAG);
|
ztest_record_enospc(FTAG);
|
||||||
@ -4944,7 +4943,7 @@ ztest_dsl_dataset_promote_busy(ztest_ds_t *zd, uint64_t id)
|
|||||||
fatal(B_FALSE, "dmu_open_snapshot(%s) = %d", snap3name, error);
|
fatal(B_FALSE, "dmu_open_snapshot(%s) = %d", snap3name, error);
|
||||||
}
|
}
|
||||||
|
|
||||||
error = dsl_dataset_clone(clone2name, snap3name);
|
error = dmu_objset_clone(clone2name, snap3name);
|
||||||
if (error) {
|
if (error) {
|
||||||
if (error == ENOSPC) {
|
if (error == ENOSPC) {
|
||||||
ztest_record_enospc(FTAG);
|
ztest_record_enospc(FTAG);
|
||||||
@ -5066,7 +5065,7 @@ ztest_dmu_read_write(ztest_ds_t *zd, uint64_t id)
|
|||||||
uint64_t stride = 123456789ULL;
|
uint64_t stride = 123456789ULL;
|
||||||
uint64_t width = 40;
|
uint64_t width = 40;
|
||||||
int free_percent = 5;
|
int free_percent = 5;
|
||||||
dmu_flags_t dmu_read_flags = DMU_READ_PREFETCH;
|
uint32_t dmu_read_flags = DMU_READ_PREFETCH;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* We will randomly set when to do O_DIRECT on a read.
|
* We will randomly set when to do O_DIRECT on a read.
|
||||||
@ -5542,13 +5541,13 @@ ztest_dmu_read_write_zcopy(ztest_ds_t *zd, uint64_t id)
|
|||||||
}
|
}
|
||||||
if (i != 5 || chunksize < (SPA_MINBLOCKSIZE * 2)) {
|
if (i != 5 || chunksize < (SPA_MINBLOCKSIZE * 2)) {
|
||||||
VERIFY0(dmu_assign_arcbuf_by_dbuf(bonus_db,
|
VERIFY0(dmu_assign_arcbuf_by_dbuf(bonus_db,
|
||||||
off, bigbuf_arcbufs[j], tx, 0));
|
off, bigbuf_arcbufs[j], tx));
|
||||||
} else {
|
} else {
|
||||||
VERIFY0(dmu_assign_arcbuf_by_dbuf(bonus_db,
|
VERIFY0(dmu_assign_arcbuf_by_dbuf(bonus_db,
|
||||||
off, bigbuf_arcbufs[2 * j], tx, 0));
|
off, bigbuf_arcbufs[2 * j], tx));
|
||||||
VERIFY0(dmu_assign_arcbuf_by_dbuf(bonus_db,
|
VERIFY0(dmu_assign_arcbuf_by_dbuf(bonus_db,
|
||||||
off + chunksize / 2,
|
off + chunksize / 2,
|
||||||
bigbuf_arcbufs[2 * j + 1], tx, 0));
|
bigbuf_arcbufs[2 * j + 1], tx));
|
||||||
}
|
}
|
||||||
if (i == 1) {
|
if (i == 1) {
|
||||||
dmu_buf_rele(dbt, FTAG);
|
dmu_buf_rele(dbt, FTAG);
|
||||||
@ -6335,13 +6334,13 @@ ztest_dmu_snapshot_hold(ztest_ds_t *zd, uint64_t id)
|
|||||||
fatal(B_FALSE, "dmu_objset_snapshot(%s) = %d", fullname, error);
|
fatal(B_FALSE, "dmu_objset_snapshot(%s) = %d", fullname, error);
|
||||||
}
|
}
|
||||||
|
|
||||||
error = dsl_dataset_clone(clonename, fullname);
|
error = dmu_objset_clone(clonename, fullname);
|
||||||
if (error) {
|
if (error) {
|
||||||
if (error == ENOSPC) {
|
if (error == ENOSPC) {
|
||||||
ztest_record_enospc("dsl_dataset_clone");
|
ztest_record_enospc("dmu_objset_clone");
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
fatal(B_FALSE, "dsl_dataset_clone(%s) = %d", clonename, error);
|
fatal(B_FALSE, "dmu_objset_clone(%s) = %d", clonename, error);
|
||||||
}
|
}
|
||||||
|
|
||||||
error = dsl_destroy_snapshot(fullname, B_TRUE);
|
error = dsl_destroy_snapshot(fullname, B_TRUE);
|
||||||
|
@ -10,7 +10,8 @@ AM_CPPFLAGS = \
|
|||||||
-I$(top_srcdir)/include \
|
-I$(top_srcdir)/include \
|
||||||
-I$(top_srcdir)/module/icp/include \
|
-I$(top_srcdir)/module/icp/include \
|
||||||
-I$(top_srcdir)/lib/libspl/include \
|
-I$(top_srcdir)/lib/libspl/include \
|
||||||
-I$(top_srcdir)/lib/libspl/include/os/@ac_system_l@
|
-I$(top_srcdir)/lib/libspl/include/os/@ac_system_l@ \
|
||||||
|
-I$(top_srcdir)/lib/libzpool/include
|
||||||
|
|
||||||
AM_LIBTOOLFLAGS = --silent
|
AM_LIBTOOLFLAGS = --silent
|
||||||
|
|
||||||
|
@ -2,22 +2,6 @@ dnl #
|
|||||||
dnl # Supported mkdir() interfaces checked newest to oldest.
|
dnl # Supported mkdir() interfaces checked newest to oldest.
|
||||||
dnl #
|
dnl #
|
||||||
AC_DEFUN([ZFS_AC_KERNEL_SRC_MKDIR], [
|
AC_DEFUN([ZFS_AC_KERNEL_SRC_MKDIR], [
|
||||||
dnl #
|
|
||||||
dnl # 6.15 API change
|
|
||||||
dnl # mkdir() returns struct dentry *
|
|
||||||
dnl #
|
|
||||||
ZFS_LINUX_TEST_SRC([mkdir_return_dentry], [
|
|
||||||
#include <linux/fs.h>
|
|
||||||
|
|
||||||
static struct dentry *mkdir(struct mnt_idmap *idmap,
|
|
||||||
struct inode *inode, struct dentry *dentry,
|
|
||||||
umode_t umode) { return dentry; }
|
|
||||||
static const struct inode_operations
|
|
||||||
iops __attribute__ ((unused)) = {
|
|
||||||
.mkdir = mkdir,
|
|
||||||
};
|
|
||||||
],[])
|
|
||||||
|
|
||||||
dnl #
|
dnl #
|
||||||
dnl # 6.3 API change
|
dnl # 6.3 API change
|
||||||
dnl # mkdir() takes struct mnt_idmap * as the first arg
|
dnl # mkdir() takes struct mnt_idmap * as the first arg
|
||||||
@ -75,40 +59,29 @@ AC_DEFUN([ZFS_AC_KERNEL_SRC_MKDIR], [
|
|||||||
|
|
||||||
AC_DEFUN([ZFS_AC_KERNEL_MKDIR], [
|
AC_DEFUN([ZFS_AC_KERNEL_MKDIR], [
|
||||||
dnl #
|
dnl #
|
||||||
dnl # 6.15 API change
|
dnl # 6.3 API change
|
||||||
dnl # mkdir() returns struct dentry *
|
dnl # mkdir() takes struct mnt_idmap * as the first arg
|
||||||
dnl #
|
dnl #
|
||||||
AC_MSG_CHECKING([whether iops->mkdir() returns struct dentry*])
|
AC_MSG_CHECKING([whether iops->mkdir() takes struct mnt_idmap*])
|
||||||
ZFS_LINUX_TEST_RESULT([mkdir_return_dentry], [
|
ZFS_LINUX_TEST_RESULT([mkdir_mnt_idmap], [
|
||||||
AC_MSG_RESULT(yes)
|
AC_MSG_RESULT(yes)
|
||||||
AC_DEFINE(HAVE_IOPS_MKDIR_DENTRY, 1,
|
AC_DEFINE(HAVE_IOPS_MKDIR_IDMAP, 1,
|
||||||
[iops->mkdir() returns struct dentry*])
|
[iops->mkdir() takes struct mnt_idmap*])
|
||||||
],[
|
],[
|
||||||
|
AC_MSG_RESULT(no)
|
||||||
|
|
||||||
dnl #
|
dnl #
|
||||||
dnl # 6.3 API change
|
dnl # 5.12 API change
|
||||||
dnl # mkdir() takes struct mnt_idmap * as the first arg
|
dnl # The struct user_namespace arg was added as the first argument to
|
||||||
|
dnl # mkdir() of the iops structure.
|
||||||
dnl #
|
dnl #
|
||||||
AC_MSG_CHECKING([whether iops->mkdir() takes struct mnt_idmap*])
|
AC_MSG_CHECKING([whether iops->mkdir() takes struct user_namespace*])
|
||||||
ZFS_LINUX_TEST_RESULT([mkdir_mnt_idmap], [
|
ZFS_LINUX_TEST_RESULT([mkdir_user_namespace], [
|
||||||
AC_MSG_RESULT(yes)
|
AC_MSG_RESULT(yes)
|
||||||
AC_DEFINE(HAVE_IOPS_MKDIR_IDMAP, 1,
|
AC_DEFINE(HAVE_IOPS_MKDIR_USERNS, 1,
|
||||||
[iops->mkdir() takes struct mnt_idmap*])
|
[iops->mkdir() takes struct user_namespace*])
|
||||||
],[
|
],[
|
||||||
AC_MSG_RESULT(no)
|
AC_MSG_RESULT(no)
|
||||||
|
|
||||||
dnl #
|
|
||||||
dnl # 5.12 API change
|
|
||||||
dnl # The struct user_namespace arg was added as the first argument to
|
|
||||||
dnl # mkdir() of the iops structure.
|
|
||||||
dnl #
|
|
||||||
AC_MSG_CHECKING([whether iops->mkdir() takes struct user_namespace*])
|
|
||||||
ZFS_LINUX_TEST_RESULT([mkdir_user_namespace], [
|
|
||||||
AC_MSG_RESULT(yes)
|
|
||||||
AC_DEFINE(HAVE_IOPS_MKDIR_USERNS, 1,
|
|
||||||
[iops->mkdir() takes struct user_namespace*])
|
|
||||||
],[
|
|
||||||
AC_MSG_RESULT(no)
|
|
||||||
])
|
|
||||||
])
|
])
|
||||||
])
|
])
|
||||||
])
|
])
|
||||||
|
@ -11,12 +11,10 @@ AC_DEFUN([ZFS_AC_KERNEL_OBJTOOL_HEADER], [
|
|||||||
#include <linux/objtool.h>
|
#include <linux/objtool.h>
|
||||||
],[
|
],[
|
||||||
],[
|
],[
|
||||||
objtool_header=$LINUX/include/linux/objtool.h
|
|
||||||
AC_DEFINE(HAVE_KERNEL_OBJTOOL_HEADER, 1,
|
AC_DEFINE(HAVE_KERNEL_OBJTOOL_HEADER, 1,
|
||||||
[kernel has linux/objtool.h])
|
[kernel has linux/objtool.h])
|
||||||
AC_MSG_RESULT(linux/objtool.h)
|
AC_MSG_RESULT(linux/objtool.h)
|
||||||
],[
|
],[
|
||||||
objtool_header=$LINUX/include/linux/frame.h
|
|
||||||
AC_MSG_RESULT(linux/frame.h)
|
AC_MSG_RESULT(linux/frame.h)
|
||||||
])
|
])
|
||||||
])
|
])
|
||||||
@ -49,15 +47,6 @@ AC_DEFUN([ZFS_AC_KERNEL_SRC_OBJTOOL], [
|
|||||||
#error "STACK_FRAME_NON_STANDARD is not defined."
|
#error "STACK_FRAME_NON_STANDARD is not defined."
|
||||||
#endif
|
#endif
|
||||||
])
|
])
|
||||||
|
|
||||||
dnl # 6.15 made CONFIG_OBJTOOL_WERROR=y the default. We need to handle
|
|
||||||
dnl # this or our build will fail.
|
|
||||||
ZFS_LINUX_TEST_SRC([config_objtool_werror], [
|
|
||||||
#if !defined(CONFIG_OBJTOOL_WERROR)
|
|
||||||
#error "CONFIG_OBJTOOL_WERROR is not defined."
|
|
||||||
#endif
|
|
||||||
])
|
|
||||||
|
|
||||||
])
|
])
|
||||||
|
|
||||||
AC_DEFUN([ZFS_AC_KERNEL_OBJTOOL], [
|
AC_DEFUN([ZFS_AC_KERNEL_OBJTOOL], [
|
||||||
@ -73,31 +62,6 @@ AC_DEFUN([ZFS_AC_KERNEL_OBJTOOL], [
|
|||||||
AC_MSG_RESULT(yes)
|
AC_MSG_RESULT(yes)
|
||||||
AC_DEFINE(HAVE_STACK_FRAME_NON_STANDARD, 1,
|
AC_DEFINE(HAVE_STACK_FRAME_NON_STANDARD, 1,
|
||||||
[STACK_FRAME_NON_STANDARD is defined])
|
[STACK_FRAME_NON_STANDARD is defined])
|
||||||
|
|
||||||
dnl # Needed for kernels missing the asm macro. We grep
|
|
||||||
dnl # for it in the header file since there is currently
|
|
||||||
dnl # no test to check the result of assembling a file.
|
|
||||||
AC_MSG_CHECKING(
|
|
||||||
[whether STACK_FRAME_NON_STANDARD asm macro is defined])
|
|
||||||
dnl # Escape square brackets.
|
|
||||||
sp='@<:@@<:@:space:@:>@@:>@'
|
|
||||||
dotmacro='@<:@.@:>@macro'
|
|
||||||
regexp="^$sp*$dotmacro$sp+STACK_FRAME_NON_STANDARD$sp"
|
|
||||||
AS_IF([$EGREP -s -q "$regexp" $objtool_header],[
|
|
||||||
AC_MSG_RESULT(yes)
|
|
||||||
AC_DEFINE(HAVE_STACK_FRAME_NON_STANDARD_ASM, 1,
|
|
||||||
[STACK_FRAME_NON_STANDARD asm macro is defined])
|
|
||||||
],[
|
|
||||||
AC_MSG_RESULT(no)
|
|
||||||
])
|
|
||||||
],[
|
|
||||||
AC_MSG_RESULT(no)
|
|
||||||
])
|
|
||||||
|
|
||||||
AC_MSG_CHECKING([whether CONFIG_OBJTOOL_WERROR is defined])
|
|
||||||
ZFS_LINUX_TEST_RESULT([config_objtool_werror],[
|
|
||||||
AC_MSG_RESULT(yes)
|
|
||||||
CONFIG_OBJTOOL_WERROR_DEFINED=yes
|
|
||||||
],[
|
],[
|
||||||
AC_MSG_RESULT(no)
|
AC_MSG_RESULT(no)
|
||||||
])
|
])
|
||||||
|
@ -1,23 +0,0 @@
|
|||||||
dnl #
|
|
||||||
dnl # Linux 6.16 removed readahead_page
|
|
||||||
dnl #
|
|
||||||
AC_DEFUN([ZFS_AC_KERNEL_SRC_PAGEMAP_READAHEAD_PAGE], [
|
|
||||||
ZFS_LINUX_TEST_SRC([pagemap_has_readahead_page], [
|
|
||||||
#include <linux/pagemap.h>
|
|
||||||
], [
|
|
||||||
struct page *p __attribute__ ((unused)) = NULL;
|
|
||||||
struct readahead_control *ractl __attribute__ ((unused)) = NULL;
|
|
||||||
p = readahead_page(ractl);
|
|
||||||
])
|
|
||||||
])
|
|
||||||
|
|
||||||
AC_DEFUN([ZFS_AC_KERNEL_PAGEMAP_READAHEAD_PAGE], [
|
|
||||||
AC_MSG_CHECKING([whether readahead_page() exists])
|
|
||||||
ZFS_LINUX_TEST_RESULT([pagemap_has_readahead_page], [
|
|
||||||
AC_MSG_RESULT([yes])
|
|
||||||
AC_DEFINE(HAVE_PAGEMAP_READAHEAD_PAGE, 1,
|
|
||||||
[readahead_page() exists])
|
|
||||||
],[
|
|
||||||
AC_MSG_RESULT([no])
|
|
||||||
])
|
|
||||||
])
|
|
@ -1,27 +0,0 @@
|
|||||||
# dnl
|
|
||||||
# dnl 5.8 (735e4ae5ba28) introduced a superblock scoped errseq_t to use to
|
|
||||||
# dnl record writeback errors for syncfs() to return. Up until 5.17, when
|
|
||||||
# dnl sync_fs errors were returned directly, this is the only way for us to
|
|
||||||
# dnl report an error from syncfs().
|
|
||||||
# dnl
|
|
||||||
AC_DEFUN([ZFS_AC_KERNEL_SRC_SUPER_BLOCK_S_WB_ERR], [
|
|
||||||
ZFS_LINUX_TEST_SRC([super_block_s_wb_err], [
|
|
||||||
#include <linux/fs.h>
|
|
||||||
|
|
||||||
static const struct super_block
|
|
||||||
sb __attribute__ ((unused)) = {
|
|
||||||
.s_wb_err = 0,
|
|
||||||
};
|
|
||||||
],[])
|
|
||||||
])
|
|
||||||
|
|
||||||
AC_DEFUN([ZFS_AC_KERNEL_SUPER_BLOCK_S_WB_ERR], [
|
|
||||||
AC_MSG_CHECKING([whether super_block has s_wb_err])
|
|
||||||
ZFS_LINUX_TEST_RESULT([super_block_s_wb_err], [
|
|
||||||
AC_MSG_RESULT(yes)
|
|
||||||
AC_DEFINE(HAVE_SUPER_BLOCK_S_WB_ERR, 1,
|
|
||||||
[have super_block s_wb_err])
|
|
||||||
],[
|
|
||||||
AC_MSG_RESULT(no)
|
|
||||||
])
|
|
||||||
])
|
|
@ -1,32 +0,0 @@
|
|||||||
dnl #
|
|
||||||
dnl # 6.2: timer_delete_sync introduced, del_timer_sync deprecated and made
|
|
||||||
dnl # into a simple wrapper
|
|
||||||
dnl # 6.15: del_timer_sync removed
|
|
||||||
dnl #
|
|
||||||
AC_DEFUN([ZFS_AC_KERNEL_SRC_TIMER_DELETE_SYNC], [
|
|
||||||
ZFS_LINUX_TEST_SRC([timer_delete_sync], [
|
|
||||||
#include <linux/timer.h>
|
|
||||||
],[
|
|
||||||
struct timer_list *timer __attribute__((unused)) = NULL;
|
|
||||||
timer_delete_sync(timer);
|
|
||||||
])
|
|
||||||
])
|
|
||||||
|
|
||||||
AC_DEFUN([ZFS_AC_KERNEL_TIMER_DELETE_SYNC], [
|
|
||||||
AC_MSG_CHECKING([whether timer_delete_sync() is available])
|
|
||||||
ZFS_LINUX_TEST_RESULT([timer_delete_sync], [
|
|
||||||
AC_MSG_RESULT(yes)
|
|
||||||
AC_DEFINE(HAVE_TIMER_DELETE_SYNC, 1,
|
|
||||||
[timer_delete_sync is available])
|
|
||||||
],[
|
|
||||||
AC_MSG_RESULT(no)
|
|
||||||
])
|
|
||||||
])
|
|
||||||
|
|
||||||
AC_DEFUN([ZFS_AC_KERNEL_SRC_TIMER], [
|
|
||||||
ZFS_AC_KERNEL_SRC_TIMER_DELETE_SYNC
|
|
||||||
])
|
|
||||||
|
|
||||||
AC_DEFUN([ZFS_AC_KERNEL_TIMER], [
|
|
||||||
ZFS_AC_KERNEL_TIMER_DELETE_SYNC
|
|
||||||
])
|
|
@ -1,24 +0,0 @@
|
|||||||
dnl #
|
|
||||||
dnl # Linux 6.16 removes address_space_operations ->writepage
|
|
||||||
dnl #
|
|
||||||
AC_DEFUN([ZFS_AC_KERNEL_SRC_VFS_WRITEPAGE], [
|
|
||||||
ZFS_LINUX_TEST_SRC([vfs_has_writepage], [
|
|
||||||
#include <linux/fs.h>
|
|
||||||
|
|
||||||
static const struct address_space_operations
|
|
||||||
aops __attribute__ ((unused)) = {
|
|
||||||
.writepage = NULL,
|
|
||||||
};
|
|
||||||
],[])
|
|
||||||
])
|
|
||||||
|
|
||||||
AC_DEFUN([ZFS_AC_KERNEL_VFS_WRITEPAGE], [
|
|
||||||
AC_MSG_CHECKING([whether aops->writepage exists])
|
|
||||||
ZFS_LINUX_TEST_RESULT([vfs_has_writepage], [
|
|
||||||
AC_MSG_RESULT([yes])
|
|
||||||
AC_DEFINE(HAVE_VFS_WRITEPAGE, 1,
|
|
||||||
[address_space_operations->writepage exists])
|
|
||||||
],[
|
|
||||||
AC_MSG_RESULT([no])
|
|
||||||
])
|
|
||||||
])
|
|
@ -82,7 +82,6 @@ AC_DEFUN([ZFS_AC_KERNEL_TEST_SRC], [
|
|||||||
ZFS_AC_KERNEL_SRC_VFS_MIGRATEPAGE
|
ZFS_AC_KERNEL_SRC_VFS_MIGRATEPAGE
|
||||||
ZFS_AC_KERNEL_SRC_VFS_FSYNC_2ARGS
|
ZFS_AC_KERNEL_SRC_VFS_FSYNC_2ARGS
|
||||||
ZFS_AC_KERNEL_SRC_VFS_READPAGES
|
ZFS_AC_KERNEL_SRC_VFS_READPAGES
|
||||||
ZFS_AC_KERNEL_SRC_VFS_WRITEPAGE
|
|
||||||
ZFS_AC_KERNEL_SRC_VFS_SET_PAGE_DIRTY_NOBUFFERS
|
ZFS_AC_KERNEL_SRC_VFS_SET_PAGE_DIRTY_NOBUFFERS
|
||||||
ZFS_AC_KERNEL_SRC_VFS_IOV_ITER
|
ZFS_AC_KERNEL_SRC_VFS_IOV_ITER
|
||||||
ZFS_AC_KERNEL_SRC_VFS_GENERIC_COPY_FILE_RANGE
|
ZFS_AC_KERNEL_SRC_VFS_GENERIC_COPY_FILE_RANGE
|
||||||
@ -112,7 +111,6 @@ AC_DEFUN([ZFS_AC_KERNEL_TEST_SRC], [
|
|||||||
ZFS_AC_KERNEL_SRC_STANDALONE_LINUX_STDARG
|
ZFS_AC_KERNEL_SRC_STANDALONE_LINUX_STDARG
|
||||||
ZFS_AC_KERNEL_SRC_STRLCPY
|
ZFS_AC_KERNEL_SRC_STRLCPY
|
||||||
ZFS_AC_KERNEL_SRC_PAGEMAP_FOLIO_WAIT_BIT
|
ZFS_AC_KERNEL_SRC_PAGEMAP_FOLIO_WAIT_BIT
|
||||||
ZFS_AC_KERNEL_SRC_PAGEMAP_READAHEAD_PAGE
|
|
||||||
ZFS_AC_KERNEL_SRC_ADD_DISK
|
ZFS_AC_KERNEL_SRC_ADD_DISK
|
||||||
ZFS_AC_KERNEL_SRC_KTHREAD
|
ZFS_AC_KERNEL_SRC_KTHREAD
|
||||||
ZFS_AC_KERNEL_SRC_ZERO_PAGE
|
ZFS_AC_KERNEL_SRC_ZERO_PAGE
|
||||||
@ -132,8 +130,6 @@ AC_DEFUN([ZFS_AC_KERNEL_TEST_SRC], [
|
|||||||
ZFS_AC_KERNEL_SRC_MM_PAGE_MAPPING
|
ZFS_AC_KERNEL_SRC_MM_PAGE_MAPPING
|
||||||
ZFS_AC_KERNEL_SRC_FILE
|
ZFS_AC_KERNEL_SRC_FILE
|
||||||
ZFS_AC_KERNEL_SRC_PIN_USER_PAGES
|
ZFS_AC_KERNEL_SRC_PIN_USER_PAGES
|
||||||
ZFS_AC_KERNEL_SRC_TIMER
|
|
||||||
ZFS_AC_KERNEL_SRC_SUPER_BLOCK_S_WB_ERR
|
|
||||||
case "$host_cpu" in
|
case "$host_cpu" in
|
||||||
powerpc*)
|
powerpc*)
|
||||||
ZFS_AC_KERNEL_SRC_CPU_HAS_FEATURE
|
ZFS_AC_KERNEL_SRC_CPU_HAS_FEATURE
|
||||||
@ -199,7 +195,6 @@ AC_DEFUN([ZFS_AC_KERNEL_TEST_RESULT], [
|
|||||||
ZFS_AC_KERNEL_VFS_MIGRATEPAGE
|
ZFS_AC_KERNEL_VFS_MIGRATEPAGE
|
||||||
ZFS_AC_KERNEL_VFS_FSYNC_2ARGS
|
ZFS_AC_KERNEL_VFS_FSYNC_2ARGS
|
||||||
ZFS_AC_KERNEL_VFS_READPAGES
|
ZFS_AC_KERNEL_VFS_READPAGES
|
||||||
ZFS_AC_KERNEL_VFS_WRITEPAGE
|
|
||||||
ZFS_AC_KERNEL_VFS_SET_PAGE_DIRTY_NOBUFFERS
|
ZFS_AC_KERNEL_VFS_SET_PAGE_DIRTY_NOBUFFERS
|
||||||
ZFS_AC_KERNEL_VFS_IOV_ITER
|
ZFS_AC_KERNEL_VFS_IOV_ITER
|
||||||
ZFS_AC_KERNEL_VFS_GENERIC_COPY_FILE_RANGE
|
ZFS_AC_KERNEL_VFS_GENERIC_COPY_FILE_RANGE
|
||||||
@ -229,7 +224,6 @@ AC_DEFUN([ZFS_AC_KERNEL_TEST_RESULT], [
|
|||||||
ZFS_AC_KERNEL_STANDALONE_LINUX_STDARG
|
ZFS_AC_KERNEL_STANDALONE_LINUX_STDARG
|
||||||
ZFS_AC_KERNEL_STRLCPY
|
ZFS_AC_KERNEL_STRLCPY
|
||||||
ZFS_AC_KERNEL_PAGEMAP_FOLIO_WAIT_BIT
|
ZFS_AC_KERNEL_PAGEMAP_FOLIO_WAIT_BIT
|
||||||
ZFS_AC_KERNEL_PAGEMAP_READAHEAD_PAGE
|
|
||||||
ZFS_AC_KERNEL_ADD_DISK
|
ZFS_AC_KERNEL_ADD_DISK
|
||||||
ZFS_AC_KERNEL_KTHREAD
|
ZFS_AC_KERNEL_KTHREAD
|
||||||
ZFS_AC_KERNEL_ZERO_PAGE
|
ZFS_AC_KERNEL_ZERO_PAGE
|
||||||
@ -250,8 +244,6 @@ AC_DEFUN([ZFS_AC_KERNEL_TEST_RESULT], [
|
|||||||
ZFS_AC_KERNEL_1ARG_ASSIGN_STR
|
ZFS_AC_KERNEL_1ARG_ASSIGN_STR
|
||||||
ZFS_AC_KERNEL_FILE
|
ZFS_AC_KERNEL_FILE
|
||||||
ZFS_AC_KERNEL_PIN_USER_PAGES
|
ZFS_AC_KERNEL_PIN_USER_PAGES
|
||||||
ZFS_AC_KERNEL_TIMER
|
|
||||||
ZFS_AC_KERNEL_SUPER_BLOCK_S_WB_ERR
|
|
||||||
case "$host_cpu" in
|
case "$host_cpu" in
|
||||||
powerpc*)
|
powerpc*)
|
||||||
ZFS_AC_KERNEL_CPU_HAS_FEATURE
|
ZFS_AC_KERNEL_CPU_HAS_FEATURE
|
||||||
|
@ -34,22 +34,6 @@ AC_DEFUN([ZFS_AC_CONFIG_USER_LIBUNWIND], [
|
|||||||
], [
|
], [
|
||||||
AC_MSG_RESULT([no])
|
AC_MSG_RESULT([no])
|
||||||
])
|
])
|
||||||
dnl LLVM includes it's own libunwind library, which
|
|
||||||
dnl defines the highest numbered register in a different
|
|
||||||
dnl way, and has an incompatible unw_resname function.
|
|
||||||
AC_MSG_CHECKING([whether libunwind is llvm libunwind])
|
|
||||||
AC_COMPILE_IFELSE([
|
|
||||||
AC_LANG_PROGRAM([
|
|
||||||
#include <libunwind.h>
|
|
||||||
#if !defined(_LIBUNWIND_HIGHEST_DWARF_REGISTER)
|
|
||||||
#error "_LIBUNWIND_HIGHEST_DWARF_REGISTER is not defined"
|
|
||||||
#endif
|
|
||||||
], [])], [
|
|
||||||
AC_MSG_RESULT([yes])
|
|
||||||
AC_DEFINE(IS_LIBUNWIND_LLVM, 1, [libunwind is llvm libunwind])
|
|
||||||
], [
|
|
||||||
AC_MSG_RESULT([no])
|
|
||||||
])
|
|
||||||
AX_RESTORE_FLAGS
|
AX_RESTORE_FLAGS
|
||||||
], [
|
], [
|
||||||
AS_IF([test "x$with_libunwind" = "xyes"], [
|
AS_IF([test "x$with_libunwind" = "xyes"], [
|
||||||
|
@ -205,46 +205,6 @@ AC_DEFUN([ZFS_AC_DEBUG_INVARIANTS], [
|
|||||||
AC_MSG_RESULT([$enable_invariants])
|
AC_MSG_RESULT([$enable_invariants])
|
||||||
])
|
])
|
||||||
|
|
||||||
dnl # Disabled by default. If enabled allows a configured "turn objtools
|
|
||||||
dnl # warnings into errors" (CONFIG_OBJTOOL_WERROR) behavior to take effect.
|
|
||||||
dnl # If disabled, objtool warnings are never turned into errors. It can't
|
|
||||||
dnl # be enabled if the kernel wasn't compiled with CONFIG_OBJTOOL_WERROR=y.
|
|
||||||
dnl #
|
|
||||||
AC_DEFUN([ZFS_AC_OBJTOOL_WERROR], [
|
|
||||||
AC_MSG_CHECKING([whether objtool error on warning behavior is enabled])
|
|
||||||
AC_ARG_ENABLE([objtool-werror],
|
|
||||||
[AS_HELP_STRING([--enable-objtool-werror],
|
|
||||||
[Enable objtool's error on warning behaviour if present @<:@default=no@:>@])],
|
|
||||||
[enable_objtool_werror=$enableval],
|
|
||||||
[enable_objtool_werror=no])
|
|
||||||
AC_MSG_RESULT([$enable_objtool_werror])
|
|
||||||
|
|
||||||
AS_IF([test x$CONFIG_OBJTOOL_WERROR_DEFINED = xyes],[
|
|
||||||
AS_IF([test x$enable_objtool_werror = xyes],[
|
|
||||||
AC_MSG_NOTICE([enable-objtool-werror defined, keeping -Werror ])
|
|
||||||
],[
|
|
||||||
AC_MSG_NOTICE([enable-objtool-werror undefined, disabling -Werror ])
|
|
||||||
OBJTOOL_DISABLE_WERROR=y
|
|
||||||
abs_objtool_binary=$kernelsrc/tools/objtool/objtool
|
|
||||||
AS_IF([test -x $abs_objtool_binary],[],[
|
|
||||||
AC_MSG_ERROR([*** objtool binary $abs_objtool_binary not found])
|
|
||||||
])
|
|
||||||
dnl # The path to the wrapper is defined in modules/Makefile.in.
|
|
||||||
])
|
|
||||||
],[
|
|
||||||
dnl # We can't enable --Werror if it's not there.
|
|
||||||
AS_IF([test x$enable_objtool_werror = xyes],[
|
|
||||||
AC_MSG_ERROR([
|
|
||||||
*** Cannot enable objtool-werror,
|
|
||||||
*** a kernel built with CONFIG_OBJTOOL_WERROR=y is required.
|
|
||||||
])
|
|
||||||
],[])
|
|
||||||
])
|
|
||||||
|
|
||||||
AC_SUBST(OBJTOOL_DISABLE_WERROR)
|
|
||||||
AC_SUBST(abs_objtool_binary)
|
|
||||||
])
|
|
||||||
|
|
||||||
AC_DEFUN([ZFS_AC_CONFIG_ALWAYS], [
|
AC_DEFUN([ZFS_AC_CONFIG_ALWAYS], [
|
||||||
AX_COUNT_CPUS([])
|
AX_COUNT_CPUS([])
|
||||||
AC_SUBST(CPU_COUNT)
|
AC_SUBST(CPU_COUNT)
|
||||||
|
@ -65,7 +65,6 @@ ZFS_AC_DEBUGINFO
|
|||||||
ZFS_AC_DEBUG_KMEM
|
ZFS_AC_DEBUG_KMEM
|
||||||
ZFS_AC_DEBUG_KMEM_TRACKING
|
ZFS_AC_DEBUG_KMEM_TRACKING
|
||||||
ZFS_AC_DEBUG_INVARIANTS
|
ZFS_AC_DEBUG_INVARIANTS
|
||||||
ZFS_AC_OBJTOOL_WERROR
|
|
||||||
|
|
||||||
AC_CONFIG_FILES([
|
AC_CONFIG_FILES([
|
||||||
contrib/debian/rules
|
contrib/debian/rules
|
||||||
@ -87,7 +86,6 @@ AC_CONFIG_FILES([
|
|||||||
zfs.release
|
zfs.release
|
||||||
])
|
])
|
||||||
|
|
||||||
AC_CONFIG_FILES([scripts/objtool-wrapper], [chmod +x scripts/objtool-wrapper])
|
|
||||||
|
|
||||||
AC_OUTPUT
|
AC_OUTPUT
|
||||||
|
|
||||||
|
@ -73,7 +73,6 @@ usr/share/man/man8/zfs-recv.8
|
|||||||
usr/share/man/man8/zfs-redact.8
|
usr/share/man/man8/zfs-redact.8
|
||||||
usr/share/man/man8/zfs-release.8
|
usr/share/man/man8/zfs-release.8
|
||||||
usr/share/man/man8/zfs-rename.8
|
usr/share/man/man8/zfs-rename.8
|
||||||
usr/share/man/man8/zfs-rewrite.8
|
|
||||||
usr/share/man/man8/zfs-rollback.8
|
usr/share/man/man8/zfs-rollback.8
|
||||||
usr/share/man/man8/zfs-send.8
|
usr/share/man/man8/zfs-send.8
|
||||||
usr/share/man/man8/zfs-set.8
|
usr/share/man/man8/zfs-set.8
|
||||||
|
@ -591,7 +591,6 @@ _LIBZFS_H int zfs_crypto_attempt_load_keys(libzfs_handle_t *, const char *);
|
|||||||
_LIBZFS_H int zfs_crypto_load_key(zfs_handle_t *, boolean_t, const char *);
|
_LIBZFS_H int zfs_crypto_load_key(zfs_handle_t *, boolean_t, const char *);
|
||||||
_LIBZFS_H int zfs_crypto_unload_key(zfs_handle_t *);
|
_LIBZFS_H int zfs_crypto_unload_key(zfs_handle_t *);
|
||||||
_LIBZFS_H int zfs_crypto_rewrap(zfs_handle_t *, nvlist_t *, boolean_t);
|
_LIBZFS_H int zfs_crypto_rewrap(zfs_handle_t *, nvlist_t *, boolean_t);
|
||||||
_LIBZFS_H boolean_t zfs_is_encrypted(zfs_handle_t *);
|
|
||||||
|
|
||||||
typedef struct zprop_list {
|
typedef struct zprop_list {
|
||||||
int pl_prop;
|
int pl_prop;
|
||||||
@ -854,7 +853,7 @@ _LIBZFS_H uint64_t zvol_volsize_to_reservation(zpool_handle_t *, uint64_t,
|
|||||||
nvlist_t *);
|
nvlist_t *);
|
||||||
|
|
||||||
typedef int (*zfs_userspace_cb_t)(void *arg, const char *domain,
|
typedef int (*zfs_userspace_cb_t)(void *arg, const char *domain,
|
||||||
uid_t rid, uint64_t space, uint64_t default_quota);
|
uid_t rid, uint64_t space);
|
||||||
|
|
||||||
_LIBZFS_H int zfs_userspace(zfs_handle_t *, zfs_userquota_prop_t,
|
_LIBZFS_H int zfs_userspace(zfs_handle_t *, zfs_userquota_prop_t,
|
||||||
zfs_userspace_cb_t, void *);
|
zfs_userspace_cb_t, void *);
|
||||||
|
@ -43,7 +43,10 @@ extern "C" {
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define EXPORT_SYMBOL(x)
|
#define EXPORT_SYMBOL(x)
|
||||||
|
#define module_param(a, b, c)
|
||||||
|
#define module_param_call(a, b, c, d, e)
|
||||||
|
#define module_param_named(a, b, c, d)
|
||||||
|
#define MODULE_PARM_DESC(a, b)
|
||||||
#define asm __asm
|
#define asm __asm
|
||||||
#ifdef ZFS_DEBUG
|
#ifdef ZFS_DEBUG
|
||||||
#undef NDEBUG
|
#undef NDEBUG
|
||||||
|
@ -112,13 +112,14 @@ spl_assert(const char *buf, const char *file, const char *func, int line)
|
|||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
#define VERIFY3B(LEFT, OP, RIGHT) do { \
|
#define VERIFY3B(LEFT, OP, RIGHT) do { \
|
||||||
const boolean_t _verify3_left = (boolean_t)!!(LEFT); \
|
const boolean_t _verify3_left = (boolean_t)(LEFT); \
|
||||||
const boolean_t _verify3_right = (boolean_t)!!(RIGHT); \
|
const boolean_t _verify3_right = (boolean_t)(RIGHT); \
|
||||||
if (unlikely(!(_verify3_left OP _verify3_right))) \
|
if (unlikely(!(_verify3_left OP _verify3_right))) \
|
||||||
spl_panic(__FILE__, __FUNCTION__, __LINE__, \
|
spl_panic(__FILE__, __FUNCTION__, __LINE__, \
|
||||||
"VERIFY3B(" #LEFT ", " #OP ", " #RIGHT ") " \
|
"VERIFY3(" #LEFT " " #OP " " #RIGHT ") " \
|
||||||
"failed (%d " #OP " %d)\n", \
|
"failed (%d " #OP " %d)\n", \
|
||||||
_verify3_left, _verify3_right); \
|
(boolean_t)_verify3_left, \
|
||||||
|
(boolean_t)_verify3_right); \
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
#define VERIFY3S(LEFT, OP, RIGHT) do { \
|
#define VERIFY3S(LEFT, OP, RIGHT) do { \
|
||||||
@ -126,7 +127,7 @@ spl_assert(const char *buf, const char *file, const char *func, int line)
|
|||||||
const int64_t _verify3_right = (int64_t)(RIGHT); \
|
const int64_t _verify3_right = (int64_t)(RIGHT); \
|
||||||
if (unlikely(!(_verify3_left OP _verify3_right))) \
|
if (unlikely(!(_verify3_left OP _verify3_right))) \
|
||||||
spl_panic(__FILE__, __FUNCTION__, __LINE__, \
|
spl_panic(__FILE__, __FUNCTION__, __LINE__, \
|
||||||
"VERIFY3S(" #LEFT ", " #OP ", " #RIGHT ") " \
|
"VERIFY3(" #LEFT " " #OP " " #RIGHT ") " \
|
||||||
"failed (%lld " #OP " %lld)\n", \
|
"failed (%lld " #OP " %lld)\n", \
|
||||||
(long long)_verify3_left, \
|
(long long)_verify3_left, \
|
||||||
(long long)_verify3_right); \
|
(long long)_verify3_right); \
|
||||||
@ -137,7 +138,7 @@ spl_assert(const char *buf, const char *file, const char *func, int line)
|
|||||||
const uint64_t _verify3_right = (uint64_t)(RIGHT); \
|
const uint64_t _verify3_right = (uint64_t)(RIGHT); \
|
||||||
if (unlikely(!(_verify3_left OP _verify3_right))) \
|
if (unlikely(!(_verify3_left OP _verify3_right))) \
|
||||||
spl_panic(__FILE__, __FUNCTION__, __LINE__, \
|
spl_panic(__FILE__, __FUNCTION__, __LINE__, \
|
||||||
"VERIFY3U(" #LEFT ", " #OP ", " #RIGHT ") " \
|
"VERIFY3(" #LEFT " " #OP " " #RIGHT ") " \
|
||||||
"failed (%llu " #OP " %llu)\n", \
|
"failed (%llu " #OP " %llu)\n", \
|
||||||
(unsigned long long)_verify3_left, \
|
(unsigned long long)_verify3_left, \
|
||||||
(unsigned long long)_verify3_right); \
|
(unsigned long long)_verify3_right); \
|
||||||
@ -148,8 +149,8 @@ spl_assert(const char *buf, const char *file, const char *func, int line)
|
|||||||
const uintptr_t _verify3_right = (uintptr_t)(RIGHT); \
|
const uintptr_t _verify3_right = (uintptr_t)(RIGHT); \
|
||||||
if (unlikely(!(_verify3_left OP _verify3_right))) \
|
if (unlikely(!(_verify3_left OP _verify3_right))) \
|
||||||
spl_panic(__FILE__, __FUNCTION__, __LINE__, \
|
spl_panic(__FILE__, __FUNCTION__, __LINE__, \
|
||||||
"VERIFY3P(" #LEFT ", " #OP ", " #RIGHT ") " \
|
"VERIFY3(" #LEFT " " #OP " " #RIGHT ") " \
|
||||||
"failed (%p " #OP " %p)\n", \
|
"failed (%px " #OP " %px)\n", \
|
||||||
(void *)_verify3_left, \
|
(void *)_verify3_left, \
|
||||||
(void *)_verify3_right); \
|
(void *)_verify3_right); \
|
||||||
} while (0)
|
} while (0)
|
||||||
@ -158,7 +159,8 @@ spl_assert(const char *buf, const char *file, const char *func, int line)
|
|||||||
const int64_t _verify0_right = (int64_t)(RIGHT); \
|
const int64_t _verify0_right = (int64_t)(RIGHT); \
|
||||||
if (unlikely(!(0 == _verify0_right))) \
|
if (unlikely(!(0 == _verify0_right))) \
|
||||||
spl_panic(__FILE__, __FUNCTION__, __LINE__, \
|
spl_panic(__FILE__, __FUNCTION__, __LINE__, \
|
||||||
"VERIFY0(" #RIGHT ") failed (%lld)\n", \
|
"VERIFY0(" #RIGHT ") " \
|
||||||
|
"failed (0 == %lld)\n", \
|
||||||
(long long)_verify0_right); \
|
(long long)_verify0_right); \
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
@ -166,7 +168,8 @@ spl_assert(const char *buf, const char *file, const char *func, int line)
|
|||||||
const uintptr_t _verify0_right = (uintptr_t)(RIGHT); \
|
const uintptr_t _verify0_right = (uintptr_t)(RIGHT); \
|
||||||
if (unlikely(!(0 == _verify0_right))) \
|
if (unlikely(!(0 == _verify0_right))) \
|
||||||
spl_panic(__FILE__, __FUNCTION__, __LINE__, \
|
spl_panic(__FILE__, __FUNCTION__, __LINE__, \
|
||||||
"VERIFY0P(" #RIGHT ") failed (%p)\n", \
|
"VERIFY0P(" #RIGHT ") " \
|
||||||
|
"failed (NULL == %px)\n", \
|
||||||
(void *)_verify0_right); \
|
(void *)_verify0_right); \
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
@ -179,13 +182,14 @@ spl_assert(const char *buf, const char *file, const char *func, int line)
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#define VERIFY3BF(LEFT, OP, RIGHT, STR, ...) do { \
|
#define VERIFY3BF(LEFT, OP, RIGHT, STR, ...) do { \
|
||||||
const boolean_t _verify3_left = (boolean_t)!!(LEFT); \
|
const boolean_t _verify3_left = (boolean_t)(LEFT); \
|
||||||
const boolean_t _verify3_right = (boolean_t)!!(RIGHT); \
|
const boolean_t _verify3_right = (boolean_t)(RIGHT); \
|
||||||
if (unlikely(!(_verify3_left OP _verify3_right))) \
|
if (unlikely(!(_verify3_left OP _verify3_right))) \
|
||||||
spl_panic(__FILE__, __FUNCTION__, __LINE__, \
|
spl_panic(__FILE__, __FUNCTION__, __LINE__, \
|
||||||
"VERIFY3B(" #LEFT ", " #OP ", " #RIGHT ") " \
|
"VERIFY3(" #LEFT " " #OP " " #RIGHT ") " \
|
||||||
"failed (%d " #OP " %d) " STR "\n", \
|
"failed (%d " #OP " %d) " STR "\n", \
|
||||||
_verify3_left, _verify3_right, \
|
(boolean_t)(_verify3_left), \
|
||||||
|
(boolean_t)(_verify3_right), \
|
||||||
__VA_ARGS__); \
|
__VA_ARGS__); \
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
@ -194,9 +198,10 @@ spl_assert(const char *buf, const char *file, const char *func, int line)
|
|||||||
const int64_t _verify3_right = (int64_t)(RIGHT); \
|
const int64_t _verify3_right = (int64_t)(RIGHT); \
|
||||||
if (unlikely(!(_verify3_left OP _verify3_right))) \
|
if (unlikely(!(_verify3_left OP _verify3_right))) \
|
||||||
spl_panic(__FILE__, __FUNCTION__, __LINE__, \
|
spl_panic(__FILE__, __FUNCTION__, __LINE__, \
|
||||||
"VERIFY3S(" #LEFT ", " #OP ", " #RIGHT ") " \
|
"VERIFY3(" #LEFT " " #OP " " #RIGHT ") " \
|
||||||
"failed (%lld " #OP " %lld) " STR "\n", \
|
"failed (%lld " #OP " %lld) " STR "\n", \
|
||||||
(long long)_verify3_left, (long long)_verify3_right,\
|
(long long)(_verify3_left), \
|
||||||
|
(long long)(_verify3_right), \
|
||||||
__VA_ARGS__); \
|
__VA_ARGS__); \
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
@ -205,10 +210,10 @@ spl_assert(const char *buf, const char *file, const char *func, int line)
|
|||||||
const uint64_t _verify3_right = (uint64_t)(RIGHT); \
|
const uint64_t _verify3_right = (uint64_t)(RIGHT); \
|
||||||
if (unlikely(!(_verify3_left OP _verify3_right))) \
|
if (unlikely(!(_verify3_left OP _verify3_right))) \
|
||||||
spl_panic(__FILE__, __FUNCTION__, __LINE__, \
|
spl_panic(__FILE__, __FUNCTION__, __LINE__, \
|
||||||
"VERIFY3U(" #LEFT ", " #OP ", " #RIGHT ") " \
|
"VERIFY3(" #LEFT " " #OP " " #RIGHT ") " \
|
||||||
"failed (%llu " #OP " %llu) " STR "\n", \
|
"failed (%llu " #OP " %llu) " STR "\n", \
|
||||||
(unsigned long long)_verify3_left, \
|
(unsigned long long)(_verify3_left), \
|
||||||
(unsigned long long)_verify3_right, \
|
(unsigned long long)(_verify3_right), \
|
||||||
__VA_ARGS__); \
|
__VA_ARGS__); \
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
@ -217,27 +222,32 @@ spl_assert(const char *buf, const char *file, const char *func, int line)
|
|||||||
const uintptr_t _verify3_right = (uintptr_t)(RIGHT); \
|
const uintptr_t _verify3_right = (uintptr_t)(RIGHT); \
|
||||||
if (unlikely(!(_verify3_left OP _verify3_right))) \
|
if (unlikely(!(_verify3_left OP _verify3_right))) \
|
||||||
spl_panic(__FILE__, __FUNCTION__, __LINE__, \
|
spl_panic(__FILE__, __FUNCTION__, __LINE__, \
|
||||||
"VERIFY3P(" #LEFT ", " #OP ", " #RIGHT ") " \
|
"VERIFY3(" #LEFT " " #OP " " #RIGHT ") " \
|
||||||
"failed (%p " #OP " %p) " STR "\n", \
|
"failed (%px " #OP " %px) " STR "\n", \
|
||||||
(void *)_verify3_left, (void *)_verify3_right, \
|
(void *) (_verify3_left), \
|
||||||
|
(void *) (_verify3_right), \
|
||||||
__VA_ARGS__); \
|
__VA_ARGS__); \
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
#define VERIFY0PF(RIGHT, STR, ...) do { \
|
#define VERIFY0PF(RIGHT, STR, ...) do { \
|
||||||
|
const uintptr_t _verify3_left = (uintptr_t)(0); \
|
||||||
const uintptr_t _verify3_right = (uintptr_t)(RIGHT); \
|
const uintptr_t _verify3_right = (uintptr_t)(RIGHT); \
|
||||||
if (unlikely(!(0 == _verify3_right))) \
|
if (unlikely(!(_verify3_left == _verify3_right))) \
|
||||||
spl_panic(__FILE__, __FUNCTION__, __LINE__, \
|
spl_panic(__FILE__, __FUNCTION__, __LINE__, \
|
||||||
"VERIFY0P(" #RIGHT ") failed (%p) " STR "\n", \
|
"VERIFY0(0 == " #RIGHT ") " \
|
||||||
(void *)_verify3_right, \
|
"failed (0 == %px) " STR "\n", \
|
||||||
|
(long long) (_verify3_right), \
|
||||||
__VA_ARGS__); \
|
__VA_ARGS__); \
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
#define VERIFY0F(RIGHT, STR, ...) do { \
|
#define VERIFY0F(RIGHT, STR, ...) do { \
|
||||||
|
const int64_t _verify3_left = (int64_t)(0); \
|
||||||
const int64_t _verify3_right = (int64_t)(RIGHT); \
|
const int64_t _verify3_right = (int64_t)(RIGHT); \
|
||||||
if (unlikely(!(0 == _verify3_right))) \
|
if (unlikely(!(_verify3_left == _verify3_right))) \
|
||||||
spl_panic(__FILE__, __FUNCTION__, __LINE__, \
|
spl_panic(__FILE__, __FUNCTION__, __LINE__, \
|
||||||
"VERIFY0(" #RIGHT ") failed (%lld) " STR "\n", \
|
"VERIFY0(0 == " #RIGHT ") " \
|
||||||
(long long)_verify3_right, \
|
"failed (0 == %lld) " STR "\n", \
|
||||||
|
(long long) (_verify3_right), \
|
||||||
__VA_ARGS__); \
|
__VA_ARGS__); \
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
@ -246,7 +256,10 @@ spl_assert(const char *buf, const char *file, const char *func, int line)
|
|||||||
spl_assert("(" #A ") implies (" #B ")", \
|
spl_assert("(" #A ") implies (" #B ")", \
|
||||||
__FILE__, __FUNCTION__, __LINE__)))
|
__FILE__, __FUNCTION__, __LINE__)))
|
||||||
|
|
||||||
#define VERIFY_EQUIV(A, B) VERIFY3B(A, ==, B)
|
#define VERIFY_EQUIV(A, B) \
|
||||||
|
((void)(likely(!!(A) == !!(B)) || \
|
||||||
|
spl_assert("(" #A ") is equivalent to (" #B ")", \
|
||||||
|
__FILE__, __FUNCTION__, __LINE__)))
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Debugging disabled (--disable-debug)
|
* Debugging disabled (--disable-debug)
|
||||||
|
@ -39,6 +39,7 @@ struct znode;
|
|||||||
|
|
||||||
int secpolicy_nfs(cred_t *cr);
|
int secpolicy_nfs(cred_t *cr);
|
||||||
int secpolicy_zfs(cred_t *crd);
|
int secpolicy_zfs(cred_t *crd);
|
||||||
|
int secpolicy_zfs_proc(cred_t *cr, proc_t *proc);
|
||||||
int secpolicy_sys_config(cred_t *cr, int checkonly);
|
int secpolicy_sys_config(cred_t *cr, int checkonly);
|
||||||
int secpolicy_zinject(cred_t *cr);
|
int secpolicy_zinject(cred_t *cr);
|
||||||
int secpolicy_fs_unmount(cred_t *cr, struct mount *vfsp);
|
int secpolicy_fs_unmount(cred_t *cr, struct mount *vfsp);
|
||||||
|
@ -35,7 +35,6 @@
|
|||||||
extern const int zfs_vm_pagerret_bad;
|
extern const int zfs_vm_pagerret_bad;
|
||||||
extern const int zfs_vm_pagerret_error;
|
extern const int zfs_vm_pagerret_error;
|
||||||
extern const int zfs_vm_pagerret_ok;
|
extern const int zfs_vm_pagerret_ok;
|
||||||
extern const int zfs_vm_pagerret_pend;
|
|
||||||
extern const int zfs_vm_pagerput_sync;
|
extern const int zfs_vm_pagerput_sync;
|
||||||
extern const int zfs_vm_pagerput_inval;
|
extern const int zfs_vm_pagerput_inval;
|
||||||
|
|
||||||
|
@ -96,12 +96,6 @@ struct zfsvfs {
|
|||||||
uint64_t z_groupobjquota_obj;
|
uint64_t z_groupobjquota_obj;
|
||||||
uint64_t z_projectquota_obj;
|
uint64_t z_projectquota_obj;
|
||||||
uint64_t z_projectobjquota_obj;
|
uint64_t z_projectobjquota_obj;
|
||||||
uint64_t z_defaultuserquota;
|
|
||||||
uint64_t z_defaultgroupquota;
|
|
||||||
uint64_t z_defaultprojectquota;
|
|
||||||
uint64_t z_defaultuserobjquota;
|
|
||||||
uint64_t z_defaultgroupobjquota;
|
|
||||||
uint64_t z_defaultprojectobjquota;
|
|
||||||
uint64_t z_replay_eof; /* New end of file - replay only */
|
uint64_t z_replay_eof; /* New end of file - replay only */
|
||||||
sa_attr_type_t *z_attr_table; /* SA attr mapping->id */
|
sa_attr_type_t *z_attr_table; /* SA attr mapping->id */
|
||||||
#define ZFS_OBJ_MTX_SZ 64
|
#define ZFS_OBJ_MTX_SZ 64
|
||||||
@ -232,8 +226,6 @@ extern boolean_t zfs_is_readonly(zfsvfs_t *zfsvfs);
|
|||||||
extern int zfs_get_temporary_prop(struct dsl_dataset *ds, zfs_prop_t zfs_prop,
|
extern int zfs_get_temporary_prop(struct dsl_dataset *ds, zfs_prop_t zfs_prop,
|
||||||
uint64_t *val, char *setpoint);
|
uint64_t *val, char *setpoint);
|
||||||
extern int zfs_busy(void);
|
extern int zfs_busy(void);
|
||||||
extern int zfs_set_default_quota(zfsvfs_t *zfsvfs, zfs_prop_t zfs_prop,
|
|
||||||
uint64_t quota);
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
|
@ -8,7 +8,6 @@ kernel_linux_HEADERS = \
|
|||||||
%D%/kernel/linux/mm_compat.h \
|
%D%/kernel/linux/mm_compat.h \
|
||||||
%D%/kernel/linux/mod_compat.h \
|
%D%/kernel/linux/mod_compat.h \
|
||||||
%D%/kernel/linux/page_compat.h \
|
%D%/kernel/linux/page_compat.h \
|
||||||
%D%/kernel/linux/pagemap_compat.h \
|
|
||||||
%D%/kernel/linux/simd.h \
|
%D%/kernel/linux/simd.h \
|
||||||
%D%/kernel/linux/simd_aarch64.h \
|
%D%/kernel/linux/simd_aarch64.h \
|
||||||
%D%/kernel/linux/simd_arm.h \
|
%D%/kernel/linux/simd_arm.h \
|
||||||
|
@ -31,6 +31,15 @@
|
|||||||
#include <linux/module.h>
|
#include <linux/module.h>
|
||||||
#include <linux/moduleparam.h>
|
#include <linux/moduleparam.h>
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Despite constifying struct kernel_param_ops, some older kernels define a
|
||||||
|
* `__check_old_set_param()` function in their headers that checks for a
|
||||||
|
* non-constified `->set()`. This has long been fixed in Linux mainline, but
|
||||||
|
* since we support older kernels, we workaround it by using a preprocessor
|
||||||
|
* definition to disable it.
|
||||||
|
*/
|
||||||
|
#define __check_old_set_param(_) (0)
|
||||||
|
|
||||||
typedef const struct kernel_param zfs_kernel_param_t;
|
typedef const struct kernel_param zfs_kernel_param_t;
|
||||||
|
|
||||||
#define ZMOD_RW 0644
|
#define ZMOD_RW 0644
|
||||||
@ -63,7 +72,6 @@ enum scope_prefix_types {
|
|||||||
zfs_vdev_disk,
|
zfs_vdev_disk,
|
||||||
zfs_vdev_file,
|
zfs_vdev_file,
|
||||||
zfs_vdev_mirror,
|
zfs_vdev_mirror,
|
||||||
zfs_vol,
|
|
||||||
zfs_vnops,
|
zfs_vnops,
|
||||||
zfs_zevent,
|
zfs_zevent,
|
||||||
zfs_zio,
|
zfs_zio,
|
||||||
@ -71,23 +79,48 @@ enum scope_prefix_types {
|
|||||||
};
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Our uint64 params are called U64 in part because we had them before Linux
|
* While we define our own s64/u64 types, there is no reason to reimplement the
|
||||||
* provided ULLONG param ops. Now it does, and we use them, but we retain the
|
* existing Linux kernel types, so we use the preprocessor to remap our
|
||||||
* U64 name to keep many existing tunables working without issue.
|
* "custom" implementations to the kernel ones. This is done because the CPP
|
||||||
|
* does not allow us to write conditional definitions. The fourth definition
|
||||||
|
* exists because the CPP will not allow us to replace things like INT with int
|
||||||
|
* before string concatenation.
|
||||||
*/
|
*/
|
||||||
#define spl_param_set_u64 param_set_ullong
|
|
||||||
#define spl_param_get_u64 param_get_ullong
|
|
||||||
#define spl_param_ops_U64 param_ops_ullong
|
|
||||||
|
|
||||||
/*
|
#define spl_param_set_int param_set_int
|
||||||
* We keep our own names for param ops to make expanding them in
|
#define spl_param_get_int param_get_int
|
||||||
* ZFS_MODULE_PARAM easy.
|
#define spl_param_ops_int param_ops_int
|
||||||
*/
|
#define spl_param_ops_INT param_ops_int
|
||||||
#define spl_param_ops_INT param_ops_int
|
|
||||||
#define spl_param_ops_LONG param_ops_long
|
#define spl_param_set_long param_set_long
|
||||||
#define spl_param_ops_UINT param_ops_uint
|
#define spl_param_get_long param_get_long
|
||||||
#define spl_param_ops_ULONG param_ops_ulong
|
#define spl_param_ops_long param_ops_long
|
||||||
#define spl_param_ops_STRING param_ops_charp
|
#define spl_param_ops_LONG param_ops_long
|
||||||
|
|
||||||
|
#define spl_param_set_uint param_set_uint
|
||||||
|
#define spl_param_get_uint param_get_uint
|
||||||
|
#define spl_param_ops_uint param_ops_uint
|
||||||
|
#define spl_param_ops_UINT param_ops_uint
|
||||||
|
|
||||||
|
#define spl_param_set_ulong param_set_ulong
|
||||||
|
#define spl_param_get_ulong param_get_ulong
|
||||||
|
#define spl_param_ops_ulong param_ops_ulong
|
||||||
|
#define spl_param_ops_ULONG param_ops_ulong
|
||||||
|
|
||||||
|
#define spl_param_set_charp param_set_charp
|
||||||
|
#define spl_param_get_charp param_get_charp
|
||||||
|
#define spl_param_ops_charp param_ops_charp
|
||||||
|
#define spl_param_ops_STRING param_ops_charp
|
||||||
|
|
||||||
|
int spl_param_set_s64(const char *val, zfs_kernel_param_t *kp);
|
||||||
|
extern int spl_param_get_s64(char *buffer, zfs_kernel_param_t *kp);
|
||||||
|
extern const struct kernel_param_ops spl_param_ops_s64;
|
||||||
|
#define spl_param_ops_S64 spl_param_ops_s64
|
||||||
|
|
||||||
|
extern int spl_param_set_u64(const char *val, zfs_kernel_param_t *kp);
|
||||||
|
extern int spl_param_get_u64(char *buffer, zfs_kernel_param_t *kp);
|
||||||
|
extern const struct kernel_param_ops spl_param_ops_u64;
|
||||||
|
#define spl_param_ops_U64 spl_param_ops_u64
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Declare a module parameter / sysctl node
|
* Declare a module parameter / sysctl node
|
||||||
|
@ -4,8 +4,8 @@
|
|||||||
/*
|
/*
|
||||||
* Create our own accessor functions to follow the Linux API changes
|
* Create our own accessor functions to follow the Linux API changes
|
||||||
*/
|
*/
|
||||||
#define nr_file_pages() (global_node_page_state(NR_ACTIVE_FILE) + \
|
#define nr_file_pages() global_node_page_state(NR_FILE_PAGES)
|
||||||
global_node_page_state(NR_INACTIVE_FILE))
|
#define nr_inactive_anon_pages() global_node_page_state(NR_INACTIVE_ANON)
|
||||||
#define nr_inactive_file_pages() global_node_page_state(NR_INACTIVE_FILE)
|
#define nr_inactive_file_pages() global_node_page_state(NR_INACTIVE_FILE)
|
||||||
|
|
||||||
#endif /* _ZFS_PAGE_COMPAT_H */
|
#endif /* _ZFS_PAGE_COMPAT_H */
|
||||||
|
@ -1,36 +0,0 @@
|
|||||||
// SPDX-License-Identifier: CDDL-1.0
|
|
||||||
/*
|
|
||||||
* CDDL HEADER START
|
|
||||||
*
|
|
||||||
* The contents of this file are subject to the terms of the
|
|
||||||
* Common Development and Distribution License (the "License").
|
|
||||||
* You may not use this file except in compliance with the License.
|
|
||||||
*
|
|
||||||
* You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
|
|
||||||
* or https://opensource.org/licenses/CDDL-1.0.
|
|
||||||
* See the License for the specific language governing permissions
|
|
||||||
* and limitations under the License.
|
|
||||||
*
|
|
||||||
* When distributing Covered Code, include this CDDL HEADER in each
|
|
||||||
* file and include the License file at usr/src/OPENSOLARIS.LICENSE.
|
|
||||||
* If applicable, add the following below this CDDL HEADER, with the
|
|
||||||
* fields enclosed by brackets "[]" replaced with your own identifying
|
|
||||||
* information: Portions Copyright [yyyy] [name of copyright owner]
|
|
||||||
*
|
|
||||||
* CDDL HEADER END
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Copyright (c) 2025, Rob Norris <robn@despairlabs.com>
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef _ZFS_PAGEMAP_COMPAT_H
|
|
||||||
#define _ZFS_PAGEMAP_COMPAT_H
|
|
||||||
|
|
||||||
#include <linux/pagemap.h>
|
|
||||||
|
|
||||||
#ifndef HAVE_PAGEMAP_READAHEAD_PAGE
|
|
||||||
#define readahead_page(ractl) (&(__readahead_folio(ractl)->page))
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif
|
|
@ -116,13 +116,14 @@ spl_assert(const char *buf, const char *file, const char *func, int line)
|
|||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
#define VERIFY3B(LEFT, OP, RIGHT) do { \
|
#define VERIFY3B(LEFT, OP, RIGHT) do { \
|
||||||
const boolean_t _verify3_left = (boolean_t)!!(LEFT); \
|
const boolean_t _verify3_left = (boolean_t)(LEFT); \
|
||||||
const boolean_t _verify3_right = (boolean_t)!!(RIGHT); \
|
const boolean_t _verify3_right = (boolean_t)(RIGHT); \
|
||||||
if (unlikely(!(_verify3_left OP _verify3_right))) \
|
if (unlikely(!(_verify3_left OP _verify3_right))) \
|
||||||
spl_panic(__FILE__, __FUNCTION__, __LINE__, \
|
spl_panic(__FILE__, __FUNCTION__, __LINE__, \
|
||||||
"VERIFY3B(" #LEFT ", " #OP ", " #RIGHT ") " \
|
"VERIFY3(" #LEFT " " #OP " " #RIGHT ") " \
|
||||||
"failed (%d " #OP " %d)\n", \
|
"failed (%d " #OP " %d)\n", \
|
||||||
_verify3_left, _verify3_right); \
|
(boolean_t)_verify3_left, \
|
||||||
|
(boolean_t)_verify3_right); \
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
#define VERIFY3S(LEFT, OP, RIGHT) do { \
|
#define VERIFY3S(LEFT, OP, RIGHT) do { \
|
||||||
@ -130,7 +131,7 @@ spl_assert(const char *buf, const char *file, const char *func, int line)
|
|||||||
const int64_t _verify3_right = (int64_t)(RIGHT); \
|
const int64_t _verify3_right = (int64_t)(RIGHT); \
|
||||||
if (unlikely(!(_verify3_left OP _verify3_right))) \
|
if (unlikely(!(_verify3_left OP _verify3_right))) \
|
||||||
spl_panic(__FILE__, __FUNCTION__, __LINE__, \
|
spl_panic(__FILE__, __FUNCTION__, __LINE__, \
|
||||||
"VERIFY3S(" #LEFT ", " #OP ", " #RIGHT ") " \
|
"VERIFY3(" #LEFT " " #OP " " #RIGHT ") " \
|
||||||
"failed (%lld " #OP " %lld)\n", \
|
"failed (%lld " #OP " %lld)\n", \
|
||||||
(long long)_verify3_left, \
|
(long long)_verify3_left, \
|
||||||
(long long)_verify3_right); \
|
(long long)_verify3_right); \
|
||||||
@ -141,7 +142,7 @@ spl_assert(const char *buf, const char *file, const char *func, int line)
|
|||||||
const uint64_t _verify3_right = (uint64_t)(RIGHT); \
|
const uint64_t _verify3_right = (uint64_t)(RIGHT); \
|
||||||
if (unlikely(!(_verify3_left OP _verify3_right))) \
|
if (unlikely(!(_verify3_left OP _verify3_right))) \
|
||||||
spl_panic(__FILE__, __FUNCTION__, __LINE__, \
|
spl_panic(__FILE__, __FUNCTION__, __LINE__, \
|
||||||
"VERIFY3U(" #LEFT ", " #OP ", " #RIGHT ") " \
|
"VERIFY3(" #LEFT " " #OP " " #RIGHT ") " \
|
||||||
"failed (%llu " #OP " %llu)\n", \
|
"failed (%llu " #OP " %llu)\n", \
|
||||||
(unsigned long long)_verify3_left, \
|
(unsigned long long)_verify3_left, \
|
||||||
(unsigned long long)_verify3_right); \
|
(unsigned long long)_verify3_right); \
|
||||||
@ -152,7 +153,7 @@ spl_assert(const char *buf, const char *file, const char *func, int line)
|
|||||||
const uintptr_t _verify3_right = (uintptr_t)(RIGHT); \
|
const uintptr_t _verify3_right = (uintptr_t)(RIGHT); \
|
||||||
if (unlikely(!(_verify3_left OP _verify3_right))) \
|
if (unlikely(!(_verify3_left OP _verify3_right))) \
|
||||||
spl_panic(__FILE__, __FUNCTION__, __LINE__, \
|
spl_panic(__FILE__, __FUNCTION__, __LINE__, \
|
||||||
"VERIFY3P(" #LEFT ", " #OP ", " #RIGHT ") " \
|
"VERIFY3(" #LEFT " " #OP " " #RIGHT ") " \
|
||||||
"failed (%px " #OP " %px)\n", \
|
"failed (%px " #OP " %px)\n", \
|
||||||
(void *)_verify3_left, \
|
(void *)_verify3_left, \
|
||||||
(void *)_verify3_right); \
|
(void *)_verify3_right); \
|
||||||
@ -162,7 +163,8 @@ spl_assert(const char *buf, const char *file, const char *func, int line)
|
|||||||
const int64_t _verify0_right = (int64_t)(RIGHT); \
|
const int64_t _verify0_right = (int64_t)(RIGHT); \
|
||||||
if (unlikely(!(0 == _verify0_right))) \
|
if (unlikely(!(0 == _verify0_right))) \
|
||||||
spl_panic(__FILE__, __FUNCTION__, __LINE__, \
|
spl_panic(__FILE__, __FUNCTION__, __LINE__, \
|
||||||
"VERIFY0(" #RIGHT ") failed (%lld)\n", \
|
"VERIFY0(" #RIGHT ") " \
|
||||||
|
"failed (0 == %lld)\n", \
|
||||||
(long long)_verify0_right); \
|
(long long)_verify0_right); \
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
@ -170,7 +172,8 @@ spl_assert(const char *buf, const char *file, const char *func, int line)
|
|||||||
const uintptr_t _verify0_right = (uintptr_t)(RIGHT); \
|
const uintptr_t _verify0_right = (uintptr_t)(RIGHT); \
|
||||||
if (unlikely(!(0 == _verify0_right))) \
|
if (unlikely(!(0 == _verify0_right))) \
|
||||||
spl_panic(__FILE__, __FUNCTION__, __LINE__, \
|
spl_panic(__FILE__, __FUNCTION__, __LINE__, \
|
||||||
"VERIFY0P(" #RIGHT ") failed (%px)\n", \
|
"VERIFY0P(" #RIGHT ") " \
|
||||||
|
"failed (NULL == %px)\n", \
|
||||||
(void *)_verify0_right); \
|
(void *)_verify0_right); \
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
@ -183,13 +186,14 @@ spl_assert(const char *buf, const char *file, const char *func, int line)
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#define VERIFY3BF(LEFT, OP, RIGHT, STR, ...) do { \
|
#define VERIFY3BF(LEFT, OP, RIGHT, STR, ...) do { \
|
||||||
const boolean_t _verify3_left = (boolean_t)!!(LEFT); \
|
const boolean_t _verify3_left = (boolean_t)(LEFT); \
|
||||||
const boolean_t _verify3_right = (boolean_t)!!(RIGHT); \
|
const boolean_t _verify3_right = (boolean_t)(RIGHT); \
|
||||||
if (unlikely(!(_verify3_left OP _verify3_right))) \
|
if (unlikely(!(_verify3_left OP _verify3_right))) \
|
||||||
spl_panic(__FILE__, __FUNCTION__, __LINE__, \
|
spl_panic(__FILE__, __FUNCTION__, __LINE__, \
|
||||||
"VERIFY3B(" #LEFT ", " #OP ", " #RIGHT ") " \
|
"VERIFY3(" #LEFT " " #OP " " #RIGHT ") " \
|
||||||
"failed (%d " #OP " %d) " STR "\n", \
|
"failed (%d " #OP " %d) " STR "\n", \
|
||||||
_verify3_left, _verify3_right, \
|
(boolean_t)(_verify3_left), \
|
||||||
|
(boolean_t)(_verify3_right), \
|
||||||
__VA_ARGS__); \
|
__VA_ARGS__); \
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
@ -198,9 +202,10 @@ spl_assert(const char *buf, const char *file, const char *func, int line)
|
|||||||
const int64_t _verify3_right = (int64_t)(RIGHT); \
|
const int64_t _verify3_right = (int64_t)(RIGHT); \
|
||||||
if (unlikely(!(_verify3_left OP _verify3_right))) \
|
if (unlikely(!(_verify3_left OP _verify3_right))) \
|
||||||
spl_panic(__FILE__, __FUNCTION__, __LINE__, \
|
spl_panic(__FILE__, __FUNCTION__, __LINE__, \
|
||||||
"VERIFY3S(" #LEFT ", " #OP ", " #RIGHT ") " \
|
"VERIFY3(" #LEFT " " #OP " " #RIGHT ") " \
|
||||||
"failed (%lld " #OP " %lld) " STR "\n", \
|
"failed (%lld " #OP " %lld) " STR "\n", \
|
||||||
(long long)_verify3_left, (long long)_verify3_right,\
|
(long long)(_verify3_left), \
|
||||||
|
(long long)(_verify3_right), \
|
||||||
__VA_ARGS__); \
|
__VA_ARGS__); \
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
@ -209,10 +214,10 @@ spl_assert(const char *buf, const char *file, const char *func, int line)
|
|||||||
const uint64_t _verify3_right = (uint64_t)(RIGHT); \
|
const uint64_t _verify3_right = (uint64_t)(RIGHT); \
|
||||||
if (unlikely(!(_verify3_left OP _verify3_right))) \
|
if (unlikely(!(_verify3_left OP _verify3_right))) \
|
||||||
spl_panic(__FILE__, __FUNCTION__, __LINE__, \
|
spl_panic(__FILE__, __FUNCTION__, __LINE__, \
|
||||||
"VERIFY3U(" #LEFT ", " #OP ", " #RIGHT ") " \
|
"VERIFY3(" #LEFT " " #OP " " #RIGHT ") " \
|
||||||
"failed (%llu " #OP " %llu) " STR "\n", \
|
"failed (%llu " #OP " %llu) " STR "\n", \
|
||||||
(unsigned long long)_verify3_left, \
|
(unsigned long long)(_verify3_left), \
|
||||||
(unsigned long long)_verify3_right, \
|
(unsigned long long)(_verify3_right), \
|
||||||
__VA_ARGS__); \
|
__VA_ARGS__); \
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
@ -221,27 +226,32 @@ spl_assert(const char *buf, const char *file, const char *func, int line)
|
|||||||
const uintptr_t _verify3_right = (uintptr_t)(RIGHT); \
|
const uintptr_t _verify3_right = (uintptr_t)(RIGHT); \
|
||||||
if (unlikely(!(_verify3_left OP _verify3_right))) \
|
if (unlikely(!(_verify3_left OP _verify3_right))) \
|
||||||
spl_panic(__FILE__, __FUNCTION__, __LINE__, \
|
spl_panic(__FILE__, __FUNCTION__, __LINE__, \
|
||||||
"VERIFY3P(" #LEFT ", " #OP ", " #RIGHT ") " \
|
"VERIFY3(" #LEFT " " #OP " " #RIGHT ") " \
|
||||||
"failed (%px " #OP " %px) " STR "\n", \
|
"failed (%px " #OP " %px) " STR "\n", \
|
||||||
(void *)_verify3_left, (void *)_verify3_right, \
|
(void *) (_verify3_left), \
|
||||||
|
(void *) (_verify3_right), \
|
||||||
__VA_ARGS__); \
|
__VA_ARGS__); \
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
#define VERIFY0PF(RIGHT, STR, ...) do { \
|
#define VERIFY0PF(RIGHT, STR, ...) do { \
|
||||||
|
const uintptr_t _verify3_left = (uintptr_t)(0); \
|
||||||
const uintptr_t _verify3_right = (uintptr_t)(RIGHT); \
|
const uintptr_t _verify3_right = (uintptr_t)(RIGHT); \
|
||||||
if (unlikely(!(0 == _verify3_right))) \
|
if (unlikely(!(_verify3_left == _verify3_right))) \
|
||||||
spl_panic(__FILE__, __FUNCTION__, __LINE__, \
|
spl_panic(__FILE__, __FUNCTION__, __LINE__, \
|
||||||
"VERIFY0P(" #RIGHT ") failed (%px) " STR "\n", \
|
"VERIFY0(0 == " #RIGHT ") " \
|
||||||
(void *)_verify3_right, \
|
"failed (0 == %px) " STR "\n", \
|
||||||
|
(long long) (_verify3_right), \
|
||||||
__VA_ARGS__); \
|
__VA_ARGS__); \
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
#define VERIFY0F(RIGHT, STR, ...) do { \
|
#define VERIFY0F(RIGHT, STR, ...) do { \
|
||||||
|
const int64_t _verify3_left = (int64_t)(0); \
|
||||||
const int64_t _verify3_right = (int64_t)(RIGHT); \
|
const int64_t _verify3_right = (int64_t)(RIGHT); \
|
||||||
if (unlikely(!(0 == _verify3_right))) \
|
if (unlikely(!(_verify3_left == _verify3_right))) \
|
||||||
spl_panic(__FILE__, __FUNCTION__, __LINE__, \
|
spl_panic(__FILE__, __FUNCTION__, __LINE__, \
|
||||||
"VERIFY0(" #RIGHT ") failed (%lld) " STR "\n", \
|
"VERIFY0(0 == " #RIGHT ") " \
|
||||||
(long long)_verify3_right, \
|
"failed (0 == %lld) " STR "\n", \
|
||||||
|
(long long) (_verify3_right), \
|
||||||
__VA_ARGS__); \
|
__VA_ARGS__); \
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
@ -250,7 +260,10 @@ spl_assert(const char *buf, const char *file, const char *func, int line)
|
|||||||
spl_assert("(" #A ") implies (" #B ")", \
|
spl_assert("(" #A ") implies (" #B ")", \
|
||||||
__FILE__, __FUNCTION__, __LINE__)))
|
__FILE__, __FUNCTION__, __LINE__)))
|
||||||
|
|
||||||
#define VERIFY_EQUIV(A, B) VERIFY3B(A, ==, B)
|
#define VERIFY_EQUIV(A, B) \
|
||||||
|
((void)(likely(!!(A) == !!(B)) || \
|
||||||
|
spl_assert("(" #A ") is equivalent to (" #B ")", \
|
||||||
|
__FILE__, __FUNCTION__, __LINE__)))
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Debugging disabled (--disable-debug)
|
* Debugging disabled (--disable-debug)
|
||||||
|
@ -21,10 +21,6 @@
|
|||||||
* You should have received a copy of the GNU General Public License along
|
* You should have received a copy of the GNU General Public License along
|
||||||
* with the SPL. If not, see <http://www.gnu.org/licenses/>.
|
* with the SPL. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
/*
|
|
||||||
* Copyright (c) 2024-2025, Klara, Inc.
|
|
||||||
* Copyright (c) 2024-2025, Syneto
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef _SPL_KSTAT_H
|
#ifndef _SPL_KSTAT_H
|
||||||
#define _SPL_KSTAT_H
|
#define _SPL_KSTAT_H
|
||||||
@ -94,8 +90,6 @@ typedef struct kstat_module {
|
|||||||
struct list_head ksm_module_list; /* module linkage */
|
struct list_head ksm_module_list; /* module linkage */
|
||||||
struct list_head ksm_kstat_list; /* list of kstat entries */
|
struct list_head ksm_kstat_list; /* list of kstat entries */
|
||||||
struct proc_dir_entry *ksm_proc; /* proc entry */
|
struct proc_dir_entry *ksm_proc; /* proc entry */
|
||||||
struct kstat_module *ksm_parent; /* parent module in hierarchy */
|
|
||||||
uint_t ksm_nchildren; /* number of child modules */
|
|
||||||
} kstat_module_t;
|
} kstat_module_t;
|
||||||
|
|
||||||
typedef struct kstat_raw_ops {
|
typedef struct kstat_raw_ops {
|
||||||
|
@ -174,7 +174,7 @@ zfs_uio_bvec_init(zfs_uio_t *uio, struct bio *bio, struct request *rq)
|
|||||||
|
|
||||||
static inline void
|
static inline void
|
||||||
zfs_uio_iov_iter_init(zfs_uio_t *uio, struct iov_iter *iter, offset_t offset,
|
zfs_uio_iov_iter_init(zfs_uio_t *uio, struct iov_iter *iter, offset_t offset,
|
||||||
ssize_t resid)
|
ssize_t resid, size_t skip)
|
||||||
{
|
{
|
||||||
uio->uio_iter = iter;
|
uio->uio_iter = iter;
|
||||||
uio->uio_iovcnt = iter->nr_segs;
|
uio->uio_iovcnt = iter->nr_segs;
|
||||||
@ -184,7 +184,7 @@ zfs_uio_iov_iter_init(zfs_uio_t *uio, struct iov_iter *iter, offset_t offset,
|
|||||||
uio->uio_fmode = 0;
|
uio->uio_fmode = 0;
|
||||||
uio->uio_extflg = 0;
|
uio->uio_extflg = 0;
|
||||||
uio->uio_resid = resid;
|
uio->uio_resid = resid;
|
||||||
uio->uio_skip = 0;
|
uio->uio_skip = skip;
|
||||||
uio->uio_soffset = uio->uio_loffset;
|
uio->uio_soffset = uio->uio_loffset;
|
||||||
memset(&uio->uio_dio, 0, sizeof (zfs_uio_dio_t));
|
memset(&uio->uio_dio, 0, sizeof (zfs_uio_dio_t));
|
||||||
}
|
}
|
||||||
|
@ -52,6 +52,7 @@ int secpolicy_vnode_setids_setgids(const cred_t *, gid_t, zidmap_t *,
|
|||||||
struct user_namespace *);
|
struct user_namespace *);
|
||||||
int secpolicy_zinject(const cred_t *);
|
int secpolicy_zinject(const cred_t *);
|
||||||
int secpolicy_zfs(const cred_t *);
|
int secpolicy_zfs(const cred_t *);
|
||||||
|
int secpolicy_zfs_proc(const cred_t *, proc_t *);
|
||||||
void secpolicy_setid_clear(vattr_t *, cred_t *);
|
void secpolicy_setid_clear(vattr_t *, cred_t *);
|
||||||
int secpolicy_setid_setsticky_clear(struct inode *, vattr_t *,
|
int secpolicy_setid_setsticky_clear(struct inode *, vattr_t *,
|
||||||
const vattr_t *, cred_t *, zidmap_t *, struct user_namespace *);
|
const vattr_t *, cred_t *, zidmap_t *, struct user_namespace *);
|
||||||
|
@ -131,12 +131,6 @@ struct zfsvfs {
|
|||||||
uint64_t z_groupobjquota_obj;
|
uint64_t z_groupobjquota_obj;
|
||||||
uint64_t z_projectquota_obj;
|
uint64_t z_projectquota_obj;
|
||||||
uint64_t z_projectobjquota_obj;
|
uint64_t z_projectobjquota_obj;
|
||||||
uint64_t z_defaultuserquota;
|
|
||||||
uint64_t z_defaultgroupquota;
|
|
||||||
uint64_t z_defaultprojectquota;
|
|
||||||
uint64_t z_defaultuserobjquota;
|
|
||||||
uint64_t z_defaultgroupobjquota;
|
|
||||||
uint64_t z_defaultprojectobjquota;
|
|
||||||
uint64_t z_replay_eof; /* New end of file - replay only */
|
uint64_t z_replay_eof; /* New end of file - replay only */
|
||||||
sa_attr_type_t *z_attr_table; /* SA attr mapping->id */
|
sa_attr_type_t *z_attr_table; /* SA attr mapping->id */
|
||||||
uint64_t z_hold_size; /* znode hold array size */
|
uint64_t z_hold_size; /* znode hold array size */
|
||||||
@ -256,8 +250,6 @@ extern int zfs_prune(struct super_block *sb, unsigned long nr_to_scan,
|
|||||||
int *objects);
|
int *objects);
|
||||||
extern int zfs_get_temporary_prop(dsl_dataset_t *ds, zfs_prop_t zfs_prop,
|
extern int zfs_get_temporary_prop(dsl_dataset_t *ds, zfs_prop_t zfs_prop,
|
||||||
uint64_t *val, char *setpoint);
|
uint64_t *val, char *setpoint);
|
||||||
extern int zfs_set_default_quota(zfsvfs_t *zfsvfs, zfs_prop_t zfs_prop,
|
|
||||||
uint64_t quota);
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
|
@ -123,6 +123,41 @@ extern int zpl_clone_file_range(struct file *src_file, loff_t src_off,
|
|||||||
extern int zpl_dedupe_file_range(struct file *src_file, loff_t src_off,
|
extern int zpl_dedupe_file_range(struct file *src_file, loff_t src_off,
|
||||||
struct file *dst_file, loff_t dst_off, uint64_t len);
|
struct file *dst_file, loff_t dst_off, uint64_t len);
|
||||||
|
|
||||||
|
/* compat for FICLONE/FICLONERANGE/FIDEDUPERANGE ioctls */
|
||||||
|
typedef struct {
|
||||||
|
int64_t fcr_src_fd;
|
||||||
|
uint64_t fcr_src_offset;
|
||||||
|
uint64_t fcr_src_length;
|
||||||
|
uint64_t fcr_dest_offset;
|
||||||
|
} zfs_ioc_compat_file_clone_range_t;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
int64_t fdri_dest_fd;
|
||||||
|
uint64_t fdri_dest_offset;
|
||||||
|
uint64_t fdri_bytes_deduped;
|
||||||
|
int32_t fdri_status;
|
||||||
|
uint32_t fdri_reserved;
|
||||||
|
} zfs_ioc_compat_dedupe_range_info_t;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
uint64_t fdr_src_offset;
|
||||||
|
uint64_t fdr_src_length;
|
||||||
|
uint16_t fdr_dest_count;
|
||||||
|
uint16_t fdr_reserved1;
|
||||||
|
uint32_t fdr_reserved2;
|
||||||
|
zfs_ioc_compat_dedupe_range_info_t fdr_info[];
|
||||||
|
} zfs_ioc_compat_dedupe_range_t;
|
||||||
|
|
||||||
|
#define ZFS_IOC_COMPAT_FICLONE _IOW(0x94, 9, int)
|
||||||
|
#define ZFS_IOC_COMPAT_FICLONERANGE \
|
||||||
|
_IOW(0x94, 13, zfs_ioc_compat_file_clone_range_t)
|
||||||
|
#define ZFS_IOC_COMPAT_FIDEDUPERANGE \
|
||||||
|
_IOWR(0x94, 54, zfs_ioc_compat_dedupe_range_t)
|
||||||
|
|
||||||
|
extern long zpl_ioctl_ficlone(struct file *filp, void *arg);
|
||||||
|
extern long zpl_ioctl_ficlonerange(struct file *filp, void *arg);
|
||||||
|
extern long zpl_ioctl_fideduperange(struct file *filp, void *arg);
|
||||||
|
|
||||||
|
|
||||||
#if defined(HAVE_INODE_TIMESTAMP_TRUNCATE)
|
#if defined(HAVE_INODE_TIMESTAMP_TRUNCATE)
|
||||||
#define zpl_inode_timestamp_truncate(ts, ip) timestamp_truncate(ts, ip)
|
#define zpl_inode_timestamp_truncate(ts, ip) timestamp_truncate(ts, ip)
|
||||||
|
@ -64,15 +64,8 @@ extern "C" {
|
|||||||
(hdr)->b_psize = ((x) >> SPA_MINBLOCKSHIFT); \
|
(hdr)->b_psize = ((x) >> SPA_MINBLOCKSHIFT); \
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
/* The l2size in the header is only used by L2 cache */
|
|
||||||
#define HDR_SET_L2SIZE(hdr, x) do { \
|
|
||||||
ASSERT(IS_P2ALIGNED((x), 1U << SPA_MINBLOCKSHIFT)); \
|
|
||||||
(hdr)->b_l2size = ((x) >> SPA_MINBLOCKSHIFT); \
|
|
||||||
} while (0)
|
|
||||||
|
|
||||||
#define HDR_GET_LSIZE(hdr) ((hdr)->b_lsize << SPA_MINBLOCKSHIFT)
|
#define HDR_GET_LSIZE(hdr) ((hdr)->b_lsize << SPA_MINBLOCKSHIFT)
|
||||||
#define HDR_GET_PSIZE(hdr) ((hdr)->b_psize << SPA_MINBLOCKSHIFT)
|
#define HDR_GET_PSIZE(hdr) ((hdr)->b_psize << SPA_MINBLOCKSHIFT)
|
||||||
#define HDR_GET_L2SIZE(hdr) ((hdr)->b_l2size << SPA_MINBLOCKSHIFT)
|
|
||||||
|
|
||||||
typedef struct arc_buf_hdr arc_buf_hdr_t;
|
typedef struct arc_buf_hdr arc_buf_hdr_t;
|
||||||
typedef struct arc_buf arc_buf_t;
|
typedef struct arc_buf arc_buf_t;
|
||||||
@ -330,10 +323,8 @@ void arc_freed(spa_t *spa, const blkptr_t *bp);
|
|||||||
int arc_cached(spa_t *spa, const blkptr_t *bp);
|
int arc_cached(spa_t *spa, const blkptr_t *bp);
|
||||||
|
|
||||||
void arc_flush(spa_t *spa, boolean_t retry);
|
void arc_flush(spa_t *spa, boolean_t retry);
|
||||||
void arc_flush_async(spa_t *spa);
|
|
||||||
void arc_tempreserve_clear(uint64_t reserve);
|
void arc_tempreserve_clear(uint64_t reserve);
|
||||||
int arc_tempreserve_space(spa_t *spa, uint64_t reserve, uint64_t txg);
|
int arc_tempreserve_space(spa_t *spa, uint64_t reserve, uint64_t txg);
|
||||||
boolean_t arc_async_flush_guid_inuse(uint64_t load_guid);
|
|
||||||
|
|
||||||
uint64_t arc_all_memory(void);
|
uint64_t arc_all_memory(void);
|
||||||
uint64_t arc_default_max(uint64_t min, uint64_t allmem);
|
uint64_t arc_default_max(uint64_t min, uint64_t allmem);
|
||||||
|
@ -379,8 +379,8 @@ typedef struct l2arc_lb_ptr_buf {
|
|||||||
* L2ARC Internals
|
* L2ARC Internals
|
||||||
*/
|
*/
|
||||||
typedef struct l2arc_dev {
|
typedef struct l2arc_dev {
|
||||||
vdev_t *l2ad_vdev; /* can be NULL during remove */
|
vdev_t *l2ad_vdev; /* vdev */
|
||||||
spa_t *l2ad_spa; /* can be NULL during remove */
|
spa_t *l2ad_spa; /* spa */
|
||||||
uint64_t l2ad_hand; /* next write location */
|
uint64_t l2ad_hand; /* next write location */
|
||||||
uint64_t l2ad_start; /* first addr on device */
|
uint64_t l2ad_start; /* first addr on device */
|
||||||
uint64_t l2ad_end; /* last addr on device */
|
uint64_t l2ad_end; /* last addr on device */
|
||||||
@ -476,8 +476,8 @@ struct arc_buf_hdr {
|
|||||||
|
|
||||||
arc_buf_contents_t b_type;
|
arc_buf_contents_t b_type;
|
||||||
uint8_t b_complevel;
|
uint8_t b_complevel;
|
||||||
uint8_t b_reserved1; /* used for 4 byte alignment */
|
uint8_t b_reserved1; /* used for 4 byte alignment */
|
||||||
uint16_t b_l2size; /* alignment or L2-only size */
|
uint16_t b_reserved2; /* used for 4 byte alignment */
|
||||||
arc_buf_hdr_t *b_hash_next;
|
arc_buf_hdr_t *b_hash_next;
|
||||||
arc_flags_t b_flags;
|
arc_flags_t b_flags;
|
||||||
|
|
||||||
|
@ -45,6 +45,20 @@ extern "C" {
|
|||||||
|
|
||||||
#define IN_DMU_SYNC 2
|
#define IN_DMU_SYNC 2
|
||||||
|
|
||||||
|
/*
|
||||||
|
* define flags for dbuf_read
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define DB_RF_MUST_SUCCEED (1 << 0)
|
||||||
|
#define DB_RF_CANFAIL (1 << 1)
|
||||||
|
#define DB_RF_HAVESTRUCT (1 << 2)
|
||||||
|
#define DB_RF_NOPREFETCH (1 << 3)
|
||||||
|
#define DB_RF_NEVERWAIT (1 << 4)
|
||||||
|
#define DB_RF_CACHED (1 << 5)
|
||||||
|
#define DB_RF_NO_DECRYPT (1 << 6)
|
||||||
|
#define DB_RF_PARTIAL_FIRST (1 << 7)
|
||||||
|
#define DB_RF_PARTIAL_MORE (1 << 8)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* The simplified state transition diagram for dbufs looks like:
|
* The simplified state transition diagram for dbufs looks like:
|
||||||
*
|
*
|
||||||
@ -160,7 +174,6 @@ typedef struct dbuf_dirty_record {
|
|||||||
arc_buf_t *dr_data;
|
arc_buf_t *dr_data;
|
||||||
override_states_t dr_override_state;
|
override_states_t dr_override_state;
|
||||||
uint8_t dr_copies;
|
uint8_t dr_copies;
|
||||||
uint8_t dr_gang_copies;
|
|
||||||
boolean_t dr_nopwrite;
|
boolean_t dr_nopwrite;
|
||||||
boolean_t dr_brtwrite;
|
boolean_t dr_brtwrite;
|
||||||
boolean_t dr_diowrite;
|
boolean_t dr_diowrite;
|
||||||
@ -375,21 +388,19 @@ void dbuf_rele_and_unlock(dmu_buf_impl_t *db, const void *tag,
|
|||||||
dmu_buf_impl_t *dbuf_find(struct objset *os, uint64_t object, uint8_t level,
|
dmu_buf_impl_t *dbuf_find(struct objset *os, uint64_t object, uint8_t level,
|
||||||
uint64_t blkid, uint64_t *hash_out);
|
uint64_t blkid, uint64_t *hash_out);
|
||||||
|
|
||||||
int dbuf_read(dmu_buf_impl_t *db, zio_t *zio, dmu_flags_t flags);
|
int dbuf_read(dmu_buf_impl_t *db, zio_t *zio, uint32_t flags);
|
||||||
void dmu_buf_will_clone_or_dio(dmu_buf_t *db, dmu_tx_t *tx);
|
void dmu_buf_will_clone_or_dio(dmu_buf_t *db, dmu_tx_t *tx);
|
||||||
void dmu_buf_will_not_fill(dmu_buf_t *db, dmu_tx_t *tx);
|
void dmu_buf_will_not_fill(dmu_buf_t *db, dmu_tx_t *tx);
|
||||||
void dmu_buf_will_fill(dmu_buf_t *db, dmu_tx_t *tx, boolean_t canfail);
|
void dmu_buf_will_fill(dmu_buf_t *db, dmu_tx_t *tx, boolean_t canfail);
|
||||||
void dmu_buf_will_fill_flags(dmu_buf_t *db, dmu_tx_t *tx, boolean_t canfail,
|
|
||||||
dmu_flags_t flags);
|
|
||||||
boolean_t dmu_buf_fill_done(dmu_buf_t *db, dmu_tx_t *tx, boolean_t failed);
|
boolean_t dmu_buf_fill_done(dmu_buf_t *db, dmu_tx_t *tx, boolean_t failed);
|
||||||
void dbuf_assign_arcbuf(dmu_buf_impl_t *db, arc_buf_t *buf, dmu_tx_t *tx,
|
void dbuf_assign_arcbuf(dmu_buf_impl_t *db, arc_buf_t *buf, dmu_tx_t *tx);
|
||||||
dmu_flags_t flags);
|
|
||||||
dbuf_dirty_record_t *dbuf_dirty(dmu_buf_impl_t *db, dmu_tx_t *tx);
|
dbuf_dirty_record_t *dbuf_dirty(dmu_buf_impl_t *db, dmu_tx_t *tx);
|
||||||
dbuf_dirty_record_t *dbuf_dirty_lightweight(dnode_t *dn, uint64_t blkid,
|
dbuf_dirty_record_t *dbuf_dirty_lightweight(dnode_t *dn, uint64_t blkid,
|
||||||
dmu_tx_t *tx);
|
dmu_tx_t *tx);
|
||||||
boolean_t dbuf_undirty(dmu_buf_impl_t *db, dmu_tx_t *tx);
|
boolean_t dbuf_undirty(dmu_buf_impl_t *db, dmu_tx_t *tx);
|
||||||
int dmu_buf_get_bp_from_dbuf(dmu_buf_impl_t *db, blkptr_t **bp);
|
int dmu_buf_get_bp_from_dbuf(dmu_buf_impl_t *db, blkptr_t **bp);
|
||||||
int dmu_buf_untransform_direct(dmu_buf_impl_t *db, spa_t *spa);
|
int dmu_buf_untransform_direct(dmu_buf_impl_t *db, spa_t *spa);
|
||||||
|
arc_buf_t *dbuf_loan_arcbuf(dmu_buf_impl_t *db);
|
||||||
void dmu_buf_write_embedded(dmu_buf_t *dbuf, void *data,
|
void dmu_buf_write_embedded(dmu_buf_t *dbuf, void *data,
|
||||||
bp_embedded_type_t etype, enum zio_compress comp,
|
bp_embedded_type_t etype, enum zio_compress comp,
|
||||||
int uncompressed_size, int compressed_size, int byteorder, dmu_tx_t *tx);
|
int uncompressed_size, int compressed_size, int byteorder, dmu_tx_t *tx);
|
||||||
@ -435,7 +446,6 @@ int dbuf_dnode_findbp(dnode_t *dn, uint64_t level, uint64_t blkid,
|
|||||||
|
|
||||||
void dbuf_init(void);
|
void dbuf_init(void);
|
||||||
void dbuf_fini(void);
|
void dbuf_fini(void);
|
||||||
void dbuf_cache_reduce_target_size(void);
|
|
||||||
|
|
||||||
boolean_t dbuf_is_metadata(dmu_buf_impl_t *db);
|
boolean_t dbuf_is_metadata(dmu_buf_impl_t *db);
|
||||||
|
|
||||||
@ -465,10 +475,10 @@ dbuf_find_dirty_eq(dmu_buf_impl_t *db, uint64_t txg)
|
|||||||
#define DBUF_GET_BUFC_TYPE(_db) \
|
#define DBUF_GET_BUFC_TYPE(_db) \
|
||||||
(dbuf_is_metadata(_db) ? ARC_BUFC_METADATA : ARC_BUFC_DATA)
|
(dbuf_is_metadata(_db) ? ARC_BUFC_METADATA : ARC_BUFC_DATA)
|
||||||
|
|
||||||
#define DBUF_IS_CACHEABLE(_db) (!(_db)->db_pending_evict && \
|
#define DBUF_IS_CACHEABLE(_db) \
|
||||||
((_db)->db_objset->os_primary_cache == ZFS_CACHE_ALL || \
|
((_db)->db_objset->os_primary_cache == ZFS_CACHE_ALL || \
|
||||||
(dbuf_is_metadata(_db) && \
|
(dbuf_is_metadata(_db) && \
|
||||||
((_db)->db_objset->os_primary_cache == ZFS_CACHE_METADATA))))
|
((_db)->db_objset->os_primary_cache == ZFS_CACHE_METADATA)))
|
||||||
|
|
||||||
boolean_t dbuf_is_l2cacheable(dmu_buf_impl_t *db, blkptr_t *db_bp);
|
boolean_t dbuf_is_l2cacheable(dmu_buf_impl_t *db, blkptr_t *db_bp);
|
||||||
|
|
||||||
|
@ -286,11 +286,14 @@ typedef struct {
|
|||||||
ddt_log_t *ddt_log_active; /* pointers into ddt_log */
|
ddt_log_t *ddt_log_active; /* pointers into ddt_log */
|
||||||
ddt_log_t *ddt_log_flushing; /* swapped when flush starts */
|
ddt_log_t *ddt_log_flushing; /* swapped when flush starts */
|
||||||
|
|
||||||
|
hrtime_t ddt_flush_start; /* log flush start this txg */
|
||||||
|
uint32_t ddt_flush_pass; /* log flush pass this txg */
|
||||||
|
|
||||||
|
int32_t ddt_flush_count; /* entries flushed this txg */
|
||||||
|
int32_t ddt_flush_min; /* min rem entries to flush */
|
||||||
int32_t ddt_log_ingest_rate; /* rolling log ingest rate */
|
int32_t ddt_log_ingest_rate; /* rolling log ingest rate */
|
||||||
int32_t ddt_log_flush_rate; /* rolling log flush rate */
|
int32_t ddt_log_flush_rate; /* rolling log flush rate */
|
||||||
int32_t ddt_log_flush_time_rate; /* avg time spent flushing */
|
int32_t ddt_log_flush_time_rate; /* avg time spent flushing */
|
||||||
uint32_t ddt_log_flush_pressure; /* pressure to apply for cap */
|
|
||||||
uint32_t ddt_log_flush_prev_backlog; /* prev backlog size */
|
|
||||||
|
|
||||||
uint64_t ddt_flush_force_txg; /* flush hard before this txg */
|
uint64_t ddt_flush_force_txg; /* flush hard before this txg */
|
||||||
|
|
||||||
@ -352,8 +355,6 @@ extern ddt_phys_variant_t ddt_phys_select(const ddt_t *ddt,
|
|||||||
const ddt_entry_t *dde, const blkptr_t *bp);
|
const ddt_entry_t *dde, const blkptr_t *bp);
|
||||||
extern uint64_t ddt_phys_birth(const ddt_univ_phys_t *ddp,
|
extern uint64_t ddt_phys_birth(const ddt_univ_phys_t *ddp,
|
||||||
ddt_phys_variant_t v);
|
ddt_phys_variant_t v);
|
||||||
extern int ddt_phys_is_gang(const ddt_univ_phys_t *ddp,
|
|
||||||
ddt_phys_variant_t v);
|
|
||||||
extern int ddt_phys_dva_count(const ddt_univ_phys_t *ddp, ddt_phys_variant_t v,
|
extern int ddt_phys_dva_count(const ddt_univ_phys_t *ddp, ddt_phys_variant_t v,
|
||||||
boolean_t encrypted);
|
boolean_t encrypted);
|
||||||
|
|
||||||
|
@ -144,9 +144,9 @@ typedef enum dmu_object_byteswap {
|
|||||||
#define DMU_OT_IS_DDT(ot) \
|
#define DMU_OT_IS_DDT(ot) \
|
||||||
((ot) == DMU_OT_DDT_ZAP)
|
((ot) == DMU_OT_DDT_ZAP)
|
||||||
|
|
||||||
#define DMU_OT_IS_CRITICAL(ot, level) \
|
#define DMU_OT_IS_CRITICAL(ot) \
|
||||||
(DMU_OT_IS_METADATA(ot) && \
|
(DMU_OT_IS_METADATA(ot) && \
|
||||||
((ot) != DMU_OT_DNODE || (level) > 0) && \
|
(ot) != DMU_OT_DNODE && \
|
||||||
(ot) != DMU_OT_DIRECTORY_CONTENTS && \
|
(ot) != DMU_OT_DIRECTORY_CONTENTS && \
|
||||||
(ot) != DMU_OT_SA)
|
(ot) != DMU_OT_SA)
|
||||||
|
|
||||||
@ -281,30 +281,9 @@ typedef enum dmu_object_type {
|
|||||||
* the transaction is full. See the comment above dmu_tx_assign() for more
|
* the transaction is full. See the comment above dmu_tx_assign() for more
|
||||||
* details on the meaning of these flags.
|
* details on the meaning of these flags.
|
||||||
*/
|
*/
|
||||||
typedef enum {
|
#define DMU_TX_NOWAIT (0ULL)
|
||||||
/*
|
#define DMU_TX_WAIT (1ULL<<0)
|
||||||
* If the tx cannot be assigned to a transaction for any reason, do
|
#define DMU_TX_NOTHROTTLE (1ULL<<1)
|
||||||
* not block but return immediately.
|
|
||||||
*/
|
|
||||||
DMU_TX_NOWAIT = 0,
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Assign the tx to the open transaction. If the open transaction is
|
|
||||||
* full, or the write throttle is active, block until the next
|
|
||||||
* transaction and try again. If the pool suspends while waiting
|
|
||||||
* and failmode=continue, return an error.
|
|
||||||
*/
|
|
||||||
DMU_TX_WAIT = (1 << 0),
|
|
||||||
|
|
||||||
/* If the write throttle would prevent the assignment, ignore it. */
|
|
||||||
DMU_TX_NOTHROTTLE = (1 << 1),
|
|
||||||
|
|
||||||
/*
|
|
||||||
* With DMU_TX_WAIT, always block if the pool suspends during
|
|
||||||
* assignment, regardless of the value of the failmode= property.
|
|
||||||
*/
|
|
||||||
DMU_TX_SUSPEND = (1 << 2),
|
|
||||||
} dmu_tx_flag_t;
|
|
||||||
|
|
||||||
void byteswap_uint64_array(void *buf, size_t size);
|
void byteswap_uint64_array(void *buf, size_t size);
|
||||||
void byteswap_uint32_array(void *buf, size_t size);
|
void byteswap_uint32_array(void *buf, size_t size);
|
||||||
@ -360,6 +339,7 @@ void dmu_objset_evict_dbufs(objset_t *os);
|
|||||||
int dmu_objset_create(const char *name, dmu_objset_type_t type, uint64_t flags,
|
int dmu_objset_create(const char *name, dmu_objset_type_t type, uint64_t flags,
|
||||||
struct dsl_crypto_params *dcp, dmu_objset_create_sync_func_t func,
|
struct dsl_crypto_params *dcp, dmu_objset_create_sync_func_t func,
|
||||||
void *arg);
|
void *arg);
|
||||||
|
int dmu_objset_clone(const char *name, const char *origin);
|
||||||
int dsl_destroy_snapshots_nvl(struct nvlist *snaps, boolean_t defer,
|
int dsl_destroy_snapshots_nvl(struct nvlist *snaps, boolean_t defer,
|
||||||
struct nvlist *errlist);
|
struct nvlist *errlist);
|
||||||
int dmu_objset_snapshot_one(const char *fsname, const char *snapname);
|
int dmu_objset_snapshot_one(const char *fsname, const char *snapname);
|
||||||
@ -552,26 +532,6 @@ void dmu_redact(objset_t *os, uint64_t object, uint64_t offset, uint64_t size,
|
|||||||
void dmu_write_policy(objset_t *os, dnode_t *dn, int level, int wp,
|
void dmu_write_policy(objset_t *os, dnode_t *dn, int level, int wp,
|
||||||
struct zio_prop *zp);
|
struct zio_prop *zp);
|
||||||
|
|
||||||
/*
|
|
||||||
* DB_RF_* are to be used for dbuf_read() or in limited other cases.
|
|
||||||
*/
|
|
||||||
typedef enum dmu_flags {
|
|
||||||
DB_RF_MUST_SUCCEED = 0, /* Suspend on I/O errors. */
|
|
||||||
DB_RF_CANFAIL = 1 << 0, /* Return on I/O errors. */
|
|
||||||
DB_RF_HAVESTRUCT = 1 << 1, /* dn_struct_rwlock is locked. */
|
|
||||||
DB_RF_NEVERWAIT = 1 << 2,
|
|
||||||
DMU_READ_PREFETCH = 0, /* Try speculative prefetch. */
|
|
||||||
DMU_READ_NO_PREFETCH = 1 << 3, /* Don't prefetch speculatively. */
|
|
||||||
DB_RF_NOPREFETCH = DMU_READ_NO_PREFETCH,
|
|
||||||
DMU_READ_NO_DECRYPT = 1 << 4, /* Don't decrypt. */
|
|
||||||
DB_RF_NO_DECRYPT = DMU_READ_NO_DECRYPT,
|
|
||||||
DMU_DIRECTIO = 1 << 5, /* Bypass ARC. */
|
|
||||||
DMU_UNCACHEDIO = 1 << 6, /* Reduce caching. */
|
|
||||||
DMU_PARTIAL_FIRST = 1 << 7, /* First partial access. */
|
|
||||||
DMU_PARTIAL_MORE = 1 << 8, /* Following partial access. */
|
|
||||||
DMU_KEEP_CACHING = 1 << 9, /* Don't affect caching. */
|
|
||||||
} dmu_flags_t;
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* The bonus data is accessed more or less like a regular buffer.
|
* The bonus data is accessed more or less like a regular buffer.
|
||||||
* You must dmu_bonus_hold() to get the buffer, which will give you a
|
* You must dmu_bonus_hold() to get the buffer, which will give you a
|
||||||
@ -587,7 +547,7 @@ typedef enum dmu_flags {
|
|||||||
int dmu_bonus_hold(objset_t *os, uint64_t object, const void *tag,
|
int dmu_bonus_hold(objset_t *os, uint64_t object, const void *tag,
|
||||||
dmu_buf_t **dbp);
|
dmu_buf_t **dbp);
|
||||||
int dmu_bonus_hold_by_dnode(dnode_t *dn, const void *tag, dmu_buf_t **dbp,
|
int dmu_bonus_hold_by_dnode(dnode_t *dn, const void *tag, dmu_buf_t **dbp,
|
||||||
dmu_flags_t flags);
|
uint32_t flags);
|
||||||
int dmu_bonus_max(void);
|
int dmu_bonus_max(void);
|
||||||
int dmu_set_bonus(dmu_buf_t *, int, dmu_tx_t *);
|
int dmu_set_bonus(dmu_buf_t *, int, dmu_tx_t *);
|
||||||
int dmu_set_bonustype(dmu_buf_t *, dmu_object_type_t, dmu_tx_t *);
|
int dmu_set_bonustype(dmu_buf_t *, dmu_object_type_t, dmu_tx_t *);
|
||||||
@ -598,9 +558,9 @@ int dmu_rm_spill(objset_t *, uint64_t, dmu_tx_t *);
|
|||||||
* Special spill buffer support used by "SA" framework
|
* Special spill buffer support used by "SA" framework
|
||||||
*/
|
*/
|
||||||
|
|
||||||
int dmu_spill_hold_by_bonus(dmu_buf_t *bonus, dmu_flags_t flags,
|
int dmu_spill_hold_by_bonus(dmu_buf_t *bonus, uint32_t flags, const void *tag,
|
||||||
const void *tag, dmu_buf_t **dbp);
|
dmu_buf_t **dbp);
|
||||||
int dmu_spill_hold_by_dnode(dnode_t *dn, dmu_flags_t flags,
|
int dmu_spill_hold_by_dnode(dnode_t *dn, uint32_t flags,
|
||||||
const void *tag, dmu_buf_t **dbp);
|
const void *tag, dmu_buf_t **dbp);
|
||||||
int dmu_spill_hold_existing(dmu_buf_t *bonus, const void *tag, dmu_buf_t **dbp);
|
int dmu_spill_hold_existing(dmu_buf_t *bonus, const void *tag, dmu_buf_t **dbp);
|
||||||
|
|
||||||
@ -619,17 +579,17 @@ int dmu_spill_hold_existing(dmu_buf_t *bonus, const void *tag, dmu_buf_t **dbp);
|
|||||||
* The object number must be a valid, allocated object number.
|
* The object number must be a valid, allocated object number.
|
||||||
*/
|
*/
|
||||||
int dmu_buf_hold(objset_t *os, uint64_t object, uint64_t offset,
|
int dmu_buf_hold(objset_t *os, uint64_t object, uint64_t offset,
|
||||||
const void *tag, dmu_buf_t **, dmu_flags_t flags);
|
const void *tag, dmu_buf_t **, int flags);
|
||||||
int dmu_buf_hold_array(objset_t *os, uint64_t object, uint64_t offset,
|
int dmu_buf_hold_array(objset_t *os, uint64_t object, uint64_t offset,
|
||||||
uint64_t length, int read, const void *tag, int *numbufsp,
|
uint64_t length, int read, const void *tag, int *numbufsp,
|
||||||
dmu_buf_t ***dbpp);
|
dmu_buf_t ***dbpp);
|
||||||
int dmu_buf_hold_noread(objset_t *os, uint64_t object, uint64_t offset,
|
int dmu_buf_hold_noread(objset_t *os, uint64_t object, uint64_t offset,
|
||||||
const void *tag, dmu_buf_t **dbp);
|
const void *tag, dmu_buf_t **dbp);
|
||||||
int dmu_buf_hold_by_dnode(dnode_t *dn, uint64_t offset,
|
int dmu_buf_hold_by_dnode(dnode_t *dn, uint64_t offset,
|
||||||
const void *tag, dmu_buf_t **dbp, dmu_flags_t flags);
|
const void *tag, dmu_buf_t **dbp, int flags);
|
||||||
int dmu_buf_hold_array_by_dnode(dnode_t *dn, uint64_t offset,
|
int dmu_buf_hold_array_by_dnode(dnode_t *dn, uint64_t offset,
|
||||||
uint64_t length, boolean_t read, const void *tag, int *numbufsp,
|
uint64_t length, boolean_t read, const void *tag, int *numbufsp,
|
||||||
dmu_buf_t ***dbpp, dmu_flags_t flags);
|
dmu_buf_t ***dbpp, uint32_t flags);
|
||||||
int dmu_buf_hold_noread_by_dnode(dnode_t *dn, uint64_t offset, const void *tag,
|
int dmu_buf_hold_noread_by_dnode(dnode_t *dn, uint64_t offset, const void *tag,
|
||||||
dmu_buf_t **dbp);
|
dmu_buf_t **dbp);
|
||||||
|
|
||||||
@ -821,7 +781,6 @@ struct blkptr *dmu_buf_get_blkptr(dmu_buf_t *db);
|
|||||||
* (ie. you've called dmu_tx_hold_object(tx, db->db_object)).
|
* (ie. you've called dmu_tx_hold_object(tx, db->db_object)).
|
||||||
*/
|
*/
|
||||||
void dmu_buf_will_dirty(dmu_buf_t *db, dmu_tx_t *tx);
|
void dmu_buf_will_dirty(dmu_buf_t *db, dmu_tx_t *tx);
|
||||||
void dmu_buf_will_dirty_flags(dmu_buf_t *db, dmu_tx_t *tx, dmu_flags_t flags);
|
|
||||||
boolean_t dmu_buf_is_dirty(dmu_buf_t *db, dmu_tx_t *tx);
|
boolean_t dmu_buf_is_dirty(dmu_buf_t *db, dmu_tx_t *tx);
|
||||||
void dmu_buf_set_crypt_params(dmu_buf_t *db_fake, boolean_t byteorder,
|
void dmu_buf_set_crypt_params(dmu_buf_t *db_fake, boolean_t byteorder,
|
||||||
const uint8_t *salt, const uint8_t *iv, const uint8_t *mac, dmu_tx_t *tx);
|
const uint8_t *salt, const uint8_t *iv, const uint8_t *mac, dmu_tx_t *tx);
|
||||||
@ -855,7 +814,7 @@ void dmu_tx_hold_append(dmu_tx_t *tx, uint64_t object, uint64_t off, int len);
|
|||||||
void dmu_tx_hold_append_by_dnode(dmu_tx_t *tx, dnode_t *dn, uint64_t off,
|
void dmu_tx_hold_append_by_dnode(dmu_tx_t *tx, dnode_t *dn, uint64_t off,
|
||||||
int len);
|
int len);
|
||||||
void dmu_tx_hold_clone_by_dnode(dmu_tx_t *tx, dnode_t *dn, uint64_t off,
|
void dmu_tx_hold_clone_by_dnode(dmu_tx_t *tx, dnode_t *dn, uint64_t off,
|
||||||
uint64_t len, uint_t blksz);
|
int len);
|
||||||
void dmu_tx_hold_free(dmu_tx_t *tx, uint64_t object, uint64_t off,
|
void dmu_tx_hold_free(dmu_tx_t *tx, uint64_t object, uint64_t off,
|
||||||
uint64_t len);
|
uint64_t len);
|
||||||
void dmu_tx_hold_free_by_dnode(dmu_tx_t *tx, dnode_t *dn, uint64_t off,
|
void dmu_tx_hold_free_by_dnode(dmu_tx_t *tx, dnode_t *dn, uint64_t off,
|
||||||
@ -869,7 +828,7 @@ void dmu_tx_hold_spill(dmu_tx_t *tx, uint64_t object);
|
|||||||
void dmu_tx_hold_sa(dmu_tx_t *tx, struct sa_handle *hdl, boolean_t may_grow);
|
void dmu_tx_hold_sa(dmu_tx_t *tx, struct sa_handle *hdl, boolean_t may_grow);
|
||||||
void dmu_tx_hold_sa_create(dmu_tx_t *tx, int total_size);
|
void dmu_tx_hold_sa_create(dmu_tx_t *tx, int total_size);
|
||||||
void dmu_tx_abort(dmu_tx_t *tx);
|
void dmu_tx_abort(dmu_tx_t *tx);
|
||||||
int dmu_tx_assign(dmu_tx_t *tx, dmu_tx_flag_t flags);
|
int dmu_tx_assign(dmu_tx_t *tx, uint64_t flags);
|
||||||
void dmu_tx_wait(dmu_tx_t *tx);
|
void dmu_tx_wait(dmu_tx_t *tx);
|
||||||
void dmu_tx_commit(dmu_tx_t *tx);
|
void dmu_tx_commit(dmu_tx_t *tx);
|
||||||
void dmu_tx_mark_netfree(dmu_tx_t *tx);
|
void dmu_tx_mark_netfree(dmu_tx_t *tx);
|
||||||
@ -915,36 +874,40 @@ int dmu_free_long_object(objset_t *os, uint64_t object);
|
|||||||
* Canfail routines will return 0 on success, or an errno if there is a
|
* Canfail routines will return 0 on success, or an errno if there is a
|
||||||
* nonrecoverable I/O error.
|
* nonrecoverable I/O error.
|
||||||
*/
|
*/
|
||||||
|
#define DMU_READ_PREFETCH 0 /* prefetch */
|
||||||
|
#define DMU_READ_NO_PREFETCH 1 /* don't prefetch */
|
||||||
|
#define DMU_READ_NO_DECRYPT 2 /* don't decrypt */
|
||||||
|
#define DMU_DIRECTIO 4 /* use Direct I/O */
|
||||||
|
|
||||||
int dmu_read(objset_t *os, uint64_t object, uint64_t offset, uint64_t size,
|
int dmu_read(objset_t *os, uint64_t object, uint64_t offset, uint64_t size,
|
||||||
void *buf, dmu_flags_t flags);
|
void *buf, uint32_t flags);
|
||||||
int dmu_read_by_dnode(dnode_t *dn, uint64_t offset, uint64_t size, void *buf,
|
int dmu_read_by_dnode(dnode_t *dn, uint64_t offset, uint64_t size, void *buf,
|
||||||
dmu_flags_t flags);
|
uint32_t flags);
|
||||||
void dmu_write(objset_t *os, uint64_t object, uint64_t offset, uint64_t size,
|
void dmu_write(objset_t *os, uint64_t object, uint64_t offset, uint64_t size,
|
||||||
const void *buf, dmu_tx_t *tx);
|
const void *buf, dmu_tx_t *tx);
|
||||||
int dmu_write_by_dnode(dnode_t *dn, uint64_t offset, uint64_t size,
|
int dmu_write_by_dnode(dnode_t *dn, uint64_t offset, uint64_t size,
|
||||||
const void *buf, dmu_tx_t *tx, dmu_flags_t flags);
|
const void *buf, dmu_tx_t *tx);
|
||||||
|
int dmu_write_by_dnode_flags(dnode_t *dn, uint64_t offset, uint64_t size,
|
||||||
|
const void *buf, dmu_tx_t *tx, uint32_t flags);
|
||||||
void dmu_prealloc(objset_t *os, uint64_t object, uint64_t offset, uint64_t size,
|
void dmu_prealloc(objset_t *os, uint64_t object, uint64_t offset, uint64_t size,
|
||||||
dmu_tx_t *tx);
|
dmu_tx_t *tx);
|
||||||
#ifdef _KERNEL
|
#ifdef _KERNEL
|
||||||
int dmu_read_uio(objset_t *os, uint64_t object, zfs_uio_t *uio, uint64_t size,
|
int dmu_read_uio(objset_t *os, uint64_t object, zfs_uio_t *uio, uint64_t size);
|
||||||
dmu_flags_t flags);
|
int dmu_read_uio_dbuf(dmu_buf_t *zdb, zfs_uio_t *uio, uint64_t size);
|
||||||
int dmu_read_uio_dbuf(dmu_buf_t *zdb, zfs_uio_t *uio, uint64_t size,
|
int dmu_read_uio_dnode(dnode_t *dn, zfs_uio_t *uio, uint64_t size);
|
||||||
dmu_flags_t flags);
|
|
||||||
int dmu_read_uio_dnode(dnode_t *dn, zfs_uio_t *uio, uint64_t size,
|
|
||||||
dmu_flags_t flags);
|
|
||||||
int dmu_write_uio(objset_t *os, uint64_t object, zfs_uio_t *uio, uint64_t size,
|
int dmu_write_uio(objset_t *os, uint64_t object, zfs_uio_t *uio, uint64_t size,
|
||||||
dmu_tx_t *tx, dmu_flags_t flags);
|
dmu_tx_t *tx);
|
||||||
int dmu_write_uio_dbuf(dmu_buf_t *zdb, zfs_uio_t *uio, uint64_t size,
|
int dmu_write_uio_dbuf(dmu_buf_t *zdb, zfs_uio_t *uio, uint64_t size,
|
||||||
dmu_tx_t *tx, dmu_flags_t flags);
|
dmu_tx_t *tx);
|
||||||
int dmu_write_uio_dnode(dnode_t *dn, zfs_uio_t *uio, uint64_t size,
|
int dmu_write_uio_dnode(dnode_t *dn, zfs_uio_t *uio, uint64_t size,
|
||||||
dmu_tx_t *tx, dmu_flags_t flags);
|
dmu_tx_t *tx);
|
||||||
#endif
|
#endif
|
||||||
struct arc_buf *dmu_request_arcbuf(dmu_buf_t *handle, int size);
|
struct arc_buf *dmu_request_arcbuf(dmu_buf_t *handle, int size);
|
||||||
void dmu_return_arcbuf(struct arc_buf *buf);
|
void dmu_return_arcbuf(struct arc_buf *buf);
|
||||||
int dmu_assign_arcbuf_by_dnode(dnode_t *dn, uint64_t offset,
|
int dmu_assign_arcbuf_by_dnode(dnode_t *dn, uint64_t offset,
|
||||||
struct arc_buf *buf, dmu_tx_t *tx, dmu_flags_t flags);
|
struct arc_buf *buf, dmu_tx_t *tx);
|
||||||
int dmu_assign_arcbuf_by_dbuf(dmu_buf_t *handle, uint64_t offset,
|
int dmu_assign_arcbuf_by_dbuf(dmu_buf_t *handle, uint64_t offset,
|
||||||
struct arc_buf *buf, dmu_tx_t *tx, dmu_flags_t flags);
|
struct arc_buf *buf, dmu_tx_t *tx);
|
||||||
#define dmu_assign_arcbuf dmu_assign_arcbuf_by_dbuf
|
#define dmu_assign_arcbuf dmu_assign_arcbuf_by_dbuf
|
||||||
extern uint_t zfs_max_recordsize;
|
extern uint_t zfs_max_recordsize;
|
||||||
|
|
||||||
@ -1017,11 +980,6 @@ void dmu_object_size_from_db(dmu_buf_t *db, uint32_t *blksize,
|
|||||||
|
|
||||||
void dmu_object_dnsize_from_db(dmu_buf_t *db, int *dnsize);
|
void dmu_object_dnsize_from_db(dmu_buf_t *db, int *dnsize);
|
||||||
|
|
||||||
typedef enum {
|
|
||||||
DDS_FLAG_ENCRYPTED = (1<<0),
|
|
||||||
DDS_FLAG_HAS_ENCRYPTED = (1<<7),
|
|
||||||
} dmu_objset_flag_t;
|
|
||||||
|
|
||||||
typedef struct dmu_objset_stats {
|
typedef struct dmu_objset_stats {
|
||||||
uint64_t dds_num_clones; /* number of clones of this */
|
uint64_t dds_num_clones; /* number of clones of this */
|
||||||
uint64_t dds_creation_txg;
|
uint64_t dds_creation_txg;
|
||||||
@ -1031,7 +989,6 @@ typedef struct dmu_objset_stats {
|
|||||||
uint8_t dds_inconsistent;
|
uint8_t dds_inconsistent;
|
||||||
uint8_t dds_redacted;
|
uint8_t dds_redacted;
|
||||||
char dds_origin[ZFS_MAX_DATASET_NAME_LEN];
|
char dds_origin[ZFS_MAX_DATASET_NAME_LEN];
|
||||||
uint8_t dds_flags; /* dmu_objset_flag_t */
|
|
||||||
} dmu_objset_stats_t;
|
} dmu_objset_stats_t;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -270,13 +270,11 @@ void dmu_object_zapify(objset_t *, uint64_t, dmu_object_type_t, dmu_tx_t *);
|
|||||||
void dmu_object_free_zapified(objset_t *, uint64_t, dmu_tx_t *);
|
void dmu_object_free_zapified(objset_t *, uint64_t, dmu_tx_t *);
|
||||||
|
|
||||||
int dmu_write_direct(zio_t *, dmu_buf_impl_t *, abd_t *, dmu_tx_t *);
|
int dmu_write_direct(zio_t *, dmu_buf_impl_t *, abd_t *, dmu_tx_t *);
|
||||||
int dmu_read_abd(dnode_t *, uint64_t, uint64_t, abd_t *, dmu_flags_t);
|
int dmu_read_abd(dnode_t *, uint64_t, uint64_t, abd_t *, uint32_t flags);
|
||||||
int dmu_write_abd(dnode_t *, uint64_t, uint64_t, abd_t *, dmu_flags_t,
|
int dmu_write_abd(dnode_t *, uint64_t, uint64_t, abd_t *, uint32_t, dmu_tx_t *);
|
||||||
dmu_tx_t *);
|
|
||||||
#if defined(_KERNEL)
|
#if defined(_KERNEL)
|
||||||
int dmu_read_uio_direct(dnode_t *, zfs_uio_t *, uint64_t, dmu_flags_t);
|
int dmu_read_uio_direct(dnode_t *, zfs_uio_t *, uint64_t);
|
||||||
int dmu_write_uio_direct(dnode_t *, zfs_uio_t *, uint64_t, dmu_flags_t,
|
int dmu_write_uio_direct(dnode_t *, zfs_uio_t *, uint64_t, dmu_tx_t *);
|
||||||
dmu_tx_t *);
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
|
@ -60,6 +60,7 @@ typedef struct dmu_recv_cookie {
|
|||||||
uint64_t drc_ivset_guid;
|
uint64_t drc_ivset_guid;
|
||||||
void *drc_owner;
|
void *drc_owner;
|
||||||
cred_t *drc_cred;
|
cred_t *drc_cred;
|
||||||
|
proc_t *drc_proc;
|
||||||
nvlist_t *drc_begin_nvl;
|
nvlist_t *drc_begin_nvl;
|
||||||
|
|
||||||
objset_t *drc_os;
|
objset_t *drc_os;
|
||||||
|
@ -25,7 +25,6 @@
|
|||||||
*/
|
*/
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2012, 2016 by Delphix. All rights reserved.
|
* Copyright (c) 2012, 2016 by Delphix. All rights reserved.
|
||||||
* Copyright (c) 2025, Klara, Inc.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef _SYS_DMU_TX_H
|
#ifndef _SYS_DMU_TX_H
|
||||||
@ -81,9 +80,6 @@ struct dmu_tx {
|
|||||||
/* has this transaction already been delayed? */
|
/* has this transaction already been delayed? */
|
||||||
boolean_t tx_dirty_delayed;
|
boolean_t tx_dirty_delayed;
|
||||||
|
|
||||||
/* whether dmu_tx_wait() should return on suspend */
|
|
||||||
boolean_t tx_break_on_suspend;
|
|
||||||
|
|
||||||
int tx_err;
|
int tx_err;
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -147,7 +143,7 @@ extern dmu_tx_stats_t dmu_tx_stats;
|
|||||||
* These routines are defined in dmu.h, and are called by the user.
|
* These routines are defined in dmu.h, and are called by the user.
|
||||||
*/
|
*/
|
||||||
dmu_tx_t *dmu_tx_create(objset_t *dd);
|
dmu_tx_t *dmu_tx_create(objset_t *dd);
|
||||||
int dmu_tx_assign(dmu_tx_t *tx, dmu_tx_flag_t flags);
|
int dmu_tx_assign(dmu_tx_t *tx, uint64_t txg_how);
|
||||||
void dmu_tx_commit(dmu_tx_t *tx);
|
void dmu_tx_commit(dmu_tx_t *tx);
|
||||||
void dmu_tx_abort(dmu_tx_t *tx);
|
void dmu_tx_abort(dmu_tx_t *tx);
|
||||||
uint64_t dmu_tx_get_txg(dmu_tx_t *tx);
|
uint64_t dmu_tx_get_txg(dmu_tx_t *tx);
|
||||||
|
@ -81,10 +81,9 @@ void dmu_zfetch_init(zfetch_t *, struct dnode *);
|
|||||||
void dmu_zfetch_fini(zfetch_t *);
|
void dmu_zfetch_fini(zfetch_t *);
|
||||||
zstream_t *dmu_zfetch_prepare(zfetch_t *, uint64_t, uint64_t, boolean_t,
|
zstream_t *dmu_zfetch_prepare(zfetch_t *, uint64_t, uint64_t, boolean_t,
|
||||||
boolean_t);
|
boolean_t);
|
||||||
void dmu_zfetch_run(zfetch_t *, zstream_t *, boolean_t, boolean_t,
|
void dmu_zfetch_run(zfetch_t *, zstream_t *, boolean_t, boolean_t);
|
||||||
boolean_t);
|
|
||||||
void dmu_zfetch(zfetch_t *, uint64_t, uint64_t, boolean_t, boolean_t,
|
void dmu_zfetch(zfetch_t *, uint64_t, uint64_t, boolean_t, boolean_t,
|
||||||
boolean_t, boolean_t);
|
boolean_t);
|
||||||
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
|
@ -276,12 +276,6 @@ dsl_dataset_phys(dsl_dataset_t *ds)
|
|||||||
return ((dsl_dataset_phys_t *)ds->ds_dbuf->db_data);
|
return ((dsl_dataset_phys_t *)ds->ds_dbuf->db_data);
|
||||||
}
|
}
|
||||||
|
|
||||||
typedef struct dsl_dataset_clone_arg_t {
|
|
||||||
const char *ddca_clone;
|
|
||||||
const char *ddca_origin;
|
|
||||||
cred_t *ddca_cred;
|
|
||||||
} dsl_dataset_clone_arg_t;
|
|
||||||
|
|
||||||
typedef struct dsl_dataset_promote_arg {
|
typedef struct dsl_dataset_promote_arg {
|
||||||
const char *ddpa_clonename;
|
const char *ddpa_clonename;
|
||||||
dsl_dataset_t *ddpa_clone;
|
dsl_dataset_t *ddpa_clone;
|
||||||
@ -290,6 +284,7 @@ typedef struct dsl_dataset_promote_arg {
|
|||||||
uint64_t used, comp, uncomp, unique, cloneusedsnap, originusedsnap;
|
uint64_t used, comp, uncomp, unique, cloneusedsnap, originusedsnap;
|
||||||
nvlist_t *err_ds;
|
nvlist_t *err_ds;
|
||||||
cred_t *cr;
|
cred_t *cr;
|
||||||
|
proc_t *proc;
|
||||||
} dsl_dataset_promote_arg_t;
|
} dsl_dataset_promote_arg_t;
|
||||||
|
|
||||||
typedef struct dsl_dataset_rollback_arg {
|
typedef struct dsl_dataset_rollback_arg {
|
||||||
@ -304,6 +299,7 @@ typedef struct dsl_dataset_snapshot_arg {
|
|||||||
nvlist_t *ddsa_props;
|
nvlist_t *ddsa_props;
|
||||||
nvlist_t *ddsa_errors;
|
nvlist_t *ddsa_errors;
|
||||||
cred_t *ddsa_cr;
|
cred_t *ddsa_cr;
|
||||||
|
proc_t *ddsa_proc;
|
||||||
} dsl_dataset_snapshot_arg_t;
|
} dsl_dataset_snapshot_arg_t;
|
||||||
|
|
||||||
typedef struct dsl_dataset_rename_snapshot_arg {
|
typedef struct dsl_dataset_rename_snapshot_arg {
|
||||||
@ -370,9 +366,6 @@ uint64_t dsl_dataset_create_sync_dd(dsl_dir_t *dd, dsl_dataset_t *origin,
|
|||||||
void dsl_dataset_snapshot_sync(void *arg, dmu_tx_t *tx);
|
void dsl_dataset_snapshot_sync(void *arg, dmu_tx_t *tx);
|
||||||
int dsl_dataset_snapshot_check(void *arg, dmu_tx_t *tx);
|
int dsl_dataset_snapshot_check(void *arg, dmu_tx_t *tx);
|
||||||
int dsl_dataset_snapshot(nvlist_t *snaps, nvlist_t *props, nvlist_t *errors);
|
int dsl_dataset_snapshot(nvlist_t *snaps, nvlist_t *props, nvlist_t *errors);
|
||||||
void dsl_dataset_clone_sync(void *arg, dmu_tx_t *tx);
|
|
||||||
int dsl_dataset_clone_check(void *arg, dmu_tx_t *tx);
|
|
||||||
int dsl_dataset_clone(const char *clone, const char *origin);
|
|
||||||
void dsl_dataset_promote_sync(void *arg, dmu_tx_t *tx);
|
void dsl_dataset_promote_sync(void *arg, dmu_tx_t *tx);
|
||||||
int dsl_dataset_promote_check(void *arg, dmu_tx_t *tx);
|
int dsl_dataset_promote_check(void *arg, dmu_tx_t *tx);
|
||||||
int dsl_dataset_promote(const char *name, char *conflsnap);
|
int dsl_dataset_promote(const char *name, char *conflsnap);
|
||||||
@ -466,7 +459,7 @@ int dsl_dataset_clone_swap_check_impl(dsl_dataset_t *clone,
|
|||||||
void dsl_dataset_clone_swap_sync_impl(dsl_dataset_t *clone,
|
void dsl_dataset_clone_swap_sync_impl(dsl_dataset_t *clone,
|
||||||
dsl_dataset_t *origin_head, dmu_tx_t *tx);
|
dsl_dataset_t *origin_head, dmu_tx_t *tx);
|
||||||
int dsl_dataset_snapshot_check_impl(dsl_dataset_t *ds, const char *snapname,
|
int dsl_dataset_snapshot_check_impl(dsl_dataset_t *ds, const char *snapname,
|
||||||
dmu_tx_t *tx, boolean_t recv, uint64_t cnt, cred_t *cr);
|
dmu_tx_t *tx, boolean_t recv, uint64_t cnt, cred_t *cr, proc_t *proc);
|
||||||
void dsl_dataset_snapshot_sync_impl(dsl_dataset_t *ds, const char *snapname,
|
void dsl_dataset_snapshot_sync_impl(dsl_dataset_t *ds, const char *snapname,
|
||||||
dmu_tx_t *tx);
|
dmu_tx_t *tx);
|
||||||
|
|
||||||
|
@ -185,11 +185,11 @@ int dsl_dir_set_reservation(const char *ddname, zprop_source_t source,
|
|||||||
uint64_t reservation);
|
uint64_t reservation);
|
||||||
int dsl_dir_activate_fs_ss_limit(const char *);
|
int dsl_dir_activate_fs_ss_limit(const char *);
|
||||||
int dsl_fs_ss_limit_check(dsl_dir_t *, uint64_t, zfs_prop_t, dsl_dir_t *,
|
int dsl_fs_ss_limit_check(dsl_dir_t *, uint64_t, zfs_prop_t, dsl_dir_t *,
|
||||||
cred_t *);
|
cred_t *, proc_t *);
|
||||||
void dsl_fs_ss_count_adjust(dsl_dir_t *, int64_t, const char *, dmu_tx_t *);
|
void dsl_fs_ss_count_adjust(dsl_dir_t *, int64_t, const char *, dmu_tx_t *);
|
||||||
int dsl_dir_rename(const char *oldname, const char *newname);
|
int dsl_dir_rename(const char *oldname, const char *newname);
|
||||||
int dsl_dir_transfer_possible(dsl_dir_t *sdd, dsl_dir_t *tdd,
|
int dsl_dir_transfer_possible(dsl_dir_t *sdd, dsl_dir_t *tdd,
|
||||||
uint64_t fs_cnt, uint64_t ss_cnt, uint64_t space, cred_t *);
|
uint64_t fs_cnt, uint64_t ss_cnt, uint64_t space, cred_t *, proc_t *);
|
||||||
boolean_t dsl_dir_is_clone(dsl_dir_t *dd);
|
boolean_t dsl_dir_is_clone(dsl_dir_t *dd);
|
||||||
void dsl_dir_new_refreservation(dsl_dir_t *dd, struct dsl_dataset *ds,
|
void dsl_dir_new_refreservation(dsl_dir_t *dd, struct dsl_dataset *ds,
|
||||||
uint64_t reservation, cred_t *cr, dmu_tx_t *tx);
|
uint64_t reservation, cred_t *cr, dmu_tx_t *tx);
|
||||||
|
@ -64,8 +64,6 @@ extern uint64_t zfs_wrlog_data_max;
|
|||||||
extern uint_t zfs_dirty_data_max_percent;
|
extern uint_t zfs_dirty_data_max_percent;
|
||||||
extern uint_t zfs_dirty_data_max_max_percent;
|
extern uint_t zfs_dirty_data_max_max_percent;
|
||||||
extern uint_t zfs_delay_min_dirty_percent;
|
extern uint_t zfs_delay_min_dirty_percent;
|
||||||
extern uint_t zfs_vdev_async_write_active_min_dirty_percent;
|
|
||||||
extern uint_t zfs_vdev_async_write_active_max_dirty_percent;
|
|
||||||
extern uint64_t zfs_delay_scale;
|
extern uint64_t zfs_delay_scale;
|
||||||
|
|
||||||
/* These macros are for indexing into the zfs_all_blkstats_t. */
|
/* These macros are for indexing into the zfs_all_blkstats_t. */
|
||||||
|
@ -103,7 +103,6 @@ extern "C" {
|
|||||||
#define FM_EREPORT_PAYLOAD_ZFS_ZIO_FLAGS "zio_flags"
|
#define FM_EREPORT_PAYLOAD_ZFS_ZIO_FLAGS "zio_flags"
|
||||||
#define FM_EREPORT_PAYLOAD_ZFS_ZIO_STAGE "zio_stage"
|
#define FM_EREPORT_PAYLOAD_ZFS_ZIO_STAGE "zio_stage"
|
||||||
#define FM_EREPORT_PAYLOAD_ZFS_ZIO_PRIORITY "zio_priority"
|
#define FM_EREPORT_PAYLOAD_ZFS_ZIO_PRIORITY "zio_priority"
|
||||||
#define FM_EREPORT_PAYLOAD_ZFS_ZIO_TYPE "zio_type"
|
|
||||||
#define FM_EREPORT_PAYLOAD_ZFS_ZIO_PIPELINE "zio_pipeline"
|
#define FM_EREPORT_PAYLOAD_ZFS_ZIO_PIPELINE "zio_pipeline"
|
||||||
#define FM_EREPORT_PAYLOAD_ZFS_ZIO_DELAY "zio_delay"
|
#define FM_EREPORT_PAYLOAD_ZFS_ZIO_DELAY "zio_delay"
|
||||||
#define FM_EREPORT_PAYLOAD_ZFS_ZIO_TIMESTAMP "zio_timestamp"
|
#define FM_EREPORT_PAYLOAD_ZFS_ZIO_TIMESTAMP "zio_timestamp"
|
||||||
|
@ -31,16 +31,8 @@ extern "C" {
|
|||||||
#else
|
#else
|
||||||
#include <linux/frame.h>
|
#include <linux/frame.h>
|
||||||
#endif
|
#endif
|
||||||
#if defined(_ASM) && ! defined(HAVE_STACK_FRAME_NON_STANDARD_ASM)
|
|
||||||
.macro STACK_FRAME_NON_STANDARD func:req
|
|
||||||
.endm
|
|
||||||
#endif
|
|
||||||
#else
|
#else
|
||||||
#define STACK_FRAME_NON_STANDARD(func)
|
#define STACK_FRAME_NON_STANDARD(func)
|
||||||
#if defined(_ASM)
|
|
||||||
.macro STACK_FRAME_NON_STANDARD func:req
|
|
||||||
.endm
|
|
||||||
#endif
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
|
@ -197,12 +197,6 @@ typedef enum {
|
|||||||
ZFS_PROP_VOLTHREADING,
|
ZFS_PROP_VOLTHREADING,
|
||||||
ZFS_PROP_DIRECT,
|
ZFS_PROP_DIRECT,
|
||||||
ZFS_PROP_LONGNAME,
|
ZFS_PROP_LONGNAME,
|
||||||
ZFS_PROP_DEFAULTUSERQUOTA,
|
|
||||||
ZFS_PROP_DEFAULTGROUPQUOTA,
|
|
||||||
ZFS_PROP_DEFAULTPROJECTQUOTA,
|
|
||||||
ZFS_PROP_DEFAULTUSEROBJQUOTA,
|
|
||||||
ZFS_PROP_DEFAULTGROUPOBJQUOTA,
|
|
||||||
ZFS_PROP_DEFAULTPROJECTOBJQUOTA,
|
|
||||||
ZFS_NUM_PROPS
|
ZFS_NUM_PROPS
|
||||||
} zfs_prop_t;
|
} zfs_prop_t;
|
||||||
|
|
||||||
@ -1620,15 +1614,6 @@ typedef enum zfs_ioc {
|
|||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
typedef struct zfs_rewrite_args {
|
|
||||||
uint64_t off;
|
|
||||||
uint64_t len;
|
|
||||||
uint64_t flags;
|
|
||||||
uint64_t arg;
|
|
||||||
} zfs_rewrite_args_t;
|
|
||||||
|
|
||||||
#define ZFS_IOC_REWRITE _IOW(0x83, 3, zfs_rewrite_args_t)
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* ZFS-specific error codes used for returning descriptive errors
|
* ZFS-specific error codes used for returning descriptive errors
|
||||||
* to the userland through zfs ioctls.
|
* to the userland through zfs ioctls.
|
||||||
|
@ -41,7 +41,7 @@ extern "C" {
|
|||||||
|
|
||||||
typedef struct metaslab_ops {
|
typedef struct metaslab_ops {
|
||||||
const char *msop_name;
|
const char *msop_name;
|
||||||
uint64_t (*msop_alloc)(metaslab_t *, uint64_t, uint64_t, uint64_t *);
|
uint64_t (*msop_alloc)(metaslab_t *, uint64_t);
|
||||||
} metaslab_ops_t;
|
} metaslab_ops_t;
|
||||||
|
|
||||||
|
|
||||||
@ -75,18 +75,20 @@ uint64_t metaslab_largest_allocatable(metaslab_t *);
|
|||||||
/*
|
/*
|
||||||
* metaslab alloc flags
|
* metaslab alloc flags
|
||||||
*/
|
*/
|
||||||
#define METASLAB_ZIL 0x1
|
#define METASLAB_HINTBP_FAVOR 0x0
|
||||||
|
#define METASLAB_HINTBP_AVOID 0x1
|
||||||
#define METASLAB_GANG_HEADER 0x2
|
#define METASLAB_GANG_HEADER 0x2
|
||||||
#define METASLAB_GANG_CHILD 0x4
|
#define METASLAB_GANG_CHILD 0x4
|
||||||
#define METASLAB_ASYNC_ALLOC 0x8
|
#define METASLAB_ASYNC_ALLOC 0x8
|
||||||
|
#define METASLAB_DONT_THROTTLE 0x10
|
||||||
|
#define METASLAB_MUST_RESERVE 0x20
|
||||||
|
#define METASLAB_ZIL 0x80
|
||||||
|
|
||||||
int metaslab_alloc(spa_t *, metaslab_class_t *, uint64_t, blkptr_t *, int,
|
int metaslab_alloc(spa_t *, metaslab_class_t *, uint64_t,
|
||||||
uint64_t, const blkptr_t *, int, zio_alloc_list_t *, int, const void *);
|
blkptr_t *, int, uint64_t, blkptr_t *, int, zio_alloc_list_t *, zio_t *,
|
||||||
int metaslab_alloc_range(spa_t *, metaslab_class_t *, uint64_t, uint64_t,
|
int);
|
||||||
blkptr_t *, int, uint64_t, const blkptr_t *, int, zio_alloc_list_t *,
|
|
||||||
int, const void *, uint64_t *);
|
|
||||||
int metaslab_alloc_dva(spa_t *, metaslab_class_t *, uint64_t,
|
int metaslab_alloc_dva(spa_t *, metaslab_class_t *, uint64_t,
|
||||||
dva_t *, int, const dva_t *, uint64_t, int, zio_alloc_list_t *, int);
|
dva_t *, int, dva_t *, uint64_t, int, zio_alloc_list_t *, int);
|
||||||
void metaslab_free(spa_t *, const blkptr_t *, uint64_t, boolean_t);
|
void metaslab_free(spa_t *, const blkptr_t *, uint64_t, boolean_t);
|
||||||
void metaslab_free_concrete(vdev_t *, uint64_t, uint64_t, boolean_t);
|
void metaslab_free_concrete(vdev_t *, uint64_t, uint64_t, boolean_t);
|
||||||
void metaslab_free_dva(spa_t *, const dva_t *, boolean_t);
|
void metaslab_free_dva(spa_t *, const dva_t *, boolean_t);
|
||||||
@ -98,23 +100,19 @@ void metaslab_check_free(spa_t *, const blkptr_t *);
|
|||||||
|
|
||||||
void metaslab_stat_init(void);
|
void metaslab_stat_init(void);
|
||||||
void metaslab_stat_fini(void);
|
void metaslab_stat_fini(void);
|
||||||
void metaslab_trace_move(zio_alloc_list_t *, zio_alloc_list_t *);
|
|
||||||
void metaslab_trace_init(zio_alloc_list_t *);
|
void metaslab_trace_init(zio_alloc_list_t *);
|
||||||
void metaslab_trace_fini(zio_alloc_list_t *);
|
void metaslab_trace_fini(zio_alloc_list_t *);
|
||||||
|
|
||||||
metaslab_class_t *metaslab_class_create(spa_t *, const char *,
|
metaslab_class_t *metaslab_class_create(spa_t *, const metaslab_ops_t *);
|
||||||
const metaslab_ops_t *, boolean_t);
|
|
||||||
void metaslab_class_destroy(metaslab_class_t *);
|
void metaslab_class_destroy(metaslab_class_t *);
|
||||||
void metaslab_class_validate(metaslab_class_t *);
|
int metaslab_class_validate(metaslab_class_t *);
|
||||||
void metaslab_class_balance(metaslab_class_t *mc, boolean_t onsync);
|
|
||||||
void metaslab_class_histogram_verify(metaslab_class_t *);
|
void metaslab_class_histogram_verify(metaslab_class_t *);
|
||||||
uint64_t metaslab_class_fragmentation(metaslab_class_t *);
|
uint64_t metaslab_class_fragmentation(metaslab_class_t *);
|
||||||
uint64_t metaslab_class_expandable_space(metaslab_class_t *);
|
uint64_t metaslab_class_expandable_space(metaslab_class_t *);
|
||||||
boolean_t metaslab_class_throttle_reserve(metaslab_class_t *, int, zio_t *,
|
boolean_t metaslab_class_throttle_reserve(metaslab_class_t *, int, int,
|
||||||
boolean_t, boolean_t *);
|
zio_t *, int);
|
||||||
boolean_t metaslab_class_throttle_unreserve(metaslab_class_t *, int, zio_t *);
|
void metaslab_class_throttle_unreserve(metaslab_class_t *, int, int, zio_t *);
|
||||||
void metaslab_class_evict_old(metaslab_class_t *, uint64_t);
|
void metaslab_class_evict_old(metaslab_class_t *, uint64_t);
|
||||||
const char *metaslab_class_get_name(metaslab_class_t *);
|
|
||||||
uint64_t metaslab_class_get_alloc(metaslab_class_t *);
|
uint64_t metaslab_class_get_alloc(metaslab_class_t *);
|
||||||
uint64_t metaslab_class_get_space(metaslab_class_t *);
|
uint64_t metaslab_class_get_space(metaslab_class_t *);
|
||||||
uint64_t metaslab_class_get_dspace(metaslab_class_t *);
|
uint64_t metaslab_class_get_dspace(metaslab_class_t *);
|
||||||
@ -123,7 +121,7 @@ uint64_t metaslab_class_get_deferred(metaslab_class_t *);
|
|||||||
void metaslab_space_update(vdev_t *, metaslab_class_t *,
|
void metaslab_space_update(vdev_t *, metaslab_class_t *,
|
||||||
int64_t, int64_t, int64_t);
|
int64_t, int64_t, int64_t);
|
||||||
|
|
||||||
metaslab_group_t *metaslab_group_create(metaslab_class_t *, vdev_t *);
|
metaslab_group_t *metaslab_group_create(metaslab_class_t *, vdev_t *, int);
|
||||||
void metaslab_group_destroy(metaslab_group_t *);
|
void metaslab_group_destroy(metaslab_group_t *);
|
||||||
void metaslab_group_activate(metaslab_group_t *);
|
void metaslab_group_activate(metaslab_group_t *);
|
||||||
void metaslab_group_passivate(metaslab_group_t *);
|
void metaslab_group_passivate(metaslab_group_t *);
|
||||||
@ -132,10 +130,9 @@ uint64_t metaslab_group_get_space(metaslab_group_t *);
|
|||||||
void metaslab_group_histogram_verify(metaslab_group_t *);
|
void metaslab_group_histogram_verify(metaslab_group_t *);
|
||||||
uint64_t metaslab_group_fragmentation(metaslab_group_t *);
|
uint64_t metaslab_group_fragmentation(metaslab_group_t *);
|
||||||
void metaslab_group_histogram_remove(metaslab_group_t *, metaslab_t *);
|
void metaslab_group_histogram_remove(metaslab_group_t *, metaslab_t *);
|
||||||
void metaslab_group_alloc_increment_all(spa_t *, blkptr_t *, int, int,
|
void metaslab_group_alloc_decrement(spa_t *, uint64_t, const void *, int, int,
|
||||||
uint64_t, const void *);
|
boolean_t);
|
||||||
void metaslab_group_alloc_decrement(spa_t *, uint64_t, int, int, uint64_t,
|
void metaslab_group_alloc_verify(spa_t *, const blkptr_t *, const void *, int);
|
||||||
const void *);
|
|
||||||
void metaslab_recalculate_weight_and_sort(metaslab_t *);
|
void metaslab_recalculate_weight_and_sort(metaslab_t *);
|
||||||
void metaslab_disable(metaslab_t *);
|
void metaslab_disable(metaslab_t *);
|
||||||
void metaslab_enable(metaslab_t *, boolean_t, boolean_t);
|
void metaslab_enable(metaslab_t *, boolean_t, boolean_t);
|
||||||
|
@ -141,24 +141,23 @@ typedef enum trace_alloc_type {
|
|||||||
* Per-allocator data structure.
|
* Per-allocator data structure.
|
||||||
*/
|
*/
|
||||||
typedef struct metaslab_class_allocator {
|
typedef struct metaslab_class_allocator {
|
||||||
kmutex_t mca_lock;
|
|
||||||
avl_tree_t mca_tree;
|
|
||||||
|
|
||||||
metaslab_group_t *mca_rotor;
|
metaslab_group_t *mca_rotor;
|
||||||
uint64_t mca_aliquot;
|
uint64_t mca_aliquot;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* The allocation throttle works on a reservation system. Whenever
|
* The allocation throttle works on a reservation system. Whenever
|
||||||
* an asynchronous zio wants to perform an allocation it must
|
* an asynchronous zio wants to perform an allocation it must
|
||||||
* first reserve the number of bytes that it wants to allocate.
|
* first reserve the number of blocks that it wants to allocate.
|
||||||
* If there aren't sufficient slots available for the pending zio
|
* If there aren't sufficient slots available for the pending zio
|
||||||
* then that I/O is throttled until more slots free up. The current
|
* then that I/O is throttled until more slots free up. The current
|
||||||
* size of reserved allocations is maintained by mca_reserved.
|
* number of reserved allocations is maintained by the mca_alloc_slots
|
||||||
* The maximum total size of reserved allocations is determined by
|
* refcount. The mca_alloc_max_slots value determines the maximum
|
||||||
* mc_alloc_max in the metaslab_class_t. Gang blocks are allowed
|
* number of allocations that the system allows. Gang blocks are
|
||||||
* to reserve for their headers even if we've reached the maximum.
|
* allowed to reserve slots even if we've reached the maximum
|
||||||
|
* number of allocations allowed.
|
||||||
*/
|
*/
|
||||||
uint64_t mca_reserved;
|
uint64_t mca_alloc_max_slots;
|
||||||
|
zfs_refcount_t mca_alloc_slots;
|
||||||
} ____cacheline_aligned metaslab_class_allocator_t;
|
} ____cacheline_aligned metaslab_class_allocator_t;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -181,8 +180,7 @@ typedef struct metaslab_class_allocator {
|
|||||||
struct metaslab_class {
|
struct metaslab_class {
|
||||||
kmutex_t mc_lock;
|
kmutex_t mc_lock;
|
||||||
spa_t *mc_spa;
|
spa_t *mc_spa;
|
||||||
const char *mc_name;
|
const metaslab_ops_t *mc_ops;
|
||||||
const metaslab_ops_t *mc_ops;
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Track the number of metaslab groups that have been initialized
|
* Track the number of metaslab groups that have been initialized
|
||||||
@ -192,10 +190,10 @@ struct metaslab_class {
|
|||||||
*/
|
*/
|
||||||
uint64_t mc_groups;
|
uint64_t mc_groups;
|
||||||
|
|
||||||
boolean_t mc_is_log;
|
/*
|
||||||
|
* Toggle to enable/disable the allocation throttle.
|
||||||
|
*/
|
||||||
boolean_t mc_alloc_throttle_enabled;
|
boolean_t mc_alloc_throttle_enabled;
|
||||||
uint64_t mc_alloc_io_size;
|
|
||||||
uint64_t mc_alloc_max;
|
|
||||||
|
|
||||||
uint64_t mc_alloc_groups; /* # of allocatable groups */
|
uint64_t mc_alloc_groups; /* # of allocatable groups */
|
||||||
|
|
||||||
@ -218,10 +216,11 @@ struct metaslab_class {
|
|||||||
* Per-allocator data structure.
|
* Per-allocator data structure.
|
||||||
*/
|
*/
|
||||||
typedef struct metaslab_group_allocator {
|
typedef struct metaslab_group_allocator {
|
||||||
zfs_refcount_t mga_queue_depth;
|
uint64_t mga_cur_max_alloc_queue_depth;
|
||||||
|
zfs_refcount_t mga_alloc_queue_depth;
|
||||||
metaslab_t *mga_primary;
|
metaslab_t *mga_primary;
|
||||||
metaslab_t *mga_secondary;
|
metaslab_t *mga_secondary;
|
||||||
} ____cacheline_aligned metaslab_group_allocator_t;
|
} metaslab_group_allocator_t;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Metaslab groups encapsulate all the allocatable regions (i.e. metaslabs)
|
* Metaslab groups encapsulate all the allocatable regions (i.e. metaslabs)
|
||||||
@ -236,7 +235,6 @@ struct metaslab_group {
|
|||||||
kmutex_t mg_lock;
|
kmutex_t mg_lock;
|
||||||
avl_tree_t mg_metaslab_tree;
|
avl_tree_t mg_metaslab_tree;
|
||||||
uint64_t mg_aliquot;
|
uint64_t mg_aliquot;
|
||||||
uint64_t mg_queue_target;
|
|
||||||
boolean_t mg_allocatable; /* can we allocate? */
|
boolean_t mg_allocatable; /* can we allocate? */
|
||||||
uint64_t mg_ms_ready;
|
uint64_t mg_ms_ready;
|
||||||
|
|
||||||
@ -248,12 +246,40 @@ struct metaslab_group {
|
|||||||
*/
|
*/
|
||||||
boolean_t mg_initialized;
|
boolean_t mg_initialized;
|
||||||
|
|
||||||
|
uint64_t mg_free_capacity; /* percentage free */
|
||||||
|
int64_t mg_bias;
|
||||||
int64_t mg_activation_count;
|
int64_t mg_activation_count;
|
||||||
metaslab_class_t *mg_class;
|
metaslab_class_t *mg_class;
|
||||||
vdev_t *mg_vd;
|
vdev_t *mg_vd;
|
||||||
metaslab_group_t *mg_prev;
|
metaslab_group_t *mg_prev;
|
||||||
metaslab_group_t *mg_next;
|
metaslab_group_t *mg_next;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* In order for the allocation throttle to function properly, we cannot
|
||||||
|
* have too many IOs going to each disk by default; the throttle
|
||||||
|
* operates by allocating more work to disks that finish quickly, so
|
||||||
|
* allocating larger chunks to each disk reduces its effectiveness.
|
||||||
|
* However, if the number of IOs going to each allocator is too small,
|
||||||
|
* we will not perform proper aggregation at the vdev_queue layer,
|
||||||
|
* also resulting in decreased performance. Therefore, we will use a
|
||||||
|
* ramp-up strategy.
|
||||||
|
*
|
||||||
|
* Each allocator in each metaslab group has a current queue depth
|
||||||
|
* (mg_alloc_queue_depth[allocator]) and a current max queue depth
|
||||||
|
* (mga_cur_max_alloc_queue_depth[allocator]), and each metaslab group
|
||||||
|
* has an absolute max queue depth (mg_max_alloc_queue_depth). We
|
||||||
|
* add IOs to an allocator until the mg_alloc_queue_depth for that
|
||||||
|
* allocator hits the cur_max. Every time an IO completes for a given
|
||||||
|
* allocator on a given metaslab group, we increment its cur_max until
|
||||||
|
* it reaches mg_max_alloc_queue_depth. The cur_max resets every txg to
|
||||||
|
* help protect against disks that decrease in performance over time.
|
||||||
|
*
|
||||||
|
* It's possible for an allocator to handle more allocations than
|
||||||
|
* its max. This can occur when gang blocks are required or when other
|
||||||
|
* groups are unable to handle their share of allocations.
|
||||||
|
*/
|
||||||
|
uint64_t mg_max_alloc_queue_depth;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* A metalab group that can no longer allocate the minimum block
|
* A metalab group that can no longer allocate the minimum block
|
||||||
* size will set mg_no_free_space. Once a metaslab group is out
|
* size will set mg_no_free_space. Once a metaslab group is out
|
||||||
@ -262,6 +288,8 @@ struct metaslab_group {
|
|||||||
*/
|
*/
|
||||||
boolean_t mg_no_free_space;
|
boolean_t mg_no_free_space;
|
||||||
|
|
||||||
|
uint64_t mg_allocations;
|
||||||
|
uint64_t mg_failed_allocations;
|
||||||
uint64_t mg_fragmentation;
|
uint64_t mg_fragmentation;
|
||||||
uint64_t mg_histogram[ZFS_RANGE_TREE_HISTOGRAM_SIZE];
|
uint64_t mg_histogram[ZFS_RANGE_TREE_HISTOGRAM_SIZE];
|
||||||
|
|
||||||
@ -270,6 +298,7 @@ struct metaslab_group {
|
|||||||
kmutex_t mg_ms_disabled_lock;
|
kmutex_t mg_ms_disabled_lock;
|
||||||
kcondvar_t mg_ms_disabled_cv;
|
kcondvar_t mg_ms_disabled_cv;
|
||||||
|
|
||||||
|
int mg_allocators;
|
||||||
metaslab_group_allocator_t mg_allocator[];
|
metaslab_group_allocator_t mg_allocator[];
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -479,7 +508,7 @@ struct metaslab {
|
|||||||
*/
|
*/
|
||||||
hrtime_t ms_load_time; /* time last loaded */
|
hrtime_t ms_load_time; /* time last loaded */
|
||||||
hrtime_t ms_unload_time; /* time last unloaded */
|
hrtime_t ms_unload_time; /* time last unloaded */
|
||||||
uint64_t ms_selected_time; /* time last allocated from (secs) */
|
hrtime_t ms_selected_time; /* time last allocated from */
|
||||||
|
|
||||||
uint64_t ms_alloc_txg; /* last successful alloc (debug only) */
|
uint64_t ms_alloc_txg; /* last successful alloc (debug only) */
|
||||||
uint64_t ms_max_size; /* maximum allocatable size */
|
uint64_t ms_max_size; /* maximum allocatable size */
|
||||||
|
@ -267,8 +267,6 @@ _SYS_NVPAIR_H int nvlist_lookup_double(const nvlist_t *, const char *,
|
|||||||
double *);
|
double *);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
_SYS_NVPAIR_H int nvlist_snprintf(char *, size_t, nvlist_t *, int);
|
|
||||||
|
|
||||||
_SYS_NVPAIR_H int nvlist_lookup_nvpair(nvlist_t *, const char *, nvpair_t **);
|
_SYS_NVPAIR_H int nvlist_lookup_nvpair(nvlist_t *, const char *, nvpair_t **);
|
||||||
_SYS_NVPAIR_H int nvlist_lookup_nvpair_embedded_index(nvlist_t *, const char *,
|
_SYS_NVPAIR_H int nvlist_lookup_nvpair_embedded_index(nvlist_t *, const char *,
|
||||||
nvpair_t **, int *, const char **);
|
nvpair_t **, int *, const char **);
|
||||||
|
@ -981,9 +981,9 @@ extern void spa_iostats_trim_add(spa_t *spa, trim_type_t type,
|
|||||||
uint64_t extents_skipped, uint64_t bytes_skipped,
|
uint64_t extents_skipped, uint64_t bytes_skipped,
|
||||||
uint64_t extents_failed, uint64_t bytes_failed);
|
uint64_t extents_failed, uint64_t bytes_failed);
|
||||||
extern void spa_iostats_read_add(spa_t *spa, uint64_t size, uint64_t iops,
|
extern void spa_iostats_read_add(spa_t *spa, uint64_t size, uint64_t iops,
|
||||||
dmu_flags_t flags);
|
uint32_t flags);
|
||||||
extern void spa_iostats_write_add(spa_t *spa, uint64_t size, uint64_t iops,
|
extern void spa_iostats_write_add(spa_t *spa, uint64_t size, uint64_t iops,
|
||||||
dmu_flags_t flags);
|
uint32_t flags);
|
||||||
extern void spa_import_progress_add(spa_t *spa);
|
extern void spa_import_progress_add(spa_t *spa);
|
||||||
extern void spa_import_progress_remove(uint64_t spa_guid);
|
extern void spa_import_progress_remove(uint64_t spa_guid);
|
||||||
extern int spa_import_progress_set_mmp_check(uint64_t pool_guid,
|
extern int spa_import_progress_set_mmp_check(uint64_t pool_guid,
|
||||||
@ -1103,7 +1103,6 @@ extern boolean_t spa_guid_exists(uint64_t pool_guid, uint64_t device_guid);
|
|||||||
extern char *spa_strdup(const char *);
|
extern char *spa_strdup(const char *);
|
||||||
extern void spa_strfree(char *);
|
extern void spa_strfree(char *);
|
||||||
extern uint64_t spa_generate_guid(spa_t *spa);
|
extern uint64_t spa_generate_guid(spa_t *spa);
|
||||||
extern uint64_t spa_generate_load_guid(void);
|
|
||||||
extern void snprintf_blkptr(char *buf, size_t buflen, const blkptr_t *bp);
|
extern void snprintf_blkptr(char *buf, size_t buflen, const blkptr_t *bp);
|
||||||
extern void spa_freeze(spa_t *spa);
|
extern void spa_freeze(spa_t *spa);
|
||||||
extern int spa_change_guid(spa_t *spa, const uint64_t *guidp);
|
extern int spa_change_guid(spa_t *spa, const uint64_t *guidp);
|
||||||
@ -1116,9 +1115,7 @@ extern boolean_t spa_has_spare(spa_t *, uint64_t guid);
|
|||||||
extern uint64_t dva_get_dsize_sync(spa_t *spa, const dva_t *dva);
|
extern uint64_t dva_get_dsize_sync(spa_t *spa, const dva_t *dva);
|
||||||
extern uint64_t bp_get_dsize_sync(spa_t *spa, const blkptr_t *bp);
|
extern uint64_t bp_get_dsize_sync(spa_t *spa, const blkptr_t *bp);
|
||||||
extern uint64_t bp_get_dsize(spa_t *spa, const blkptr_t *bp);
|
extern uint64_t bp_get_dsize(spa_t *spa, const blkptr_t *bp);
|
||||||
extern boolean_t spa_has_dedup(spa_t *spa);
|
|
||||||
extern boolean_t spa_has_slogs(spa_t *spa);
|
extern boolean_t spa_has_slogs(spa_t *spa);
|
||||||
extern boolean_t spa_has_special(spa_t *spa);
|
|
||||||
extern boolean_t spa_is_root(spa_t *spa);
|
extern boolean_t spa_is_root(spa_t *spa);
|
||||||
extern boolean_t spa_writeable(spa_t *spa);
|
extern boolean_t spa_writeable(spa_t *spa);
|
||||||
extern boolean_t spa_has_pending_synctask(spa_t *spa);
|
extern boolean_t spa_has_pending_synctask(spa_t *spa);
|
||||||
|
@ -59,6 +59,11 @@
|
|||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
typedef struct spa_alloc {
|
||||||
|
kmutex_t spaa_lock;
|
||||||
|
avl_tree_t spaa_tree;
|
||||||
|
} ____cacheline_aligned spa_alloc_t;
|
||||||
|
|
||||||
typedef struct spa_allocs_use {
|
typedef struct spa_allocs_use {
|
||||||
kmutex_t sau_lock;
|
kmutex_t sau_lock;
|
||||||
uint_t sau_rotor;
|
uint_t sau_rotor;
|
||||||
@ -268,6 +273,12 @@ struct spa {
|
|||||||
uint64_t spa_last_synced_guid; /* last synced guid */
|
uint64_t spa_last_synced_guid; /* last synced guid */
|
||||||
list_t spa_config_dirty_list; /* vdevs with dirty config */
|
list_t spa_config_dirty_list; /* vdevs with dirty config */
|
||||||
list_t spa_state_dirty_list; /* vdevs with dirty state */
|
list_t spa_state_dirty_list; /* vdevs with dirty state */
|
||||||
|
/*
|
||||||
|
* spa_allocs is an array, whose lengths is stored in spa_alloc_count.
|
||||||
|
* There is one tree and one lock for each allocator, to help improve
|
||||||
|
* allocation performance in write-heavy workloads.
|
||||||
|
*/
|
||||||
|
spa_alloc_t *spa_allocs;
|
||||||
spa_allocs_use_t *spa_allocs_use;
|
spa_allocs_use_t *spa_allocs_use;
|
||||||
int spa_alloc_count;
|
int spa_alloc_count;
|
||||||
int spa_active_allocator; /* selectable allocator */
|
int spa_active_allocator; /* selectable allocator */
|
||||||
|
@ -25,7 +25,6 @@
|
|||||||
*/
|
*/
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2012, 2017 by Delphix. All rights reserved.
|
* Copyright (c) 2012, 2017 by Delphix. All rights reserved.
|
||||||
* Copyright (c) 2025, Klara, Inc.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef _SYS_TXG_H
|
#ifndef _SYS_TXG_H
|
||||||
@ -67,23 +66,6 @@ typedef struct txg_list {
|
|||||||
txg_node_t *tl_head[TXG_SIZE];
|
txg_node_t *tl_head[TXG_SIZE];
|
||||||
} txg_list_t;
|
} txg_list_t;
|
||||||
|
|
||||||
/*
|
|
||||||
* Wait flags for txg_wait_synced_flags(). By default (TXG_WAIT_NONE), it will
|
|
||||||
* wait until the wanted txg is reached, or block forever. Additional flags
|
|
||||||
* indicate other conditions that the caller is interested in, that will cause
|
|
||||||
* the wait to break and return an error code describing the condition.
|
|
||||||
*/
|
|
||||||
typedef enum {
|
|
||||||
/* No special flags. Guaranteed to block forever or return 0 */
|
|
||||||
TXG_WAIT_NONE = 0,
|
|
||||||
|
|
||||||
/* If a signal arrives while waiting, abort and return EINTR */
|
|
||||||
TXG_WAIT_SIGNAL = (1 << 0),
|
|
||||||
|
|
||||||
/* If the pool suspends while waiting, abort and return ESHUTDOWN. */
|
|
||||||
TXG_WAIT_SUSPEND = (1 << 1),
|
|
||||||
} txg_wait_flag_t;
|
|
||||||
|
|
||||||
struct dsl_pool;
|
struct dsl_pool;
|
||||||
|
|
||||||
extern void txg_init(struct dsl_pool *dp, uint64_t txg);
|
extern void txg_init(struct dsl_pool *dp, uint64_t txg);
|
||||||
@ -104,21 +86,13 @@ extern void txg_kick(struct dsl_pool *dp, uint64_t txg);
|
|||||||
* Try to make this happen as soon as possible (eg. kick off any
|
* Try to make this happen as soon as possible (eg. kick off any
|
||||||
* necessary syncs immediately). If txg==0, wait for the currently open
|
* necessary syncs immediately). If txg==0, wait for the currently open
|
||||||
* txg to finish syncing.
|
* txg to finish syncing.
|
||||||
* See txg_wait_flag_t above for a description of how the flags affect the wait.
|
|
||||||
*/
|
|
||||||
extern int txg_wait_synced_flags(struct dsl_pool *dp, uint64_t txg,
|
|
||||||
txg_wait_flag_t flags);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Traditional form of txg_wait_synced_flags, waits forever.
|
|
||||||
* Shorthand for VERIFY0(txg_wait_synced_flags(dp, TXG_WAIT_NONE))
|
|
||||||
*/
|
*/
|
||||||
extern void txg_wait_synced(struct dsl_pool *dp, uint64_t txg);
|
extern void txg_wait_synced(struct dsl_pool *dp, uint64_t txg);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Wake all threads waiting in txg_wait_synced_flags() so they can reevaluate.
|
* Wait as above. Returns true if the thread was signaled while waiting.
|
||||||
*/
|
*/
|
||||||
extern void txg_wait_kick(struct dsl_pool *dp);
|
extern boolean_t txg_wait_synced_sig(struct dsl_pool *dp, uint64_t txg);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Wait until the given transaction group, or one after it, is
|
* Wait until the given transaction group, or one after it, is
|
||||||
|
@ -37,6 +37,28 @@
|
|||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Unicode encoding conversion functions and their macros.
|
||||||
|
*/
|
||||||
|
#define UCONV_IN_BIG_ENDIAN 0x0001
|
||||||
|
#define UCONV_OUT_BIG_ENDIAN 0x0002
|
||||||
|
#define UCONV_IN_SYSTEM_ENDIAN 0x0004
|
||||||
|
#define UCONV_OUT_SYSTEM_ENDIAN 0x0008
|
||||||
|
#define UCONV_IN_LITTLE_ENDIAN 0x0010
|
||||||
|
#define UCONV_OUT_LITTLE_ENDIAN 0x0020
|
||||||
|
#define UCONV_IGNORE_NULL 0x0040
|
||||||
|
#define UCONV_IN_ACCEPT_BOM 0x0080
|
||||||
|
#define UCONV_OUT_EMIT_BOM 0x0100
|
||||||
|
|
||||||
|
extern int uconv_u16tou32(const uint16_t *, size_t *, uint32_t *, size_t *,
|
||||||
|
int);
|
||||||
|
extern int uconv_u16tou8(const uint16_t *, size_t *, uchar_t *, size_t *, int);
|
||||||
|
extern int uconv_u32tou16(const uint32_t *, size_t *, uint16_t *, size_t *,
|
||||||
|
int);
|
||||||
|
extern int uconv_u32tou8(const uint32_t *, size_t *, uchar_t *, size_t *, int);
|
||||||
|
extern int uconv_u8tou16(const uchar_t *, size_t *, uint16_t *, size_t *, int);
|
||||||
|
extern int uconv_u8tou32(const uchar_t *, size_t *, uint32_t *, size_t *, int);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* UTF-8 text preparation functions and their macros.
|
* UTF-8 text preparation functions and their macros.
|
||||||
*
|
*
|
||||||
@ -46,9 +68,7 @@ extern "C" {
|
|||||||
*/
|
*/
|
||||||
#define U8_STRCMP_CS (0x00000001)
|
#define U8_STRCMP_CS (0x00000001)
|
||||||
#define U8_STRCMP_CI_UPPER (0x00000002)
|
#define U8_STRCMP_CI_UPPER (0x00000002)
|
||||||
#if 0
|
|
||||||
#define U8_STRCMP_CI_LOWER (0x00000004)
|
#define U8_STRCMP_CI_LOWER (0x00000004)
|
||||||
#endif
|
|
||||||
|
|
||||||
#define U8_CANON_DECOMP (0x00000010)
|
#define U8_CANON_DECOMP (0x00000010)
|
||||||
#define U8_COMPAT_DECOMP (0x00000020)
|
#define U8_COMPAT_DECOMP (0x00000020)
|
||||||
@ -60,9 +80,7 @@ extern "C" {
|
|||||||
#define U8_STRCMP_NFKC (U8_COMPAT_DECOMP | U8_CANON_COMP)
|
#define U8_STRCMP_NFKC (U8_COMPAT_DECOMP | U8_CANON_COMP)
|
||||||
|
|
||||||
#define U8_TEXTPREP_TOUPPER (U8_STRCMP_CI_UPPER)
|
#define U8_TEXTPREP_TOUPPER (U8_STRCMP_CI_UPPER)
|
||||||
#ifdef U8_STRCMP_CI_LOWER
|
|
||||||
#define U8_TEXTPREP_TOLOWER (U8_STRCMP_CI_LOWER)
|
#define U8_TEXTPREP_TOLOWER (U8_STRCMP_CI_LOWER)
|
||||||
#endif
|
|
||||||
|
|
||||||
#define U8_TEXTPREP_NFD (U8_STRCMP_NFD)
|
#define U8_TEXTPREP_NFD (U8_STRCMP_NFD)
|
||||||
#define U8_TEXTPREP_NFC (U8_STRCMP_NFC)
|
#define U8_TEXTPREP_NFC (U8_STRCMP_NFC)
|
||||||
@ -73,12 +91,8 @@ extern "C" {
|
|||||||
#define U8_TEXTPREP_IGNORE_INVALID (0x00020000)
|
#define U8_TEXTPREP_IGNORE_INVALID (0x00020000)
|
||||||
#define U8_TEXTPREP_NOWAIT (0x00040000)
|
#define U8_TEXTPREP_NOWAIT (0x00040000)
|
||||||
|
|
||||||
#if 0
|
|
||||||
#define U8_UNICODE_320 (0)
|
#define U8_UNICODE_320 (0)
|
||||||
#define U8_UNICODE_500 (1)
|
#define U8_UNICODE_500 (1)
|
||||||
#else
|
|
||||||
#define U8_UNICODE_500 (0)
|
|
||||||
#endif
|
|
||||||
#define U8_UNICODE_LATEST (U8_UNICODE_500)
|
#define U8_UNICODE_LATEST (U8_UNICODE_500)
|
||||||
|
|
||||||
#define U8_VALIDATE_ENTIRE (0x00100000)
|
#define U8_VALIDATE_ENTIRE (0x00100000)
|
||||||
|
@ -147,8 +147,7 @@ typedef struct {
|
|||||||
* The common b1_tbl for combining class, decompositions, tolower, and
|
* The common b1_tbl for combining class, decompositions, tolower, and
|
||||||
* toupper case conversion mappings.
|
* toupper case conversion mappings.
|
||||||
*/
|
*/
|
||||||
static const uchar_t u8_common_b1_tbl[U8_UNICODE_LATEST + 1][256] = {
|
static const uchar_t u8_common_b1_tbl[2][256] = {
|
||||||
#ifdef U8_UNICODE_320
|
|
||||||
{
|
{
|
||||||
0, N_, N_, N_, N_, N_, N_, N_,
|
0, N_, N_, N_, N_, N_, N_, N_,
|
||||||
N_, N_, N_, N_, N_, N_, N_, N_,
|
N_, N_, N_, N_, N_, N_, N_, N_,
|
||||||
@ -183,7 +182,6 @@ static const uchar_t u8_common_b1_tbl[U8_UNICODE_LATEST + 1][256] = {
|
|||||||
1, N_, N_, N_, N_, N_, N_, N_,
|
1, N_, N_, N_, N_, N_, N_, N_,
|
||||||
N_, N_, N_, N_, N_, N_, N_, N_,
|
N_, N_, N_, N_, N_, N_, N_, N_,
|
||||||
},
|
},
|
||||||
#endif
|
|
||||||
{
|
{
|
||||||
0, N_, N_, N_, N_, N_, N_, N_,
|
0, N_, N_, N_, N_, N_, N_, N_,
|
||||||
N_, N_, N_, N_, N_, N_, N_, N_,
|
N_, N_, N_, N_, N_, N_, N_, N_,
|
||||||
@ -220,9 +218,7 @@ static const uchar_t u8_common_b1_tbl[U8_UNICODE_LATEST + 1][256] = {
|
|||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
static const uchar_t u8_combining_class_b2_tbl[U8_UNICODE_LATEST + 1][2][256] =
|
static const uchar_t u8_combining_class_b2_tbl[2][2][256] = {
|
||||||
{
|
|
||||||
#ifdef U8_UNICODE_320
|
|
||||||
{
|
{
|
||||||
{
|
{
|
||||||
0, N_, N_, N_, N_, N_, N_, N_,
|
0, N_, N_, N_, N_, N_, N_, N_,
|
||||||
@ -294,7 +290,6 @@ static const uchar_t u8_combining_class_b2_tbl[U8_UNICODE_LATEST + 1][2][256] =
|
|||||||
},
|
},
|
||||||
|
|
||||||
},
|
},
|
||||||
#endif
|
|
||||||
{
|
{
|
||||||
{
|
{
|
||||||
0, N_, N_, N_, N_, N_, N_, N_,
|
0, N_, N_, N_, N_, N_, N_, N_,
|
||||||
@ -369,9 +364,7 @@ static const uchar_t u8_combining_class_b2_tbl[U8_UNICODE_LATEST + 1][2][256] =
|
|||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static const uchar_t u8_combining_class_b3_tbl[U8_UNICODE_LATEST + 1][9][256] =
|
static const uchar_t u8_combining_class_b3_tbl[2][9][256] = {
|
||||||
{
|
|
||||||
#ifdef U8_UNICODE_320
|
|
||||||
{
|
{
|
||||||
{ /* Third byte table 0. */
|
{ /* Third byte table 0. */
|
||||||
N_, N_, N_, N_, N_, N_, N_, N_,
|
N_, N_, N_, N_, N_, N_, N_, N_,
|
||||||
@ -680,7 +673,6 @@ static const uchar_t u8_combining_class_b3_tbl[U8_UNICODE_LATEST + 1][9][256] =
|
|||||||
N_, N_, N_, N_, N_, N_, N_, N_,
|
N_, N_, N_, N_, N_, N_, N_, N_,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
#endif
|
|
||||||
{
|
{
|
||||||
{ /* Third byte table 0. */
|
{ /* Third byte table 0. */
|
||||||
N_, N_, N_, N_, N_, N_, N_, N_,
|
N_, N_, N_, N_, N_, N_, N_, N_,
|
||||||
@ -995,9 +987,7 @@ static const uchar_t u8_combining_class_b3_tbl[U8_UNICODE_LATEST + 1][9][256] =
|
|||||||
* Unlike other b4_tbl, the b4_tbl for combining class data has
|
* Unlike other b4_tbl, the b4_tbl for combining class data has
|
||||||
* the combining class values not indices to the final tables.
|
* the combining class values not indices to the final tables.
|
||||||
*/
|
*/
|
||||||
static const uchar_t u8_combining_class_b4_tbl[U8_UNICODE_LATEST + 1][55][256] =
|
static const uchar_t u8_combining_class_b4_tbl[2][55][256] = {
|
||||||
{
|
|
||||||
#ifdef U8_UNICODE_320
|
|
||||||
{
|
{
|
||||||
{ /* Fourth byte table 0. */
|
{ /* Fourth byte table 0. */
|
||||||
0, 0, 0, 0, 0, 0, 0, 0,
|
0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
@ -2870,7 +2860,6 @@ static const uchar_t u8_combining_class_b4_tbl[U8_UNICODE_LATEST + 1][55][256] =
|
|||||||
0, 0, 0, 0, 0, 0, 0, 0,
|
0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
#endif
|
|
||||||
{
|
{
|
||||||
{ /* Fourth byte table 0. */
|
{ /* Fourth byte table 0. */
|
||||||
0, 0, 0, 0, 0, 0, 0, 0,
|
0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
@ -4745,8 +4734,7 @@ static const uchar_t u8_combining_class_b4_tbl[U8_UNICODE_LATEST + 1][55][256] =
|
|||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
static const uchar_t u8_composition_b1_tbl[U8_UNICODE_LATEST + 1][256] = {
|
static const uchar_t u8_composition_b1_tbl[2][256] = {
|
||||||
#ifdef U8_UNICODE_320
|
|
||||||
{
|
{
|
||||||
0, N_, N_, N_, N_, N_, N_, N_,
|
0, N_, N_, N_, N_, N_, N_, N_,
|
||||||
N_, N_, N_, N_, N_, N_, N_, N_,
|
N_, N_, N_, N_, N_, N_, N_, N_,
|
||||||
@ -4781,7 +4769,6 @@ static const uchar_t u8_composition_b1_tbl[U8_UNICODE_LATEST + 1][256] = {
|
|||||||
N_, N_, N_, N_, N_, N_, N_, N_,
|
N_, N_, N_, N_, N_, N_, N_, N_,
|
||||||
N_, N_, N_, N_, N_, N_, N_, N_,
|
N_, N_, N_, N_, N_, N_, N_, N_,
|
||||||
},
|
},
|
||||||
#endif
|
|
||||||
{
|
{
|
||||||
0, N_, N_, N_, N_, N_, N_, N_,
|
0, N_, N_, N_, N_, N_, N_, N_,
|
||||||
N_, N_, N_, N_, N_, N_, N_, N_,
|
N_, N_, N_, N_, N_, N_, N_, N_,
|
||||||
@ -4818,8 +4805,7 @@ static const uchar_t u8_composition_b1_tbl[U8_UNICODE_LATEST + 1][256] = {
|
|||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
static const uchar_t u8_composition_b2_tbl[U8_UNICODE_LATEST + 1][1][256] = {
|
static const uchar_t u8_composition_b2_tbl[2][1][256] = {
|
||||||
#ifdef U8_UNICODE_320
|
|
||||||
{
|
{
|
||||||
{
|
{
|
||||||
0, N_, N_, N_, N_, N_, N_, N_,
|
0, N_, N_, N_, N_, N_, N_, N_,
|
||||||
@ -4857,7 +4843,6 @@ static const uchar_t u8_composition_b2_tbl[U8_UNICODE_LATEST + 1][1][256] = {
|
|||||||
},
|
},
|
||||||
|
|
||||||
},
|
},
|
||||||
#endif
|
|
||||||
{
|
{
|
||||||
{
|
{
|
||||||
0, N_, N_, N_, N_, N_, N_, N_,
|
0, N_, N_, N_, N_, N_, N_, N_,
|
||||||
@ -4898,10 +4883,7 @@ static const uchar_t u8_composition_b2_tbl[U8_UNICODE_LATEST + 1][1][256] = {
|
|||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static const u8_displacement_t u8_composition_b3_tbl[
|
static const u8_displacement_t u8_composition_b3_tbl[2][5][256] = {
|
||||||
U8_UNICODE_LATEST + 1][5][256] =
|
|
||||||
{
|
|
||||||
#ifdef U8_UNICODE_320
|
|
||||||
{
|
{
|
||||||
{ /* Third byte table 0. */
|
{ /* Third byte table 0. */
|
||||||
{ 0x8000, 0 }, { N_, 0 }, { N_, 0 },
|
{ 0x8000, 0 }, { N_, 0 }, { N_, 0 },
|
||||||
@ -5344,7 +5326,6 @@ static const u8_displacement_t u8_composition_b3_tbl[
|
|||||||
{ N_, 0 },
|
{ N_, 0 },
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
#endif
|
|
||||||
{
|
{
|
||||||
{ /* Third byte table 0. */
|
{ /* Third byte table 0. */
|
||||||
{ 0x8000, 0 }, { N_, 0 }, { N_, 0 },
|
{ 0x8000, 0 }, { N_, 0 }, { N_, 0 },
|
||||||
@ -5789,8 +5770,7 @@ static const u8_displacement_t u8_composition_b3_tbl[
|
|||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
static const uchar_t u8_composition_b4_tbl[U8_UNICODE_LATEST + 1][41][257] = {
|
static const uchar_t u8_composition_b4_tbl[2][41][257] = {
|
||||||
#ifdef U8_UNICODE_320
|
|
||||||
{
|
{
|
||||||
{ /* Fourth byte table 0. */
|
{ /* Fourth byte table 0. */
|
||||||
0, 0, 0, 0, 0, 0, 0, 0,
|
0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
@ -7228,7 +7208,6 @@ static const uchar_t u8_composition_b4_tbl[U8_UNICODE_LATEST + 1][41][257] = {
|
|||||||
0,
|
0,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
#endif
|
|
||||||
{
|
{
|
||||||
{ /* Fourth byte table 0. */
|
{ /* Fourth byte table 0. */
|
||||||
0, 0, 0, 0, 0, 0, 0, 0,
|
0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
@ -8668,10 +8647,7 @@ static const uchar_t u8_composition_b4_tbl[U8_UNICODE_LATEST + 1][41][257] = {
|
|||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
static const uint16_t u8_composition_b4_16bit_tbl[
|
static const uint16_t u8_composition_b4_16bit_tbl[2][5][257] = {
|
||||||
U8_UNICODE_LATEST + 1][5][257] =
|
|
||||||
{
|
|
||||||
#ifdef U8_UNICODE_320
|
|
||||||
{
|
{
|
||||||
{ /* Fourth byte 16-bit table 0. */
|
{ /* Fourth byte 16-bit table 0. */
|
||||||
0, 0, 0, 0, 0, 0, 0, 0,
|
0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
@ -8849,7 +8825,6 @@ static const uint16_t u8_composition_b4_16bit_tbl[
|
|||||||
362,
|
362,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
#endif
|
|
||||||
{
|
{
|
||||||
{ /* Fourth byte 16-bit table 0. */
|
{ /* Fourth byte 16-bit table 0. */
|
||||||
0, 0, 0, 0, 0, 0, 0, 0,
|
0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
@ -9029,8 +9004,7 @@ static const uint16_t u8_composition_b4_16bit_tbl[
|
|||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
static const uchar_t u8_composition_final_tbl[U8_UNICODE_LATEST + 1][6623] = {
|
static const uchar_t u8_composition_final_tbl[2][6623] = {
|
||||||
#ifdef U8_UNICODE_320
|
|
||||||
{
|
{
|
||||||
0x01, 0xCC, 0xB8, FIL_, 0xE2, 0x89, 0xAE, FIL_,
|
0x01, 0xCC, 0xB8, FIL_, 0xE2, 0x89, 0xAE, FIL_,
|
||||||
0x01, 0xCC, 0xB8, FIL_, 0xE2, 0x89, 0xA0, FIL_,
|
0x01, 0xCC, 0xB8, FIL_, 0xE2, 0x89, 0xA0, FIL_,
|
||||||
@ -9861,7 +9835,6 @@ static const uchar_t u8_composition_final_tbl[U8_UNICODE_LATEST + 1][6623] = {
|
|||||||
0, 0, 0, 0, 0, 0, 0, 0,
|
0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
0, 0, 0, 0, 0, 0, 0,
|
0, 0, 0, 0, 0, 0, 0,
|
||||||
},
|
},
|
||||||
#endif
|
|
||||||
{
|
{
|
||||||
0x01, 0xCC, 0xB8, FIL_, 0xE2, 0x89, 0xAE, FIL_,
|
0x01, 0xCC, 0xB8, FIL_, 0xE2, 0x89, 0xAE, FIL_,
|
||||||
0x01, 0xCC, 0xB8, FIL_, 0xE2, 0x89, 0xA0, FIL_,
|
0x01, 0xCC, 0xB8, FIL_, 0xE2, 0x89, 0xA0, FIL_,
|
||||||
@ -10694,8 +10667,7 @@ static const uchar_t u8_composition_final_tbl[U8_UNICODE_LATEST + 1][6623] = {
|
|||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
static const uchar_t u8_decomp_b2_tbl[U8_UNICODE_LATEST + 1][2][256] = {
|
static const uchar_t u8_decomp_b2_tbl[2][2][256] = {
|
||||||
#ifdef U8_UNICODE_320
|
|
||||||
{
|
{
|
||||||
{
|
{
|
||||||
0, N_, N_, N_, N_, N_, N_, N_,
|
0, N_, N_, N_, N_, N_, N_, N_,
|
||||||
@ -10767,7 +10739,6 @@ static const uchar_t u8_decomp_b2_tbl[U8_UNICODE_LATEST + 1][2][256] = {
|
|||||||
},
|
},
|
||||||
|
|
||||||
},
|
},
|
||||||
#endif
|
|
||||||
{
|
{
|
||||||
{
|
{
|
||||||
0, N_, N_, N_, N_, N_, N_, N_,
|
0, N_, N_, N_, N_, N_, N_, N_,
|
||||||
@ -10842,9 +10813,7 @@ static const uchar_t u8_decomp_b2_tbl[U8_UNICODE_LATEST + 1][2][256] = {
|
|||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static const u8_displacement_t u8_decomp_b3_tbl[U8_UNICODE_LATEST + 1][8][256] =
|
static const u8_displacement_t u8_decomp_b3_tbl[2][8][256] = {
|
||||||
{
|
|
||||||
#ifdef U8_UNICODE_320
|
|
||||||
{
|
{
|
||||||
{ /* Third byte table 0. */
|
{ /* Third byte table 0. */
|
||||||
{ N_, 0 }, { N_, 0 }, { N_, 0 },
|
{ N_, 0 }, { N_, 0 }, { N_, 0 },
|
||||||
@ -11551,7 +11520,6 @@ static const u8_displacement_t u8_decomp_b3_tbl[U8_UNICODE_LATEST + 1][8][256] =
|
|||||||
{ N_, 0 },
|
{ N_, 0 },
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
#endif
|
|
||||||
{
|
{
|
||||||
{ /* Third byte table 0. */
|
{ /* Third byte table 0. */
|
||||||
{ N_, 0 }, { N_, 0 }, { N_, 0 },
|
{ N_, 0 }, { N_, 0 }, { N_, 0 },
|
||||||
@ -12260,8 +12228,7 @@ static const u8_displacement_t u8_decomp_b3_tbl[U8_UNICODE_LATEST + 1][8][256] =
|
|||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
static const uchar_t u8_decomp_b4_tbl[U8_UNICODE_LATEST + 1][118][257] = {
|
static const uchar_t u8_decomp_b4_tbl[2][118][257] = {
|
||||||
#ifdef U8_UNICODE_320
|
|
||||||
{
|
{
|
||||||
{ /* Fourth byte table 0. */
|
{ /* Fourth byte table 0. */
|
||||||
0, 0, 0, 0, 0, 0, 0, 0,
|
0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
@ -16394,7 +16361,6 @@ static const uchar_t u8_decomp_b4_tbl[U8_UNICODE_LATEST + 1][118][257] = {
|
|||||||
0,
|
0,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
#endif
|
|
||||||
{
|
{
|
||||||
{ /* Fourth byte table 0. */
|
{ /* Fourth byte table 0. */
|
||||||
0, 0, 0, 0, 0, 0, 0, 0,
|
0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
@ -20529,8 +20495,7 @@ static const uchar_t u8_decomp_b4_tbl[U8_UNICODE_LATEST + 1][118][257] = {
|
|||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
static const uint16_t u8_decomp_b4_16bit_tbl[U8_UNICODE_LATEST + 1][30][257] = {
|
static const uint16_t u8_decomp_b4_16bit_tbl[2][30][257] = {
|
||||||
#ifdef U8_UNICODE_320
|
|
||||||
{
|
{
|
||||||
{ /* Fourth byte 16-bit table 0. */
|
{ /* Fourth byte 16-bit table 0. */
|
||||||
0, 0, 0, 0, 0, 0, 0, 0,
|
0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
@ -21583,7 +21548,6 @@ static const uint16_t u8_decomp_b4_16bit_tbl[U8_UNICODE_LATEST + 1][30][257] = {
|
|||||||
0,
|
0,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
#endif
|
|
||||||
{
|
{
|
||||||
{ /* Fourth byte 16-bit table 0. */
|
{ /* Fourth byte 16-bit table 0. */
|
||||||
0, 0, 0, 0, 0, 0, 0, 0,
|
0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
@ -22638,8 +22602,7 @@ static const uint16_t u8_decomp_b4_16bit_tbl[U8_UNICODE_LATEST + 1][30][257] = {
|
|||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
static const uchar_t u8_decomp_final_tbl[U8_UNICODE_LATEST + 1][19370] = {
|
static const uchar_t u8_decomp_final_tbl[2][19370] = {
|
||||||
#ifdef U8_UNICODE_320
|
|
||||||
{
|
{
|
||||||
0x20, 0x20, 0xCC, 0x88, 0x61, 0x20, 0xCC, 0x84,
|
0x20, 0x20, 0xCC, 0x88, 0x61, 0x20, 0xCC, 0x84,
|
||||||
0x32, 0x33, 0x20, 0xCC, 0x81, 0xCE, 0xBC, 0x20,
|
0x32, 0x33, 0x20, 0xCC, 0x81, 0xCE, 0xBC, 0x20,
|
||||||
@ -25064,7 +25027,6 @@ static const uchar_t u8_decomp_final_tbl[U8_UNICODE_LATEST + 1][19370] = {
|
|||||||
0, 0, 0, 0, 0, 0, 0, 0,
|
0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
0, 0,
|
0, 0,
|
||||||
},
|
},
|
||||||
#endif
|
|
||||||
{
|
{
|
||||||
0x20, 0x20, 0xCC, 0x88, 0x61, 0x20, 0xCC, 0x84,
|
0x20, 0x20, 0xCC, 0x88, 0x61, 0x20, 0xCC, 0x84,
|
||||||
0x32, 0x33, 0x20, 0xCC, 0x81, 0xCE, 0xBC, 0x20,
|
0x32, 0x33, 0x20, 0xCC, 0x81, 0xCE, 0xBC, 0x20,
|
||||||
@ -27491,8 +27453,7 @@ static const uchar_t u8_decomp_final_tbl[U8_UNICODE_LATEST + 1][19370] = {
|
|||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
static const uchar_t u8_case_common_b2_tbl[U8_UNICODE_LATEST + 1][2][256] = {
|
static const uchar_t u8_case_common_b2_tbl[2][2][256] = {
|
||||||
#ifdef U8_UNICODE_320
|
|
||||||
{
|
{
|
||||||
{
|
{
|
||||||
0, N_, N_, N_, N_, N_, N_, N_,
|
0, N_, N_, N_, N_, N_, N_, N_,
|
||||||
@ -27564,7 +27525,6 @@ static const uchar_t u8_case_common_b2_tbl[U8_UNICODE_LATEST + 1][2][256] = {
|
|||||||
},
|
},
|
||||||
|
|
||||||
},
|
},
|
||||||
#endif
|
|
||||||
{
|
{
|
||||||
{
|
{
|
||||||
0, N_, N_, N_, N_, N_, N_, N_,
|
0, N_, N_, N_, N_, N_, N_, N_,
|
||||||
@ -27639,11 +27599,7 @@ static const uchar_t u8_case_common_b2_tbl[U8_UNICODE_LATEST + 1][2][256] = {
|
|||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#ifdef U8_STRCMP_CI_LOWER
|
static const u8_displacement_t u8_tolower_b3_tbl[2][5][256] = {
|
||||||
static const u8_displacement_t u8_tolower_b3_tbl[
|
|
||||||
U8_UNICODE_LATEST + 1][5][256] =
|
|
||||||
{
|
|
||||||
#ifdef U8_UNICODE_320
|
|
||||||
{
|
{
|
||||||
{ /* Third byte table 0. */
|
{ /* Third byte table 0. */
|
||||||
{ N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 },
|
{ N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 },
|
||||||
@ -27976,7 +27932,6 @@ static const u8_displacement_t u8_tolower_b3_tbl[
|
|||||||
{ N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 },
|
{ N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 },
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
#endif
|
|
||||||
{
|
{
|
||||||
{ /* Third byte table 0. */
|
{ /* Third byte table 0. */
|
||||||
{ N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 },
|
{ N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 },
|
||||||
@ -28311,8 +28266,7 @@ static const u8_displacement_t u8_tolower_b3_tbl[
|
|||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
static const uchar_t u8_tolower_b4_tbl[U8_UNICODE_LATEST + 1][36][257] = {
|
static const uchar_t u8_tolower_b4_tbl[2][36][257] = {
|
||||||
#ifdef U8_UNICODE_320
|
|
||||||
{
|
{
|
||||||
{ /* Fourth byte table 0. */
|
{ /* Fourth byte table 0. */
|
||||||
0, 0, 0, 0, 0, 0, 0, 0,
|
0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
@ -29575,7 +29529,6 @@ static const uchar_t u8_tolower_b4_tbl[U8_UNICODE_LATEST + 1][36][257] = {
|
|||||||
0,
|
0,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
#endif
|
|
||||||
{
|
{
|
||||||
{ /* Fourth byte table 0. */
|
{ /* Fourth byte table 0. */
|
||||||
0, 0, 0, 0, 0, 0, 0, 0,
|
0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
@ -30840,8 +30793,7 @@ static const uchar_t u8_tolower_b4_tbl[U8_UNICODE_LATEST + 1][36][257] = {
|
|||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
static const uchar_t u8_tolower_final_tbl[U8_UNICODE_LATEST + 1][2299] = {
|
static const uchar_t u8_tolower_final_tbl[2][2299] = {
|
||||||
#ifdef U8_UNICODE_320
|
|
||||||
{
|
{
|
||||||
0xC3, 0xA0, 0xC3, 0xA1, 0xC3, 0xA2, 0xC3, 0xA3,
|
0xC3, 0xA0, 0xC3, 0xA1, 0xC3, 0xA2, 0xC3, 0xA3,
|
||||||
0xC3, 0xA4, 0xC3, 0xA5, 0xC3, 0xA6, 0xC3, 0xA7,
|
0xC3, 0xA4, 0xC3, 0xA5, 0xC3, 0xA6, 0xC3, 0xA7,
|
||||||
@ -31132,7 +31084,6 @@ static const uchar_t u8_tolower_final_tbl[U8_UNICODE_LATEST + 1][2299] = {
|
|||||||
0, 0, 0, 0, 0, 0, 0, 0,
|
0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
0, 0, 0,
|
0, 0, 0,
|
||||||
},
|
},
|
||||||
#endif
|
|
||||||
{
|
{
|
||||||
0xC3, 0xA0, 0xC3, 0xA1, 0xC3, 0xA2, 0xC3, 0xA3,
|
0xC3, 0xA0, 0xC3, 0xA1, 0xC3, 0xA2, 0xC3, 0xA3,
|
||||||
0xC3, 0xA4, 0xC3, 0xA5, 0xC3, 0xA6, 0xC3, 0xA7,
|
0xC3, 0xA4, 0xC3, 0xA5, 0xC3, 0xA6, 0xC3, 0xA7,
|
||||||
@ -31424,12 +31375,8 @@ static const uchar_t u8_tolower_final_tbl[U8_UNICODE_LATEST + 1][2299] = {
|
|||||||
0x90, 0x91, 0x8F,
|
0x90, 0x91, 0x8F,
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
#endif
|
|
||||||
|
|
||||||
static const u8_displacement_t u8_toupper_b3_tbl[
|
static const u8_displacement_t u8_toupper_b3_tbl[2][5][256] = {
|
||||||
U8_UNICODE_LATEST + 1][5][256] =
|
|
||||||
{
|
|
||||||
#ifdef U8_UNICODE_320
|
|
||||||
{
|
{
|
||||||
{ /* Third byte table 0. */
|
{ /* Third byte table 0. */
|
||||||
{ N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 },
|
{ N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 },
|
||||||
@ -31762,7 +31709,6 @@ static const u8_displacement_t u8_toupper_b3_tbl[
|
|||||||
{ N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 },
|
{ N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 },
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
#endif
|
|
||||||
{
|
{
|
||||||
{ /* Third byte table 0. */
|
{ /* Third byte table 0. */
|
||||||
{ N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 },
|
{ N_, 0 }, { N_, 0 }, { N_, 0 }, { N_, 0 },
|
||||||
@ -32097,8 +32043,7 @@ static const u8_displacement_t u8_toupper_b3_tbl[
|
|||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
static const uchar_t u8_toupper_b4_tbl[U8_UNICODE_LATEST + 1][39][257] = {
|
static const uchar_t u8_toupper_b4_tbl[2][39][257] = {
|
||||||
#ifdef U8_UNICODE_320
|
|
||||||
{
|
{
|
||||||
{ /* Fourth byte table 0. */
|
{ /* Fourth byte table 0. */
|
||||||
0, 0, 0, 0, 0, 0, 0, 0,
|
0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
@ -33466,7 +33411,6 @@ static const uchar_t u8_toupper_b4_tbl[U8_UNICODE_LATEST + 1][39][257] = {
|
|||||||
0,
|
0,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
#endif
|
|
||||||
{
|
{
|
||||||
{ /* Fourth byte table 0. */
|
{ /* Fourth byte table 0. */
|
||||||
0, 0, 0, 0, 0, 0, 0, 0,
|
0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
@ -34836,8 +34780,7 @@ static const uchar_t u8_toupper_b4_tbl[U8_UNICODE_LATEST + 1][39][257] = {
|
|||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
static const uchar_t u8_toupper_final_tbl[U8_UNICODE_LATEST + 1][2318] = {
|
static const uchar_t u8_toupper_final_tbl[2][2318] = {
|
||||||
#ifdef U8_UNICODE_320
|
|
||||||
{
|
{
|
||||||
0xCE, 0x9C, 0xC3, 0x80, 0xC3, 0x81, 0xC3, 0x82,
|
0xCE, 0x9C, 0xC3, 0x80, 0xC3, 0x81, 0xC3, 0x82,
|
||||||
0xC3, 0x83, 0xC3, 0x84, 0xC3, 0x85, 0xC3, 0x86,
|
0xC3, 0x83, 0xC3, 0x84, 0xC3, 0x85, 0xC3, 0x86,
|
||||||
@ -35130,7 +35073,6 @@ static const uchar_t u8_toupper_final_tbl[U8_UNICODE_LATEST + 1][2318] = {
|
|||||||
0, 0, 0, 0, 0, 0, 0, 0,
|
0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
0, 0, 0, 0, 0, 0,
|
0, 0, 0, 0, 0, 0,
|
||||||
},
|
},
|
||||||
#endif
|
|
||||||
{
|
{
|
||||||
0xCE, 0x9C, 0xC3, 0x80, 0xC3, 0x81, 0xC3, 0x82,
|
0xCE, 0x9C, 0xC3, 0x80, 0xC3, 0x81, 0xC3, 0x82,
|
||||||
0xC3, 0x83, 0xC3, 0x84, 0xC3, 0x85, 0xC3, 0x86,
|
0xC3, 0x83, 0xC3, 0x84, 0xC3, 0x85, 0xC3, 0x86,
|
||||||
|
@ -134,8 +134,6 @@ extern void vdev_space_update(vdev_t *vd,
|
|||||||
|
|
||||||
extern int64_t vdev_deflated_space(vdev_t *vd, int64_t space);
|
extern int64_t vdev_deflated_space(vdev_t *vd, int64_t space);
|
||||||
|
|
||||||
extern uint64_t vdev_asize_to_psize_txg(vdev_t *vd, uint64_t asize,
|
|
||||||
uint64_t txg);
|
|
||||||
extern uint64_t vdev_psize_to_asize_txg(vdev_t *vd, uint64_t psize,
|
extern uint64_t vdev_psize_to_asize_txg(vdev_t *vd, uint64_t psize,
|
||||||
uint64_t txg);
|
uint64_t txg);
|
||||||
extern uint64_t vdev_psize_to_asize(vdev_t *vd, uint64_t psize);
|
extern uint64_t vdev_psize_to_asize(vdev_t *vd, uint64_t psize);
|
||||||
@ -175,7 +173,6 @@ extern void vdev_queue_change_io_priority(zio_t *zio, zio_priority_t priority);
|
|||||||
extern uint32_t vdev_queue_length(vdev_t *vd);
|
extern uint32_t vdev_queue_length(vdev_t *vd);
|
||||||
extern uint64_t vdev_queue_last_offset(vdev_t *vd);
|
extern uint64_t vdev_queue_last_offset(vdev_t *vd);
|
||||||
extern uint64_t vdev_queue_class_length(vdev_t *vq, zio_priority_t p);
|
extern uint64_t vdev_queue_class_length(vdev_t *vq, zio_priority_t p);
|
||||||
extern boolean_t vdev_queue_pool_busy(spa_t *spa);
|
|
||||||
|
|
||||||
extern void vdev_config_dirty(vdev_t *vd);
|
extern void vdev_config_dirty(vdev_t *vd);
|
||||||
extern void vdev_config_clean(vdev_t *vd);
|
extern void vdev_config_clean(vdev_t *vd);
|
||||||
|
@ -95,7 +95,7 @@ extern int vdev_draid_generate_perms(const draid_map_t *, uint8_t **);
|
|||||||
*/
|
*/
|
||||||
extern boolean_t vdev_draid_readable(vdev_t *, uint64_t);
|
extern boolean_t vdev_draid_readable(vdev_t *, uint64_t);
|
||||||
extern boolean_t vdev_draid_missing(vdev_t *, uint64_t, uint64_t, uint64_t);
|
extern boolean_t vdev_draid_missing(vdev_t *, uint64_t, uint64_t, uint64_t);
|
||||||
extern uint64_t vdev_draid_asize_to_psize(vdev_t *, uint64_t, uint64_t);
|
extern uint64_t vdev_draid_asize_to_psize(vdev_t *, uint64_t);
|
||||||
extern void vdev_draid_map_alloc_empty(zio_t *, struct raidz_row *);
|
extern void vdev_draid_map_alloc_empty(zio_t *, struct raidz_row *);
|
||||||
extern int vdev_draid_map_verify_empty(zio_t *, struct raidz_row *);
|
extern int vdev_draid_map_verify_empty(zio_t *, struct raidz_row *);
|
||||||
extern nvlist_t *vdev_draid_read_config_spare(vdev_t *);
|
extern nvlist_t *vdev_draid_read_config_spare(vdev_t *);
|
||||||
|
@ -60,6 +60,10 @@ extern "C" {
|
|||||||
typedef struct vdev_queue vdev_queue_t;
|
typedef struct vdev_queue vdev_queue_t;
|
||||||
struct abd;
|
struct abd;
|
||||||
|
|
||||||
|
extern uint_t zfs_vdev_queue_depth_pct;
|
||||||
|
extern uint_t zfs_vdev_def_queue_depth;
|
||||||
|
extern uint_t zfs_vdev_async_write_max_active;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Virtual device operations
|
* Virtual device operations
|
||||||
*/
|
*/
|
||||||
@ -103,8 +107,7 @@ typedef const struct vdev_ops {
|
|||||||
vdev_fini_func_t *vdev_op_fini;
|
vdev_fini_func_t *vdev_op_fini;
|
||||||
vdev_open_func_t *vdev_op_open;
|
vdev_open_func_t *vdev_op_open;
|
||||||
vdev_close_func_t *vdev_op_close;
|
vdev_close_func_t *vdev_op_close;
|
||||||
vdev_asize_func_t *vdev_op_psize_to_asize;
|
vdev_asize_func_t *vdev_op_asize;
|
||||||
vdev_asize_func_t *vdev_op_asize_to_psize;
|
|
||||||
vdev_min_asize_func_t *vdev_op_min_asize;
|
vdev_min_asize_func_t *vdev_op_min_asize;
|
||||||
vdev_min_alloc_func_t *vdev_op_min_alloc;
|
vdev_min_alloc_func_t *vdev_op_min_alloc;
|
||||||
vdev_io_start_func_t *vdev_op_io_start;
|
vdev_io_start_func_t *vdev_op_io_start;
|
||||||
@ -616,7 +619,6 @@ extern vdev_ops_t vdev_indirect_ops;
|
|||||||
*/
|
*/
|
||||||
extern void vdev_default_xlate(vdev_t *vd, const zfs_range_seg64_t *logical_rs,
|
extern void vdev_default_xlate(vdev_t *vd, const zfs_range_seg64_t *logical_rs,
|
||||||
zfs_range_seg64_t *physical_rs, zfs_range_seg64_t *remain_rs);
|
zfs_range_seg64_t *physical_rs, zfs_range_seg64_t *remain_rs);
|
||||||
extern uint64_t vdev_default_psize(vdev_t *vd, uint64_t asize, uint64_t txg);
|
|
||||||
extern uint64_t vdev_default_asize(vdev_t *vd, uint64_t psize, uint64_t txg);
|
extern uint64_t vdev_default_asize(vdev_t *vd, uint64_t psize, uint64_t txg);
|
||||||
extern uint64_t vdev_default_min_asize(vdev_t *vd);
|
extern uint64_t vdev_default_min_asize(vdev_t *vd);
|
||||||
extern uint64_t vdev_get_min_asize(vdev_t *vd);
|
extern uint64_t vdev_get_min_asize(vdev_t *vd);
|
||||||
|
@ -76,6 +76,7 @@ typedef struct zcp_run_info {
|
|||||||
* rather than the 'current' thread's.
|
* rather than the 'current' thread's.
|
||||||
*/
|
*/
|
||||||
cred_t *zri_cred;
|
cred_t *zri_cred;
|
||||||
|
proc_t *zri_proc;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* The tx in which this channel program is running.
|
* The tx in which this channel program is running.
|
||||||
|
@ -632,9 +632,6 @@ extern void delay(clock_t ticks);
|
|||||||
#define kcred NULL
|
#define kcred NULL
|
||||||
#define CRED() NULL
|
#define CRED() NULL
|
||||||
|
|
||||||
#define crhold(cr) ((void)cr)
|
|
||||||
#define crfree(cr) ((void)cr)
|
|
||||||
|
|
||||||
#define ptob(x) ((x) * PAGESIZE)
|
#define ptob(x) ((x) * PAGESIZE)
|
||||||
|
|
||||||
#define NN_DIVISOR_1000 (1U << 0)
|
#define NN_DIVISOR_1000 (1U << 0)
|
||||||
@ -747,6 +744,7 @@ extern int zfs_secpolicy_rename_perms(const char *from, const char *to,
|
|||||||
cred_t *cr);
|
cred_t *cr);
|
||||||
extern int zfs_secpolicy_destroy_perms(const char *name, cred_t *cr);
|
extern int zfs_secpolicy_destroy_perms(const char *name, cred_t *cr);
|
||||||
extern int secpolicy_zfs(const cred_t *cr);
|
extern int secpolicy_zfs(const cred_t *cr);
|
||||||
|
extern int secpolicy_zfs_proc(const cred_t *cr, proc_t *proc);
|
||||||
extern zoneid_t getzoneid(void);
|
extern zoneid_t getzoneid(void);
|
||||||
|
|
||||||
/* SID stuff */
|
/* SID stuff */
|
||||||
|
@ -39,8 +39,6 @@ extern "C" {
|
|||||||
#define FALSE 0
|
#define FALSE 0
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <sys/nvpair.h>
|
|
||||||
|
|
||||||
extern int zfs_flags;
|
extern int zfs_flags;
|
||||||
extern int zfs_recover;
|
extern int zfs_recover;
|
||||||
extern int zfs_free_leak_on_eio;
|
extern int zfs_free_leak_on_eio;
|
||||||
@ -62,7 +60,6 @@ extern int zfs_dbgmsg_enable;
|
|||||||
#define ZFS_DEBUG_METASLAB_ALLOC (1 << 13)
|
#define ZFS_DEBUG_METASLAB_ALLOC (1 << 13)
|
||||||
#define ZFS_DEBUG_BRT (1 << 14)
|
#define ZFS_DEBUG_BRT (1 << 14)
|
||||||
#define ZFS_DEBUG_RAIDZ_RECONSTRUCT (1 << 15)
|
#define ZFS_DEBUG_RAIDZ_RECONSTRUCT (1 << 15)
|
||||||
#define ZFS_DEBUG_DDT (1 << 16)
|
|
||||||
|
|
||||||
extern void __set_error(const char *file, const char *func, int line, int err);
|
extern void __set_error(const char *file, const char *func, int line, int err);
|
||||||
extern void __zfs_dbgmsg(char *buf);
|
extern void __zfs_dbgmsg(char *buf);
|
||||||
@ -106,24 +103,6 @@ extern void zfs_panic_recover(const char *fmt, ...);
|
|||||||
extern void zfs_dbgmsg_init(void);
|
extern void zfs_dbgmsg_init(void);
|
||||||
extern void zfs_dbgmsg_fini(void);
|
extern void zfs_dbgmsg_fini(void);
|
||||||
|
|
||||||
/*
|
|
||||||
* When printing an nvlist, print one beginning line with the file/func/line
|
|
||||||
* number and the text "nvlist <var name>:" followed by all the nvlist lines
|
|
||||||
* without the file/fun/line number. This makes the nvlist lines easy to read.
|
|
||||||
*/
|
|
||||||
#define zfs_dbgmsg_nvlist(nv) \
|
|
||||||
if (zfs_dbgmsg_enable) { \
|
|
||||||
zfs_dbgmsg("nvlist "#nv":"); \
|
|
||||||
__zfs_dbgmsg_nvlist(nv); \
|
|
||||||
}
|
|
||||||
|
|
||||||
#define zfs_dbgmsg(...) \
|
|
||||||
if (zfs_dbgmsg_enable) \
|
|
||||||
__dprintf(B_FALSE, __FILE__, __func__, __LINE__, __VA_ARGS__)
|
|
||||||
|
|
||||||
|
|
||||||
extern void __zfs_dbgmsg_nvlist(nvlist_t *nv);
|
|
||||||
|
|
||||||
#ifndef _KERNEL
|
#ifndef _KERNEL
|
||||||
extern int dprintf_find_string(const char *string);
|
extern int dprintf_find_string(const char *string);
|
||||||
extern void zfs_dbgmsg_print(int fd, const char *tag);
|
extern void zfs_dbgmsg_print(int fd, const char *tag);
|
||||||
|
@ -422,8 +422,6 @@ typedef struct zinject_record {
|
|||||||
uint64_t zi_nlanes;
|
uint64_t zi_nlanes;
|
||||||
uint32_t zi_cmd;
|
uint32_t zi_cmd;
|
||||||
uint32_t zi_dvas;
|
uint32_t zi_dvas;
|
||||||
uint64_t zi_match_count; /* count of times matched */
|
|
||||||
uint64_t zi_inject_count; /* count of times injected */
|
|
||||||
} zinject_record_t;
|
} zinject_record_t;
|
||||||
|
|
||||||
#define ZINJECT_NULL 0x1
|
#define ZINJECT_NULL 0x1
|
||||||
@ -534,22 +532,10 @@ typedef struct zfs_cmd {
|
|||||||
zfs_share_t zc_share;
|
zfs_share_t zc_share;
|
||||||
dmu_objset_stats_t zc_objset_stats;
|
dmu_objset_stats_t zc_objset_stats;
|
||||||
struct drr_begin zc_begin_record;
|
struct drr_begin zc_begin_record;
|
||||||
|
zinject_record_t zc_inject_record;
|
||||||
/*
|
uint32_t zc_defer_destroy;
|
||||||
* zinject_record_t grew past its original size, which would push out
|
uint32_t zc_flags;
|
||||||
* the size of zfs_cmd_t. To adjust for this, we allow it to use the
|
uint64_t zc_action_handle;
|
||||||
* space after it, since those fields aren't used with ZFS_IOC_INJECT.
|
|
||||||
*/
|
|
||||||
union {
|
|
||||||
zinject_record_t zc_inject_record;
|
|
||||||
struct {
|
|
||||||
char zc_pad1[sizeof (zinject_record_t) - 16];
|
|
||||||
uint32_t zc_defer_destroy;
|
|
||||||
uint32_t zc_flags;
|
|
||||||
uint64_t zc_action_handle;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
int zc_cleanup_fd;
|
int zc_cleanup_fd;
|
||||||
uint8_t zc_simple;
|
uint8_t zc_simple;
|
||||||
uint8_t zc_pad[3]; /* alignment */
|
uint8_t zc_pad[3]; /* alignment */
|
||||||
@ -560,20 +546,6 @@ typedef struct zfs_cmd {
|
|||||||
uint64_t zc_zoneid;
|
uint64_t zc_zoneid;
|
||||||
} zfs_cmd_t;
|
} zfs_cmd_t;
|
||||||
|
|
||||||
/*
|
|
||||||
* zfs_cmd_t (and by extension, it's member structs) must always be the same
|
|
||||||
* size. Changing it will break compatibility between the kernel module and the
|
|
||||||
* userspace tools.
|
|
||||||
*
|
|
||||||
* This test is convoluted because MAXPATHLEN and MAXNAMELEN can vary across
|
|
||||||
* platforms. We include them directly here, which means it won't trip if those
|
|
||||||
* ever change, but if that happens we likely have other things to worry about.
|
|
||||||
*/
|
|
||||||
#define _expected_zfs_cmd_size ((MAXPATHLEN*3)+MAXNAMELEN+1200)
|
|
||||||
_Static_assert(sizeof (zfs_cmd_t) == _expected_zfs_cmd_size,
|
|
||||||
"zfs_cmd_t has wrong size");
|
|
||||||
#undef _expected_zfs_cmd_size
|
|
||||||
|
|
||||||
typedef struct zfs_useracct {
|
typedef struct zfs_useracct {
|
||||||
char zu_domain[256];
|
char zu_domain[256];
|
||||||
uid_t zu_rid;
|
uid_t zu_rid;
|
||||||
|
@ -35,7 +35,7 @@ extern int zpl_get_file_info(dmu_object_type_t,
|
|||||||
extern int zfs_userspace_one(struct zfsvfs *, zfs_userquota_prop_t,
|
extern int zfs_userspace_one(struct zfsvfs *, zfs_userquota_prop_t,
|
||||||
const char *, uint64_t, uint64_t *);
|
const char *, uint64_t, uint64_t *);
|
||||||
extern int zfs_userspace_many(struct zfsvfs *, zfs_userquota_prop_t,
|
extern int zfs_userspace_many(struct zfsvfs *, zfs_userquota_prop_t,
|
||||||
uint64_t *, void *, uint64_t *, uint64_t *);
|
uint64_t *, void *, uint64_t *);
|
||||||
extern int zfs_set_userquota(struct zfsvfs *, zfs_userquota_prop_t,
|
extern int zfs_set_userquota(struct zfsvfs *, zfs_userquota_prop_t,
|
||||||
const char *, uint64_t, uint64_t);
|
const char *, uint64_t, uint64_t);
|
||||||
|
|
||||||
|
@ -33,9 +33,7 @@
|
|||||||
/*
|
/*
|
||||||
* Platform-dependent resource accounting hooks
|
* Platform-dependent resource accounting hooks
|
||||||
*/
|
*/
|
||||||
void zfs_racct_read(spa_t *spa, uint64_t size, uint64_t iops,
|
void zfs_racct_read(spa_t *spa, uint64_t size, uint64_t iops, uint32_t flags);
|
||||||
dmu_flags_t flags);
|
void zfs_racct_write(spa_t *spa, uint64_t size, uint64_t iops, uint32_t flags);
|
||||||
void zfs_racct_write(spa_t *spa, uint64_t size, uint64_t iops,
|
|
||||||
dmu_flags_t flags);
|
|
||||||
|
|
||||||
#endif /* _SYS_ZFS_RACCT_H */
|
#endif /* _SYS_ZFS_RACCT_H */
|
||||||
|
@ -40,7 +40,6 @@ extern int zfs_clone_range(znode_t *, uint64_t *, znode_t *, uint64_t *,
|
|||||||
uint64_t *, cred_t *);
|
uint64_t *, cred_t *);
|
||||||
extern int zfs_clone_range_replay(znode_t *, uint64_t, uint64_t, uint64_t,
|
extern int zfs_clone_range_replay(znode_t *, uint64_t, uint64_t, uint64_t,
|
||||||
const blkptr_t *, size_t);
|
const blkptr_t *, size_t);
|
||||||
extern int zfs_rewrite(znode_t *, uint64_t, uint64_t, uint64_t, uint64_t);
|
|
||||||
|
|
||||||
extern int zfs_getsecattr(znode_t *, vsecattr_t *, int, cred_t *);
|
extern int zfs_getsecattr(znode_t *, vsecattr_t *, int, cred_t *);
|
||||||
extern int zfs_setsecattr(znode_t *, vsecattr_t *, int, cred_t *);
|
extern int zfs_setsecattr(znode_t *, vsecattr_t *, int, cred_t *);
|
||||||
|
@ -227,7 +227,6 @@ typedef uint64_t zio_flag_t;
|
|||||||
#define ZIO_FLAG_REEXECUTED (1ULL << 30)
|
#define ZIO_FLAG_REEXECUTED (1ULL << 30)
|
||||||
#define ZIO_FLAG_DELEGATED (1ULL << 31)
|
#define ZIO_FLAG_DELEGATED (1ULL << 31)
|
||||||
#define ZIO_FLAG_DIO_CHKSUM_ERR (1ULL << 32)
|
#define ZIO_FLAG_DIO_CHKSUM_ERR (1ULL << 32)
|
||||||
#define ZIO_FLAG_PREALLOCATED (1ULL << 33)
|
|
||||||
|
|
||||||
#define ZIO_ALLOCATOR_NONE (-1)
|
#define ZIO_ALLOCATOR_NONE (-1)
|
||||||
#define ZIO_HAS_ALLOCATOR(zio) ((zio)->io_allocator != ZIO_ALLOCATOR_NONE)
|
#define ZIO_HAS_ALLOCATOR(zio) ((zio)->io_allocator != ZIO_ALLOCATOR_NONE)
|
||||||
@ -351,7 +350,6 @@ typedef struct zio_prop {
|
|||||||
uint8_t zp_complevel;
|
uint8_t zp_complevel;
|
||||||
uint8_t zp_level;
|
uint8_t zp_level;
|
||||||
uint8_t zp_copies;
|
uint8_t zp_copies;
|
||||||
uint8_t zp_gang_copies;
|
|
||||||
dmu_object_type_t zp_type;
|
dmu_object_type_t zp_type;
|
||||||
boolean_t zp_dedup;
|
boolean_t zp_dedup;
|
||||||
boolean_t zp_dedup_verify;
|
boolean_t zp_dedup_verify;
|
||||||
@ -577,7 +575,7 @@ extern zio_t *zio_rewrite(zio_t *pio, spa_t *spa, uint64_t txg, blkptr_t *bp,
|
|||||||
zio_priority_t priority, zio_flag_t flags, zbookmark_phys_t *zb);
|
zio_priority_t priority, zio_flag_t flags, zbookmark_phys_t *zb);
|
||||||
|
|
||||||
extern void zio_write_override(zio_t *zio, blkptr_t *bp, int copies,
|
extern void zio_write_override(zio_t *zio, blkptr_t *bp, int copies,
|
||||||
int gang_copies, boolean_t nopwrite, boolean_t brtwrite);
|
boolean_t nopwrite, boolean_t brtwrite);
|
||||||
|
|
||||||
extern void zio_free(spa_t *spa, uint64_t txg, const blkptr_t *bp);
|
extern void zio_free(spa_t *spa, uint64_t txg, const blkptr_t *bp);
|
||||||
|
|
||||||
@ -621,6 +619,7 @@ extern zio_t *zio_walk_parents(zio_t *cio, zio_link_t **);
|
|||||||
extern zio_t *zio_walk_children(zio_t *pio, zio_link_t **);
|
extern zio_t *zio_walk_children(zio_t *pio, zio_link_t **);
|
||||||
extern zio_t *zio_unique_parent(zio_t *cio);
|
extern zio_t *zio_unique_parent(zio_t *cio);
|
||||||
extern void zio_add_child(zio_t *pio, zio_t *cio);
|
extern void zio_add_child(zio_t *pio, zio_t *cio);
|
||||||
|
extern void zio_add_child_first(zio_t *pio, zio_t *cio);
|
||||||
|
|
||||||
extern void *zio_buf_alloc(size_t size);
|
extern void *zio_buf_alloc(size_t size);
|
||||||
extern void zio_buf_free(void *buf, size_t size);
|
extern void zio_buf_free(void *buf, size_t size);
|
||||||
|
@ -60,32 +60,6 @@ typedef struct zvol_state {
|
|||||||
boolean_t zv_threading; /* volthreading property */
|
boolean_t zv_threading; /* volthreading property */
|
||||||
} zvol_state_t;
|
} zvol_state_t;
|
||||||
|
|
||||||
/*
|
|
||||||
* zvol taskqs
|
|
||||||
*/
|
|
||||||
typedef struct zv_taskq {
|
|
||||||
uint_t tqs_cnt;
|
|
||||||
taskq_t **tqs_taskq;
|
|
||||||
} zv_taskq_t;
|
|
||||||
|
|
||||||
typedef struct zv_request_stack {
|
|
||||||
zvol_state_t *zv;
|
|
||||||
struct bio *bio;
|
|
||||||
#ifdef __linux__
|
|
||||||
struct request *rq;
|
|
||||||
#endif
|
|
||||||
} zv_request_t;
|
|
||||||
|
|
||||||
typedef struct zv_request_task {
|
|
||||||
zv_request_t zvr;
|
|
||||||
taskq_ent_t ent;
|
|
||||||
} zv_request_task_t;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Switch taskq at multiple of 512 MB offset. This can be set to a lower value
|
|
||||||
* to utilize more threads for small files but may affect prefetch hits.
|
|
||||||
*/
|
|
||||||
#define ZVOL_TASKQ_OFFSET_SHIFT 29
|
|
||||||
|
|
||||||
extern krwlock_t zvol_state_lock;
|
extern krwlock_t zvol_state_lock;
|
||||||
#define ZVOL_HT_SIZE 1024
|
#define ZVOL_HT_SIZE 1024
|
||||||
@ -93,13 +67,8 @@ extern struct hlist_head *zvol_htable;
|
|||||||
#define ZVOL_HT_HEAD(hash) (&zvol_htable[(hash) & (ZVOL_HT_SIZE-1)])
|
#define ZVOL_HT_HEAD(hash) (&zvol_htable[(hash) & (ZVOL_HT_SIZE-1)])
|
||||||
extern zil_replay_func_t *const zvol_replay_vector[TX_MAX_TYPE];
|
extern zil_replay_func_t *const zvol_replay_vector[TX_MAX_TYPE];
|
||||||
|
|
||||||
extern unsigned int zvol_inhibit_dev;
|
|
||||||
extern unsigned int zvol_prefetch_bytes;
|
|
||||||
extern unsigned int zvol_volmode;
|
extern unsigned int zvol_volmode;
|
||||||
extern unsigned int zvol_threads;
|
extern unsigned int zvol_inhibit_dev;
|
||||||
extern unsigned int zvol_num_taskqs;
|
|
||||||
extern unsigned int zvol_request_sync;
|
|
||||||
extern zv_taskq_t zvol_taskqs;
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* platform independent functions exported to platform code
|
* platform independent functions exported to platform code
|
||||||
@ -125,8 +94,6 @@ int zvol_clone_range(zvol_state_handle_t *, uint64_t,
|
|||||||
void zvol_log_clone_range(zilog_t *zilog, dmu_tx_t *tx, int txtype,
|
void zvol_log_clone_range(zilog_t *zilog, dmu_tx_t *tx, int txtype,
|
||||||
uint64_t off, uint64_t len, uint64_t blksz, const blkptr_t *bps,
|
uint64_t off, uint64_t len, uint64_t blksz, const blkptr_t *bps,
|
||||||
size_t nbps);
|
size_t nbps);
|
||||||
zv_request_task_t *zv_request_task_create(zv_request_t zvr);
|
|
||||||
void zv_request_task_free(zv_request_task_t *task);
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* platform dependent functions exported to platform independent code
|
* platform dependent functions exported to platform independent code
|
||||||
|
@ -73,7 +73,6 @@ extern "C" {
|
|||||||
_ZFS_VALSTR_DECLARE_BITFIELD(zio_flag)
|
_ZFS_VALSTR_DECLARE_BITFIELD(zio_flag)
|
||||||
_ZFS_VALSTR_DECLARE_BITFIELD(zio_stage)
|
_ZFS_VALSTR_DECLARE_BITFIELD(zio_stage)
|
||||||
|
|
||||||
_ZFS_VALSTR_DECLARE_ENUM(zio_type)
|
|
||||||
_ZFS_VALSTR_DECLARE_ENUM(zio_priority)
|
_ZFS_VALSTR_DECLARE_ENUM(zio_priority)
|
||||||
|
|
||||||
#undef _ZFS_VALSTR_DECLARE_BITFIELD
|
#undef _ZFS_VALSTR_DECLARE_BITFIELD
|
||||||
|
@ -196,7 +196,6 @@
|
|||||||
<elf-symbol name='nvlist_remove_all' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
|
<elf-symbol name='nvlist_remove_all' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
|
||||||
<elf-symbol name='nvlist_remove_nvpair' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
|
<elf-symbol name='nvlist_remove_nvpair' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
|
||||||
<elf-symbol name='nvlist_size' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
|
<elf-symbol name='nvlist_size' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
|
||||||
<elf-symbol name='nvlist_snprintf' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
|
|
||||||
<elf-symbol name='nvlist_unpack' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
|
<elf-symbol name='nvlist_unpack' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
|
||||||
<elf-symbol name='nvlist_xalloc' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
|
<elf-symbol name='nvlist_xalloc' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
|
||||||
<elf-symbol name='nvlist_xdup' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
|
<elf-symbol name='nvlist_xdup' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
|
||||||
@ -968,13 +967,6 @@
|
|||||||
<class-decl name='_IO_marker' is-struct='yes' visibility='default' is-declaration-only='yes' id='010ae0b9'/>
|
<class-decl name='_IO_marker' is-struct='yes' visibility='default' is-declaration-only='yes' id='010ae0b9'/>
|
||||||
<class-decl name='_IO_wide_data' is-struct='yes' visibility='default' is-declaration-only='yes' id='79bd3751'/>
|
<class-decl name='_IO_wide_data' is-struct='yes' visibility='default' is-declaration-only='yes' id='79bd3751'/>
|
||||||
<class-decl name='re_dfa_t' is-struct='yes' visibility='default' is-declaration-only='yes' id='b48d2441'/>
|
<class-decl name='re_dfa_t' is-struct='yes' visibility='default' is-declaration-only='yes' id='b48d2441'/>
|
||||||
<function-decl name='nvlist_snprintf' mangled-name='nvlist_snprintf' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvlist_snprintf'>
|
|
||||||
<parameter type-id='26a90f95'/>
|
|
||||||
<parameter type-id='b59d7dce'/>
|
|
||||||
<parameter type-id='5ce45b60'/>
|
|
||||||
<parameter type-id='95e97e5e'/>
|
|
||||||
<return type-id='95e97e5e'/>
|
|
||||||
</function-decl>
|
|
||||||
<function-decl name='nvlist_next_nvpair' mangled-name='nvlist_next_nvpair' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvlist_next_nvpair'>
|
<function-decl name='nvlist_next_nvpair' mangled-name='nvlist_next_nvpair' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvlist_next_nvpair'>
|
||||||
<parameter type-id='5ce45b60'/>
|
<parameter type-id='5ce45b60'/>
|
||||||
<parameter type-id='dace003f'/>
|
<parameter type-id='dace003f'/>
|
||||||
@ -1134,6 +1126,12 @@
|
|||||||
<parameter type-id='7408d286'/>
|
<parameter type-id='7408d286'/>
|
||||||
<return type-id='95e97e5e'/>
|
<return type-id='95e97e5e'/>
|
||||||
</function-decl>
|
</function-decl>
|
||||||
|
<function-decl name='dcgettext' visibility='default' binding='global' size-in-bits='64'>
|
||||||
|
<parameter type-id='80f4b756'/>
|
||||||
|
<parameter type-id='80f4b756'/>
|
||||||
|
<parameter type-id='95e97e5e'/>
|
||||||
|
<return type-id='26a90f95'/>
|
||||||
|
</function-decl>
|
||||||
<function-decl name='regexec' visibility='default' binding='global' size-in-bits='64'>
|
<function-decl name='regexec' visibility='default' binding='global' size-in-bits='64'>
|
||||||
<parameter type-id='a431a9da'/>
|
<parameter type-id='a431a9da'/>
|
||||||
<parameter type-id='9d26089a'/>
|
<parameter type-id='9d26089a'/>
|
||||||
@ -1142,11 +1140,6 @@
|
|||||||
<parameter type-id='95e97e5e'/>
|
<parameter type-id='95e97e5e'/>
|
||||||
<return type-id='95e97e5e'/>
|
<return type-id='95e97e5e'/>
|
||||||
</function-decl>
|
</function-decl>
|
||||||
<function-decl name='fputs' visibility='default' binding='global' size-in-bits='64'>
|
|
||||||
<parameter type-id='9d26089a'/>
|
|
||||||
<parameter type-id='e75a27e9'/>
|
|
||||||
<return type-id='95e97e5e'/>
|
|
||||||
</function-decl>
|
|
||||||
<function-decl name='malloc' visibility='default' binding='global' size-in-bits='64'>
|
<function-decl name='malloc' visibility='default' binding='global' size-in-bits='64'>
|
||||||
<parameter type-id='b59d7dce'/>
|
<parameter type-id='b59d7dce'/>
|
||||||
<return type-id='eaa32e2f'/>
|
<return type-id='eaa32e2f'/>
|
||||||
@ -1187,6 +1180,12 @@
|
|||||||
<parameter is-variadic='yes'/>
|
<parameter is-variadic='yes'/>
|
||||||
<return type-id='95e97e5e'/>
|
<return type-id='95e97e5e'/>
|
||||||
</function-decl>
|
</function-decl>
|
||||||
|
<function-decl name='__printf_chk' visibility='default' binding='global' size-in-bits='64'>
|
||||||
|
<parameter type-id='95e97e5e'/>
|
||||||
|
<parameter type-id='80f4b756'/>
|
||||||
|
<parameter is-variadic='yes'/>
|
||||||
|
<return type-id='95e97e5e'/>
|
||||||
|
</function-decl>
|
||||||
<function-decl name='nvlist_prtctl_setdest' mangled-name='nvlist_prtctl_setdest' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvlist_prtctl_setdest'>
|
<function-decl name='nvlist_prtctl_setdest' mangled-name='nvlist_prtctl_setdest' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvlist_prtctl_setdest'>
|
||||||
<parameter type-id='b0c1ff8d' name='pctl'/>
|
<parameter type-id='b0c1ff8d' name='pctl'/>
|
||||||
<parameter type-id='822cd80b' name='fp'/>
|
<parameter type-id='822cd80b' name='fp'/>
|
||||||
@ -1399,6 +1398,11 @@
|
|||||||
<parameter type-id='b0c1ff8d' name='pctl'/>
|
<parameter type-id='b0c1ff8d' name='pctl'/>
|
||||||
<return type-id='48b5725f'/>
|
<return type-id='48b5725f'/>
|
||||||
</function-decl>
|
</function-decl>
|
||||||
|
<function-decl name='dump_nvlist' mangled-name='dump_nvlist' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dump_nvlist'>
|
||||||
|
<parameter type-id='5ce45b60' name='list'/>
|
||||||
|
<parameter type-id='95e97e5e' name='indent'/>
|
||||||
|
<return type-id='48b5725f'/>
|
||||||
|
</function-decl>
|
||||||
<function-decl name='nvpair_value_match_regex' mangled-name='nvpair_value_match_regex' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvpair_value_match_regex'>
|
<function-decl name='nvpair_value_match_regex' mangled-name='nvpair_value_match_regex' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvpair_value_match_regex'>
|
||||||
<parameter type-id='3fa542f0' name='nvp'/>
|
<parameter type-id='3fa542f0' name='nvp'/>
|
||||||
<parameter type-id='95e97e5e' name='ai'/>
|
<parameter type-id='95e97e5e' name='ai'/>
|
||||||
@ -1414,11 +1418,6 @@
|
|||||||
<parameter type-id='7d3cd834' name='ep'/>
|
<parameter type-id='7d3cd834' name='ep'/>
|
||||||
<return type-id='95e97e5e'/>
|
<return type-id='95e97e5e'/>
|
||||||
</function-decl>
|
</function-decl>
|
||||||
<function-decl name='dump_nvlist' mangled-name='dump_nvlist' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dump_nvlist'>
|
|
||||||
<parameter type-id='5ce45b60' name='list'/>
|
|
||||||
<parameter type-id='95e97e5e' name='indent'/>
|
|
||||||
<return type-id='48b5725f'/>
|
|
||||||
</function-decl>
|
|
||||||
<function-type size-in-bits='64' id='9f88f76e'>
|
<function-type size-in-bits='64' id='9f88f76e'>
|
||||||
<parameter type-id='196db161'/>
|
<parameter type-id='196db161'/>
|
||||||
<parameter type-id='eaa32e2f'/>
|
<parameter type-id='eaa32e2f'/>
|
||||||
@ -2195,7 +2194,6 @@
|
|||||||
</data-member>
|
</data-member>
|
||||||
</class-decl>
|
</class-decl>
|
||||||
<typedef-decl name='stack_t' type-id='380f9954' id='ac5e685f'/>
|
<typedef-decl name='stack_t' type-id='380f9954' id='ac5e685f'/>
|
||||||
<typedef-decl name='unw_regnum_t' type-id='95e97e5e' id='c53620f0'/>
|
|
||||||
<class-decl name='unw_cursor' size-in-bits='8128' is-struct='yes' visibility='default' id='384a1f22'>
|
<class-decl name='unw_cursor' size-in-bits='8128' is-struct='yes' visibility='default' id='384a1f22'>
|
||||||
<data-member access='public' layout-offset-in-bits='0'>
|
<data-member access='public' layout-offset-in-bits='0'>
|
||||||
<var-decl name='opaque' type-id='dc70ec0b' visibility='default'/>
|
<var-decl name='opaque' type-id='dc70ec0b' visibility='default'/>
|
||||||
@ -2308,10 +2306,6 @@
|
|||||||
<parameter type-id='b59d7dce'/>
|
<parameter type-id='b59d7dce'/>
|
||||||
<return type-id='79a0948f'/>
|
<return type-id='79a0948f'/>
|
||||||
</function-decl>
|
</function-decl>
|
||||||
<function-decl name='_Ux86_64_regname' visibility='default' binding='global' size-in-bits='64'>
|
|
||||||
<parameter type-id='c53620f0'/>
|
|
||||||
<return type-id='80f4b756'/>
|
|
||||||
</function-decl>
|
|
||||||
<function-decl name='_ULx86_64_init_local' visibility='default' binding='global' size-in-bits='64'>
|
<function-decl name='_ULx86_64_init_local' visibility='default' binding='global' size-in-bits='64'>
|
||||||
<parameter type-id='3946e4d1'/>
|
<parameter type-id='3946e4d1'/>
|
||||||
<parameter type-id='2e408b96'/>
|
<parameter type-id='2e408b96'/>
|
||||||
|
@ -783,6 +783,160 @@ nvlist_prt(nvlist_t *nvl, nvlist_prtctl_t pctl)
|
|||||||
nvlist_print_with_indent(nvl, pctl);
|
nvlist_print_with_indent(nvl, pctl);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#define NVP(elem, type, vtype, ptype, format) { \
|
||||||
|
vtype value; \
|
||||||
|
\
|
||||||
|
(void) nvpair_value_##type(elem, &value); \
|
||||||
|
(void) printf("%*s%s: " format "\n", indent, "", \
|
||||||
|
nvpair_name(elem), (ptype)value); \
|
||||||
|
}
|
||||||
|
|
||||||
|
#define NVPA(elem, type, vtype, ptype, format) { \
|
||||||
|
uint_t i, count; \
|
||||||
|
vtype *value; \
|
||||||
|
\
|
||||||
|
(void) nvpair_value_##type(elem, &value, &count); \
|
||||||
|
for (i = 0; i < count; i++) { \
|
||||||
|
(void) printf("%*s%s[%d]: " format "\n", indent, "", \
|
||||||
|
nvpair_name(elem), i, (ptype)value[i]); \
|
||||||
|
} \
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Similar to nvlist_print() but handles arrays slightly differently.
|
||||||
|
*/
|
||||||
|
void
|
||||||
|
dump_nvlist(nvlist_t *list, int indent)
|
||||||
|
{
|
||||||
|
nvpair_t *elem = NULL;
|
||||||
|
boolean_t bool_value;
|
||||||
|
nvlist_t *nvlist_value;
|
||||||
|
nvlist_t **nvlist_array_value;
|
||||||
|
uint_t i, count;
|
||||||
|
|
||||||
|
if (list == NULL) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
while ((elem = nvlist_next_nvpair(list, elem)) != NULL) {
|
||||||
|
switch (nvpair_type(elem)) {
|
||||||
|
case DATA_TYPE_BOOLEAN:
|
||||||
|
(void) printf("%*s%s\n", indent, "", nvpair_name(elem));
|
||||||
|
break;
|
||||||
|
|
||||||
|
case DATA_TYPE_BOOLEAN_VALUE:
|
||||||
|
(void) nvpair_value_boolean_value(elem, &bool_value);
|
||||||
|
(void) printf("%*s%s: %s\n", indent, "",
|
||||||
|
nvpair_name(elem), bool_value ? "true" : "false");
|
||||||
|
break;
|
||||||
|
|
||||||
|
case DATA_TYPE_BYTE:
|
||||||
|
NVP(elem, byte, uchar_t, int, "%u");
|
||||||
|
break;
|
||||||
|
|
||||||
|
case DATA_TYPE_INT8:
|
||||||
|
NVP(elem, int8, int8_t, int, "%d");
|
||||||
|
break;
|
||||||
|
|
||||||
|
case DATA_TYPE_UINT8:
|
||||||
|
NVP(elem, uint8, uint8_t, int, "%u");
|
||||||
|
break;
|
||||||
|
|
||||||
|
case DATA_TYPE_INT16:
|
||||||
|
NVP(elem, int16, int16_t, int, "%d");
|
||||||
|
break;
|
||||||
|
|
||||||
|
case DATA_TYPE_UINT16:
|
||||||
|
NVP(elem, uint16, uint16_t, int, "%u");
|
||||||
|
break;
|
||||||
|
|
||||||
|
case DATA_TYPE_INT32:
|
||||||
|
NVP(elem, int32, int32_t, long, "%ld");
|
||||||
|
break;
|
||||||
|
|
||||||
|
case DATA_TYPE_UINT32:
|
||||||
|
NVP(elem, uint32, uint32_t, ulong_t, "%lu");
|
||||||
|
break;
|
||||||
|
|
||||||
|
case DATA_TYPE_INT64:
|
||||||
|
NVP(elem, int64, int64_t, longlong_t, "%lld");
|
||||||
|
break;
|
||||||
|
|
||||||
|
case DATA_TYPE_UINT64:
|
||||||
|
NVP(elem, uint64, uint64_t, u_longlong_t, "%llu");
|
||||||
|
break;
|
||||||
|
|
||||||
|
case DATA_TYPE_STRING:
|
||||||
|
NVP(elem, string, const char *, const char *, "'%s'");
|
||||||
|
break;
|
||||||
|
|
||||||
|
case DATA_TYPE_BYTE_ARRAY:
|
||||||
|
NVPA(elem, byte_array, uchar_t, int, "%u");
|
||||||
|
break;
|
||||||
|
|
||||||
|
case DATA_TYPE_INT8_ARRAY:
|
||||||
|
NVPA(elem, int8_array, int8_t, int, "%d");
|
||||||
|
break;
|
||||||
|
|
||||||
|
case DATA_TYPE_UINT8_ARRAY:
|
||||||
|
NVPA(elem, uint8_array, uint8_t, int, "%u");
|
||||||
|
break;
|
||||||
|
|
||||||
|
case DATA_TYPE_INT16_ARRAY:
|
||||||
|
NVPA(elem, int16_array, int16_t, int, "%d");
|
||||||
|
break;
|
||||||
|
|
||||||
|
case DATA_TYPE_UINT16_ARRAY:
|
||||||
|
NVPA(elem, uint16_array, uint16_t, int, "%u");
|
||||||
|
break;
|
||||||
|
|
||||||
|
case DATA_TYPE_INT32_ARRAY:
|
||||||
|
NVPA(elem, int32_array, int32_t, long, "%ld");
|
||||||
|
break;
|
||||||
|
|
||||||
|
case DATA_TYPE_UINT32_ARRAY:
|
||||||
|
NVPA(elem, uint32_array, uint32_t, ulong_t, "%lu");
|
||||||
|
break;
|
||||||
|
|
||||||
|
case DATA_TYPE_INT64_ARRAY:
|
||||||
|
NVPA(elem, int64_array, int64_t, longlong_t, "%lld");
|
||||||
|
break;
|
||||||
|
|
||||||
|
case DATA_TYPE_UINT64_ARRAY:
|
||||||
|
NVPA(elem, uint64_array, uint64_t, u_longlong_t,
|
||||||
|
"%llu");
|
||||||
|
break;
|
||||||
|
|
||||||
|
case DATA_TYPE_STRING_ARRAY:
|
||||||
|
NVPA(elem, string_array, const char *, const char *,
|
||||||
|
"'%s'");
|
||||||
|
break;
|
||||||
|
|
||||||
|
case DATA_TYPE_NVLIST:
|
||||||
|
(void) nvpair_value_nvlist(elem, &nvlist_value);
|
||||||
|
(void) printf("%*s%s:\n", indent, "",
|
||||||
|
nvpair_name(elem));
|
||||||
|
dump_nvlist(nvlist_value, indent + 4);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case DATA_TYPE_NVLIST_ARRAY:
|
||||||
|
(void) nvpair_value_nvlist_array(elem,
|
||||||
|
&nvlist_array_value, &count);
|
||||||
|
for (i = 0; i < count; i++) {
|
||||||
|
(void) printf("%*s%s[%u]:\n", indent, "",
|
||||||
|
nvpair_name(elem), i);
|
||||||
|
dump_nvlist(nvlist_array_value[i], indent + 4);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
(void) printf(dgettext(TEXT_DOMAIN, "bad config type "
|
||||||
|
"%d for %s\n"), nvpair_type(elem),
|
||||||
|
nvpair_name(elem));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* ======================================================================
|
* ======================================================================
|
||||||
* | |
|
* | |
|
||||||
@ -1137,30 +1291,3 @@ nvpair_value_match(nvpair_t *nvp, int ai, const char *value, const char **ep)
|
|||||||
{
|
{
|
||||||
return (nvpair_value_match_regex(nvp, ai, value, NULL, ep));
|
return (nvpair_value_match_regex(nvp, ai, value, NULL, ep));
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* Similar to nvlist_print() but handles arrays slightly differently.
|
|
||||||
*/
|
|
||||||
void
|
|
||||||
dump_nvlist(nvlist_t *list, int indent)
|
|
||||||
{
|
|
||||||
int len;
|
|
||||||
char *buf;
|
|
||||||
|
|
||||||
len = nvlist_snprintf(NULL, 0, list, indent);
|
|
||||||
len++; /* Add null terminator */
|
|
||||||
|
|
||||||
buf = malloc(len);
|
|
||||||
if (buf == NULL)
|
|
||||||
return;
|
|
||||||
|
|
||||||
(void) nvlist_snprintf(buf, len, list, indent);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* fputs does not have limitations on the size of the buffer being
|
|
||||||
* printed (unlike printf).
|
|
||||||
*/
|
|
||||||
fputs(buf, stdout);
|
|
||||||
|
|
||||||
free(buf);
|
|
||||||
}
|
|
||||||
|
@ -41,26 +41,9 @@
|
|||||||
do { ssize_t r __maybe_unused = write(fd, s, n); } while (0)
|
do { ssize_t r __maybe_unused = write(fd, s, n); } while (0)
|
||||||
#define spl_bt_write(fd, s) spl_bt_write_n(fd, s, sizeof (s)-1)
|
#define spl_bt_write(fd, s) spl_bt_write_n(fd, s, sizeof (s)-1)
|
||||||
|
|
||||||
#ifdef HAVE_LIBUNWIND
|
#if defined(HAVE_LIBUNWIND)
|
||||||
/*
|
|
||||||
* libunwind-gcc and libunwind-llvm both list registers using an enum,
|
|
||||||
* unw_regnum_t, however they indicate the highest numbered register for
|
|
||||||
* a given architecture in different ways. We can check which one is defined
|
|
||||||
* and mark which libunwind is in use
|
|
||||||
*/
|
|
||||||
#ifdef IS_LIBUNWIND_LLVM
|
|
||||||
#include <libunwind.h>
|
|
||||||
#define LAST_REG_INDEX _LIBUNWIND_HIGHEST_DWARF_REGISTER
|
|
||||||
#else
|
|
||||||
/*
|
|
||||||
* Need to define UNW_LOCAL_ONLY before importing libunwind.h
|
|
||||||
* if using libgcc libunwind.
|
|
||||||
*/
|
|
||||||
#define UNW_LOCAL_ONLY
|
#define UNW_LOCAL_ONLY
|
||||||
#include <libunwind.h>
|
#include <libunwind.h>
|
||||||
#define LAST_REG_INDEX UNW_TDEP_LAST_REG
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Convert `v` to ASCII hex characters. The bottom `n` nybbles (4-bits ie one
|
* Convert `v` to ASCII hex characters. The bottom `n` nybbles (4-bits ie one
|
||||||
@ -119,13 +102,14 @@ libspl_backtrace(int fd)
|
|||||||
unw_init_local(&cp, &uc);
|
unw_init_local(&cp, &uc);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Iterate over all registers for the architecture. We've figured
|
* libunwind's list of possible registers for this architecture is an
|
||||||
* out the highest number above, however, not all register numbers in
|
* enum, unw_regnum_t. UNW_TDEP_LAST_REG is the highest-numbered
|
||||||
* this range are defined by the architecture, and not all defined
|
* register in that list, however, not all register numbers in this
|
||||||
* registers will be present on every implementation of that
|
* range are defined by the architecture, and not all defined registers
|
||||||
* architecture. Moreover, libunwind provides nice names for most, but
|
* will be present on every implementation of that architecture.
|
||||||
* not all registers, but these are hardcoded; a name being available
|
* Moreover, libunwind provides nice names for most, but not all
|
||||||
* does not mean that register is available.
|
* registers, but these are hardcoded; a name being available does not
|
||||||
|
* mean that register is available.
|
||||||
*
|
*
|
||||||
* So, we have to pull this all together here. We try to get the value
|
* So, we have to pull this all together here. We try to get the value
|
||||||
* of every possible register. If we get a value for it, then the
|
* of every possible register. If we get a value for it, then the
|
||||||
@ -136,42 +120,26 @@ libspl_backtrace(int fd)
|
|||||||
* thing.
|
* thing.
|
||||||
*/
|
*/
|
||||||
uint_t cols = 0;
|
uint_t cols = 0;
|
||||||
for (uint_t regnum = 0; regnum <= LAST_REG_INDEX; regnum++) {
|
for (uint_t regnum = 0; regnum <= UNW_TDEP_LAST_REG; regnum++) {
|
||||||
/*
|
/*
|
||||||
* Get the value. Any error probably means the register
|
* Get the value. Any error probably means the register
|
||||||
* doesn't exist, and we skip it. LLVM libunwind iterates over
|
* doesn't exist, and we skip it.
|
||||||
* fp registers in the same list, however they have to be
|
|
||||||
* accessed using unw_get_fpreg instead. Here, we just ignore
|
|
||||||
* them.
|
|
||||||
*/
|
*/
|
||||||
#ifdef IS_LIBUNWIND_LLVM
|
|
||||||
if (unw_is_fpreg(&cp, regnum) ||
|
|
||||||
unw_get_reg(&cp, regnum, &v) < 0)
|
|
||||||
continue;
|
|
||||||
#else
|
|
||||||
if (unw_get_reg(&cp, regnum, &v) < 0)
|
if (unw_get_reg(&cp, regnum, &v) < 0)
|
||||||
continue;
|
continue;
|
||||||
#endif
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Register name. If GCC libunwind doesn't have a name for it,
|
* Register name. If libunwind doesn't have a name for it,
|
||||||
* it will return "???". As a shortcut, we just treat '?'
|
* it will return "???". As a shortcut, we just treat '?'
|
||||||
* is an alternate end-of-string character. LLVM libunwind will
|
* is an alternate end-of-string character.
|
||||||
* return the string 'unknown register', which we detect by
|
|
||||||
* checking if the register name is longer than 5 characters.
|
|
||||||
*/
|
*/
|
||||||
#ifdef IS_LIBUNWIND_LLVM
|
|
||||||
const char *name = unw_regname(&cp, regnum);
|
|
||||||
#else
|
|
||||||
const char *name = unw_regname(regnum);
|
const char *name = unw_regname(regnum);
|
||||||
#endif
|
|
||||||
for (n = 0; name[n] != '\0' && name[n] != '?'; n++) {}
|
for (n = 0; name[n] != '\0' && name[n] != '?'; n++) {}
|
||||||
if (n == 0 || n > 5) {
|
if (n == 0) {
|
||||||
/*
|
/*
|
||||||
* No valid name, or likely llvm_libunwind returned
|
* No valid name, so make one of the form "?xx", where
|
||||||
* unknown_register, so make one of the form "?xx",
|
* "xx" is the two-char hex of libunwind's register
|
||||||
* where "xx" is the two-char hex of libunwind's
|
* number.
|
||||||
* register number.
|
|
||||||
*/
|
*/
|
||||||
buf[0] = '?';
|
buf[0] = '?';
|
||||||
n = spl_bt_u64_to_hex_str(regnum, 2,
|
n = spl_bt_u64_to_hex_str(regnum, 2,
|
||||||
|
@ -24,8 +24,6 @@ libspl_rpc_HEADERS = \
|
|||||||
|
|
||||||
libspl_sysdir = $(libspldir)/sys
|
libspl_sysdir = $(libspldir)/sys
|
||||||
libspl_sys_HEADERS = \
|
libspl_sys_HEADERS = \
|
||||||
%D%/sys/abd_os.h \
|
|
||||||
%D%/sys/abd_impl_os.h \
|
|
||||||
%D%/sys/acl.h \
|
%D%/sys/acl.h \
|
||||||
%D%/sys/acl_impl.h \
|
%D%/sys/acl_impl.h \
|
||||||
%D%/sys/asm_linkage.h \
|
%D%/sys/asm_linkage.h \
|
||||||
|
@ -86,13 +86,12 @@ do { \
|
|||||||
|
|
||||||
#define VERIFY3B(LEFT, OP, RIGHT) \
|
#define VERIFY3B(LEFT, OP, RIGHT) \
|
||||||
do { \
|
do { \
|
||||||
const boolean_t __left = (boolean_t)!!(LEFT); \
|
const boolean_t __left = (boolean_t)(LEFT); \
|
||||||
const boolean_t __right = (boolean_t)!!(RIGHT); \
|
const boolean_t __right = (boolean_t)(RIGHT); \
|
||||||
if (!(__left OP __right)) \
|
if (!(__left OP __right)) \
|
||||||
libspl_assertf(__FILE__, __FUNCTION__, __LINE__, \
|
libspl_assertf(__FILE__, __FUNCTION__, __LINE__, \
|
||||||
"VERIFY3B(%s, %s, %s) failed " \
|
"%s %s %s (0x%llx %s 0x%llx)", #LEFT, #OP, #RIGHT, \
|
||||||
"(%d %s %d)", #LEFT, #OP, #RIGHT, \
|
(u_longlong_t)__left, #OP, (u_longlong_t)__right); \
|
||||||
__left, #OP, __right); \
|
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
#define VERIFY3S(LEFT, OP, RIGHT) \
|
#define VERIFY3S(LEFT, OP, RIGHT) \
|
||||||
@ -101,9 +100,8 @@ do { \
|
|||||||
const int64_t __right = (int64_t)(RIGHT); \
|
const int64_t __right = (int64_t)(RIGHT); \
|
||||||
if (!(__left OP __right)) \
|
if (!(__left OP __right)) \
|
||||||
libspl_assertf(__FILE__, __FUNCTION__, __LINE__, \
|
libspl_assertf(__FILE__, __FUNCTION__, __LINE__, \
|
||||||
"VERIFY3S(%s, %s, %s) failed " \
|
"%s %s %s (0x%llx %s 0x%llx)", #LEFT, #OP, #RIGHT, \
|
||||||
"(%lld %s 0x%lld)", #LEFT, #OP, #RIGHT, \
|
(u_longlong_t)__left, #OP, (u_longlong_t)__right); \
|
||||||
(longlong_t)__left, #OP, (longlong_t)__right); \
|
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
#define VERIFY3U(LEFT, OP, RIGHT) \
|
#define VERIFY3U(LEFT, OP, RIGHT) \
|
||||||
@ -112,8 +110,7 @@ do { \
|
|||||||
const uint64_t __right = (uint64_t)(RIGHT); \
|
const uint64_t __right = (uint64_t)(RIGHT); \
|
||||||
if (!(__left OP __right)) \
|
if (!(__left OP __right)) \
|
||||||
libspl_assertf(__FILE__, __FUNCTION__, __LINE__, \
|
libspl_assertf(__FILE__, __FUNCTION__, __LINE__, \
|
||||||
"VERIFY3U(%s, %s, %s) failed " \
|
"%s %s %s (0x%llx %s 0x%llx)", #LEFT, #OP, #RIGHT, \
|
||||||
"(%llu %s %llu)", #LEFT, #OP, #RIGHT, \
|
|
||||||
(u_longlong_t)__left, #OP, (u_longlong_t)__right); \
|
(u_longlong_t)__left, #OP, (u_longlong_t)__right); \
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
@ -123,8 +120,7 @@ do { \
|
|||||||
const uintptr_t __right = (uintptr_t)(RIGHT); \
|
const uintptr_t __right = (uintptr_t)(RIGHT); \
|
||||||
if (!(__left OP __right)) \
|
if (!(__left OP __right)) \
|
||||||
libspl_assertf(__FILE__, __FUNCTION__, __LINE__, \
|
libspl_assertf(__FILE__, __FUNCTION__, __LINE__, \
|
||||||
"VERIFY3P(%s, %s, %s) failed " \
|
"%s %s %s (%p %s %p)", #LEFT, #OP, #RIGHT, \
|
||||||
"(%p %s %p)", #LEFT, #OP, #RIGHT, \
|
|
||||||
(void *)__left, #OP, (void *)__right); \
|
(void *)__left, #OP, (void *)__right); \
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
@ -133,7 +129,7 @@ do { \
|
|||||||
const uint64_t __left = (uint64_t)(LEFT); \
|
const uint64_t __left = (uint64_t)(LEFT); \
|
||||||
if (!(__left == 0)) \
|
if (!(__left == 0)) \
|
||||||
libspl_assertf(__FILE__, __FUNCTION__, __LINE__, \
|
libspl_assertf(__FILE__, __FUNCTION__, __LINE__, \
|
||||||
"VERIFY0(%s) failed (%lld)", #LEFT, \
|
"%s == 0 (0x%llx == 0)", #LEFT, \
|
||||||
(u_longlong_t)__left); \
|
(u_longlong_t)__left); \
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
@ -142,7 +138,7 @@ do { \
|
|||||||
const uintptr_t __left = (uintptr_t)(LEFT); \
|
const uintptr_t __left = (uintptr_t)(LEFT); \
|
||||||
if (!(__left == 0)) \
|
if (!(__left == 0)) \
|
||||||
libspl_assertf(__FILE__, __FUNCTION__, __LINE__, \
|
libspl_assertf(__FILE__, __FUNCTION__, __LINE__, \
|
||||||
"VERIFY0P(%s) failed (%p)", #LEFT, \
|
"%s == 0 (%p == 0)", #LEFT, \
|
||||||
(void *)__left); \
|
(void *)__left); \
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
@ -154,13 +150,13 @@ do { \
|
|||||||
/* BEGIN CSTYLED */
|
/* BEGIN CSTYLED */
|
||||||
#define VERIFY3BF(LEFT, OP, RIGHT, STR, ...) \
|
#define VERIFY3BF(LEFT, OP, RIGHT, STR, ...) \
|
||||||
do { \
|
do { \
|
||||||
const boolean_t __left = (boolean_t)!!(LEFT); \
|
const boolean_t __left = (boolean_t)(LEFT); \
|
||||||
const boolean_t __right = (boolean_t)!!(RIGHT); \
|
const boolean_t __right = (boolean_t)(RIGHT); \
|
||||||
if (!(__left OP __right)) \
|
if (!(__left OP __right)) \
|
||||||
libspl_assertf(__FILE__, __FUNCTION__, __LINE__, \
|
libspl_assertf(__FILE__, __FUNCTION__, __LINE__, \
|
||||||
"VERIFY3B(%s, %s, %s) failed " \
|
"%s %s %s (0x%llx %s 0x%llx) " STR, \
|
||||||
"(%d %s %d) " STR, #LEFT, #OP, #RIGHT, \
|
#LEFT, #OP, #RIGHT, \
|
||||||
__left, #OP, __right, \
|
(u_longlong_t)__left, #OP, (u_longlong_t)__right, \
|
||||||
__VA_ARGS__); \
|
__VA_ARGS__); \
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
@ -170,9 +166,9 @@ do { \
|
|||||||
const int64_t __right = (int64_t)(RIGHT); \
|
const int64_t __right = (int64_t)(RIGHT); \
|
||||||
if (!(__left OP __right)) \
|
if (!(__left OP __right)) \
|
||||||
libspl_assertf(__FILE__, __FUNCTION__, __LINE__, \
|
libspl_assertf(__FILE__, __FUNCTION__, __LINE__, \
|
||||||
"VERIFY3S(%s, %s, %s) failed " \
|
"%s %s %s (0x%llx %s 0x%llx) " STR, \
|
||||||
"(%lld %s %lld) " STR, #LEFT, #OP, #RIGHT, \
|
#LEFT, #OP, #RIGHT, \
|
||||||
(longlong_t)__left, #OP, (longlong_t)__right, \
|
(u_longlong_t)__left, #OP, (u_longlong_t)__right, \
|
||||||
__VA_ARGS__); \
|
__VA_ARGS__); \
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
@ -182,8 +178,8 @@ do { \
|
|||||||
const uint64_t __right = (uint64_t)(RIGHT); \
|
const uint64_t __right = (uint64_t)(RIGHT); \
|
||||||
if (!(__left OP __right)) \
|
if (!(__left OP __right)) \
|
||||||
libspl_assertf(__FILE__, __FUNCTION__, __LINE__, \
|
libspl_assertf(__FILE__, __FUNCTION__, __LINE__, \
|
||||||
"VERIFY3U(%s, %s, %s) failed " \
|
"%s %s %s (0x%llx %s 0x%llx) " STR, \
|
||||||
"(%llu %s %llu) " STR, #LEFT, #OP, #RIGHT, \
|
#LEFT, #OP, #RIGHT, \
|
||||||
(u_longlong_t)__left, #OP, (u_longlong_t)__right, \
|
(u_longlong_t)__left, #OP, (u_longlong_t)__right, \
|
||||||
__VA_ARGS__); \
|
__VA_ARGS__); \
|
||||||
} while (0)
|
} while (0)
|
||||||
@ -194,20 +190,20 @@ do { \
|
|||||||
const uintptr_t __right = (uintptr_t)(RIGHT); \
|
const uintptr_t __right = (uintptr_t)(RIGHT); \
|
||||||
if (!(__left OP __right)) \
|
if (!(__left OP __right)) \
|
||||||
libspl_assertf(__FILE__, __FUNCTION__, __LINE__, \
|
libspl_assertf(__FILE__, __FUNCTION__, __LINE__, \
|
||||||
"VERIFY3P(%s, %s, %s) failed " \
|
"%s %s %s (0x%llx %s 0x%llx) " STR, \
|
||||||
"(%p %s %p) " STR, #LEFT, #OP, #RIGHT, \
|
#LEFT, #OP, #RIGHT, \
|
||||||
(void *)__left, #OP, (void *)__right, \
|
(u_longlong_t)__left, #OP, (u_longlong_t)__right, \
|
||||||
__VA_ARGS__); \
|
__VA_ARGS__); \
|
||||||
} while (0)
|
} while (0)
|
||||||
/* END CSTYLED */
|
/* END CSTYLED */
|
||||||
|
|
||||||
#define VERIFY0F(LEFT, STR, ...) \
|
#define VERIFY0F(LEFT, STR, ...) \
|
||||||
do { \
|
do { \
|
||||||
const int64_t __left = (int64_t)(LEFT); \
|
const uint64_t __left = (uint64_t)(LEFT); \
|
||||||
if (!(__left == 0)) \
|
if (!(__left == 0)) \
|
||||||
libspl_assertf(__FILE__, __FUNCTION__, __LINE__, \
|
libspl_assertf(__FILE__, __FUNCTION__, __LINE__, \
|
||||||
"VERIFY0(%s) failed (%lld) " STR, #LEFT, \
|
"%s == 0 (0x%llx == 0) " STR, #LEFT, \
|
||||||
(longlong_t)__left, __VA_ARGS__); \
|
(u_longlong_t)__left, __VA_ARGS__); \
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
#define VERIFY0PF(LEFT, STR, ...) \
|
#define VERIFY0PF(LEFT, STR, ...) \
|
||||||
@ -215,8 +211,8 @@ do { \
|
|||||||
const uintptr_t __left = (uintptr_t)(LEFT); \
|
const uintptr_t __left = (uintptr_t)(LEFT); \
|
||||||
if (!(__left == 0)) \
|
if (!(__left == 0)) \
|
||||||
libspl_assertf(__FILE__, __FUNCTION__, __LINE__, \
|
libspl_assertf(__FILE__, __FUNCTION__, __LINE__, \
|
||||||
"VERIFY0P(%s) failed (%p) " STR, #LEFT, \
|
"%s == 0 (%p == 0) " STR, #LEFT, \
|
||||||
(void *)__left, __VA_ARGS__); \
|
(u_longlong_t)__left, __VA_ARGS__); \
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
#ifdef assert
|
#ifdef assert
|
||||||
@ -268,7 +264,10 @@ do { \
|
|||||||
((void)(((!(A)) || (B)) || \
|
((void)(((!(A)) || (B)) || \
|
||||||
libspl_assert("(" #A ") implies (" #B ")", \
|
libspl_assert("(" #A ") implies (" #B ")", \
|
||||||
__FILE__, __FUNCTION__, __LINE__)))
|
__FILE__, __FUNCTION__, __LINE__)))
|
||||||
#define EQUIV(A, B) VERIFY3B(A, ==, B)
|
#define EQUIV(A, B) \
|
||||||
|
((void)((!!(A) == !!(B)) || \
|
||||||
|
libspl_assert("(" #A ") is equivalent to (" #B ")", \
|
||||||
|
__FILE__, __FUNCTION__, __LINE__)))
|
||||||
|
|
||||||
#endif /* NDEBUG */
|
#endif /* NDEBUG */
|
||||||
|
|
||||||
|
@ -3,4 +3,5 @@ libunicode_la_CFLAGS = $(AM_CFLAGS) $(KERNEL_CFLAGS) $(LIBRARY_CFLAGS)
|
|||||||
noinst_LTLIBRARIES += libunicode.la
|
noinst_LTLIBRARIES += libunicode.la
|
||||||
|
|
||||||
nodist_libunicode_la_SOURCES = \
|
nodist_libunicode_la_SOURCES = \
|
||||||
module/unicode/u8_textprep.c
|
module/unicode/u8_textprep.c \
|
||||||
|
module/unicode/uconv.c
|
||||||
|
@ -652,7 +652,6 @@
|
|||||||
</data-member>
|
</data-member>
|
||||||
</class-decl>
|
</class-decl>
|
||||||
<typedef-decl name='stack_t' type-id='380f9954' id='ac5e685f'/>
|
<typedef-decl name='stack_t' type-id='380f9954' id='ac5e685f'/>
|
||||||
<typedef-decl name='unw_regnum_t' type-id='95e97e5e' id='c53620f0'/>
|
|
||||||
<class-decl name='unw_cursor' size-in-bits='8128' is-struct='yes' visibility='default' id='384a1f22'>
|
<class-decl name='unw_cursor' size-in-bits='8128' is-struct='yes' visibility='default' id='384a1f22'>
|
||||||
<data-member access='public' layout-offset-in-bits='0'>
|
<data-member access='public' layout-offset-in-bits='0'>
|
||||||
<var-decl name='opaque' type-id='dc70ec0b' visibility='default'/>
|
<var-decl name='opaque' type-id='dc70ec0b' visibility='default'/>
|
||||||
@ -764,10 +763,6 @@
|
|||||||
<parameter type-id='b59d7dce'/>
|
<parameter type-id='b59d7dce'/>
|
||||||
<return type-id='79a0948f'/>
|
<return type-id='79a0948f'/>
|
||||||
</function-decl>
|
</function-decl>
|
||||||
<function-decl name='_Ux86_64_regname' visibility='default' binding='global' size-in-bits='64'>
|
|
||||||
<parameter type-id='c53620f0'/>
|
|
||||||
<return type-id='80f4b756'/>
|
|
||||||
</function-decl>
|
|
||||||
<function-decl name='_ULx86_64_init_local' visibility='default' binding='global' size-in-bits='64'>
|
<function-decl name='_ULx86_64_init_local' visibility='default' binding='global' size-in-bits='64'>
|
||||||
<parameter type-id='3946e4d1'/>
|
<parameter type-id='3946e4d1'/>
|
||||||
<parameter type-id='2e408b96'/>
|
<parameter type-id='2e408b96'/>
|
||||||
@ -1016,9 +1011,16 @@
|
|||||||
</function-decl>
|
</function-decl>
|
||||||
</abi-instr>
|
</abi-instr>
|
||||||
<abi-instr address-size='64' path='lib/libspl/os/linux/getmntany.c' language='LANG_C99'>
|
<abi-instr address-size='64' path='lib/libspl/os/linux/getmntany.c' language='LANG_C99'>
|
||||||
|
<array-type-def dimensions='1' type-id='38b51b3c' size-in-bits='832' id='02b72c00'>
|
||||||
|
<subrange length='13' type-id='7359adad' id='487fded1'/>
|
||||||
|
</array-type-def>
|
||||||
<array-type-def dimensions='1' type-id='03085adc' size-in-bits='192' id='083f8d58'>
|
<array-type-def dimensions='1' type-id='03085adc' size-in-bits='192' id='083f8d58'>
|
||||||
<subrange length='3' type-id='7359adad' id='56f209d2'/>
|
<subrange length='3' type-id='7359adad' id='56f209d2'/>
|
||||||
</array-type-def>
|
</array-type-def>
|
||||||
|
<class-decl name='__locale_data' is-struct='yes' visibility='default' is-declaration-only='yes' id='23de8b96'/>
|
||||||
|
<array-type-def dimensions='1' type-id='80f4b756' size-in-bits='832' id='39e6f84a'>
|
||||||
|
<subrange length='13' type-id='7359adad' id='487fded1'/>
|
||||||
|
</array-type-def>
|
||||||
<class-decl name='mnttab' size-in-bits='256' is-struct='yes' visibility='default' id='1b055409'>
|
<class-decl name='mnttab' size-in-bits='256' is-struct='yes' visibility='default' id='1b055409'>
|
||||||
<data-member access='public' layout-offset-in-bits='0'>
|
<data-member access='public' layout-offset-in-bits='0'>
|
||||||
<var-decl name='mnt_special' type-id='26a90f95' visibility='default'/>
|
<var-decl name='mnt_special' type-id='26a90f95' visibility='default'/>
|
||||||
@ -1128,6 +1130,25 @@
|
|||||||
<typedef-decl name='__blksize_t' type-id='bd54fe1a' id='d3f10a7f'/>
|
<typedef-decl name='__blksize_t' type-id='bd54fe1a' id='d3f10a7f'/>
|
||||||
<typedef-decl name='__blkcnt64_t' type-id='bd54fe1a' id='4e711bf1'/>
|
<typedef-decl name='__blkcnt64_t' type-id='bd54fe1a' id='4e711bf1'/>
|
||||||
<typedef-decl name='__syscall_slong_t' type-id='bd54fe1a' id='03085adc'/>
|
<typedef-decl name='__syscall_slong_t' type-id='bd54fe1a' id='03085adc'/>
|
||||||
|
<class-decl name='__locale_struct' size-in-bits='1856' is-struct='yes' visibility='default' id='90cc1ce3'>
|
||||||
|
<data-member access='public' layout-offset-in-bits='0'>
|
||||||
|
<var-decl name='__locales' type-id='02b72c00' visibility='default'/>
|
||||||
|
</data-member>
|
||||||
|
<data-member access='public' layout-offset-in-bits='832'>
|
||||||
|
<var-decl name='__ctype_b' type-id='31347b7a' visibility='default'/>
|
||||||
|
</data-member>
|
||||||
|
<data-member access='public' layout-offset-in-bits='896'>
|
||||||
|
<var-decl name='__ctype_tolower' type-id='6d60f45d' visibility='default'/>
|
||||||
|
</data-member>
|
||||||
|
<data-member access='public' layout-offset-in-bits='960'>
|
||||||
|
<var-decl name='__ctype_toupper' type-id='6d60f45d' visibility='default'/>
|
||||||
|
</data-member>
|
||||||
|
<data-member access='public' layout-offset-in-bits='1024'>
|
||||||
|
<var-decl name='__names' type-id='39e6f84a' visibility='default'/>
|
||||||
|
</data-member>
|
||||||
|
</class-decl>
|
||||||
|
<typedef-decl name='__locale_t' type-id='f01e1813' id='b7ac9b5f'/>
|
||||||
|
<typedef-decl name='locale_t' type-id='b7ac9b5f' id='973a4f8d'/>
|
||||||
<class-decl name='timespec' size-in-bits='128' is-struct='yes' visibility='default' id='a9c79a1f'>
|
<class-decl name='timespec' size-in-bits='128' is-struct='yes' visibility='default' id='a9c79a1f'>
|
||||||
<data-member access='public' layout-offset-in-bits='0'>
|
<data-member access='public' layout-offset-in-bits='0'>
|
||||||
<var-decl name='tv_sec' type-id='65eda9c0' visibility='default'/>
|
<var-decl name='tv_sec' type-id='65eda9c0' visibility='default'/>
|
||||||
@ -1136,12 +1157,23 @@
|
|||||||
<var-decl name='tv_nsec' type-id='03085adc' visibility='default'/>
|
<var-decl name='tv_nsec' type-id='03085adc' visibility='default'/>
|
||||||
</data-member>
|
</data-member>
|
||||||
</class-decl>
|
</class-decl>
|
||||||
|
<pointer-type-def type-id='23de8b96' size-in-bits='64' id='38b51b3c'/>
|
||||||
|
<pointer-type-def type-id='90cc1ce3' size-in-bits='64' id='f01e1813'/>
|
||||||
|
<qualified-type-def type-id='95e97e5e' const='yes' id='2448a865'/>
|
||||||
|
<pointer-type-def type-id='2448a865' size-in-bits='64' id='6d60f45d'/>
|
||||||
|
<qualified-type-def type-id='8efea9e5' const='yes' id='3beb2af4'/>
|
||||||
|
<pointer-type-def type-id='3beb2af4' size-in-bits='64' id='31347b7a'/>
|
||||||
<pointer-type-def type-id='0c544dc0' size-in-bits='64' id='394fc496'/>
|
<pointer-type-def type-id='0c544dc0' size-in-bits='64' id='394fc496'/>
|
||||||
<pointer-type-def type-id='56fe4a37' size-in-bits='64' id='b6b61d2f'/>
|
<pointer-type-def type-id='56fe4a37' size-in-bits='64' id='b6b61d2f'/>
|
||||||
<qualified-type-def type-id='b6b61d2f' restrict='yes' id='3cad23cd'/>
|
<qualified-type-def type-id='b6b61d2f' restrict='yes' id='3cad23cd'/>
|
||||||
<pointer-type-def type-id='1b055409' size-in-bits='64' id='9d424d31'/>
|
<pointer-type-def type-id='1b055409' size-in-bits='64' id='9d424d31'/>
|
||||||
<pointer-type-def type-id='0bbec9cd' size-in-bits='64' id='62f7a03d'/>
|
<pointer-type-def type-id='0bbec9cd' size-in-bits='64' id='62f7a03d'/>
|
||||||
<qualified-type-def type-id='62f7a03d' restrict='yes' id='f1cadedf'/>
|
<qualified-type-def type-id='62f7a03d' restrict='yes' id='f1cadedf'/>
|
||||||
|
<class-decl name='__locale_data' is-struct='yes' visibility='default' is-declaration-only='yes' id='23de8b96'/>
|
||||||
|
<function-decl name='uselocale' visibility='default' binding='global' size-in-bits='64'>
|
||||||
|
<parameter type-id='973a4f8d'/>
|
||||||
|
<return type-id='973a4f8d'/>
|
||||||
|
</function-decl>
|
||||||
<function-decl name='getmntent_r' visibility='default' binding='global' size-in-bits='64'>
|
<function-decl name='getmntent_r' visibility='default' binding='global' size-in-bits='64'>
|
||||||
<parameter type-id='e75a27e9'/>
|
<parameter type-id='e75a27e9'/>
|
||||||
<parameter type-id='3cad23cd'/>
|
<parameter type-id='3cad23cd'/>
|
||||||
@ -1153,8 +1185,9 @@
|
|||||||
<parameter type-id='822cd80b'/>
|
<parameter type-id='822cd80b'/>
|
||||||
<return type-id='95e97e5e'/>
|
<return type-id='95e97e5e'/>
|
||||||
</function-decl>
|
</function-decl>
|
||||||
<function-decl name='strerror' visibility='default' binding='global' size-in-bits='64'>
|
<function-decl name='strerror_l' visibility='default' binding='global' size-in-bits='64'>
|
||||||
<parameter type-id='95e97e5e'/>
|
<parameter type-id='95e97e5e'/>
|
||||||
|
<parameter type-id='973a4f8d'/>
|
||||||
<return type-id='26a90f95'/>
|
<return type-id='26a90f95'/>
|
||||||
</function-decl>
|
</function-decl>
|
||||||
<function-decl name='__fprintf_chk' visibility='default' binding='global' size-in-bits='64'>
|
<function-decl name='__fprintf_chk' visibility='default' binding='global' size-in-bits='64'>
|
||||||
|
@ -345,7 +345,6 @@
|
|||||||
<elf-symbol name='zfs_hold' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
|
<elf-symbol name='zfs_hold' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
|
||||||
<elf-symbol name='zfs_hold_nvl' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
|
<elf-symbol name='zfs_hold_nvl' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
|
||||||
<elf-symbol name='zfs_ioctl' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
|
<elf-symbol name='zfs_ioctl' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
|
||||||
<elf-symbol name='zfs_is_encrypted' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
|
|
||||||
<elf-symbol name='zfs_is_mounted' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
|
<elf-symbol name='zfs_is_mounted' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
|
||||||
<elf-symbol name='zfs_is_shared' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
|
<elf-symbol name='zfs_is_shared' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
|
||||||
<elf-symbol name='zfs_isnumber' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
|
<elf-symbol name='zfs_isnumber' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
|
||||||
@ -466,7 +465,6 @@
|
|||||||
<elf-symbol name='zfs_valstr_zio_stage' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
|
<elf-symbol name='zfs_valstr_zio_stage' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
|
||||||
<elf-symbol name='zfs_valstr_zio_stage_bits' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
|
<elf-symbol name='zfs_valstr_zio_stage_bits' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
|
||||||
<elf-symbol name='zfs_valstr_zio_stage_pairs' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
|
<elf-symbol name='zfs_valstr_zio_stage_pairs' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
|
||||||
<elf-symbol name='zfs_valstr_zio_type' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
|
|
||||||
<elf-symbol name='zfs_version_kernel' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
|
<elf-symbol name='zfs_version_kernel' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
|
||||||
<elf-symbol name='zfs_version_nvlist' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
|
<elf-symbol name='zfs_version_nvlist' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
|
||||||
<elf-symbol name='zfs_version_print' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
|
<elf-symbol name='zfs_version_print' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
|
||||||
@ -633,7 +631,7 @@
|
|||||||
<elf-symbol name='sa_protocol_names' size='16' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
|
<elf-symbol name='sa_protocol_names' size='16' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
|
||||||
<elf-symbol name='spa_feature_table' size='2464' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
|
<elf-symbol name='spa_feature_table' size='2464' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
|
||||||
<elf-symbol name='zfeature_checks_disable' size='4' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
|
<elf-symbol name='zfeature_checks_disable' size='4' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
|
||||||
<elf-symbol name='zfs_deleg_perm_tab' size='528' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
|
<elf-symbol name='zfs_deleg_perm_tab' size='512' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
|
||||||
<elf-symbol name='zfs_history_event_names' size='328' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
|
<elf-symbol name='zfs_history_event_names' size='328' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
|
||||||
<elf-symbol name='zfs_max_dataset_nesting' size='4' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
|
<elf-symbol name='zfs_max_dataset_nesting' size='4' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
|
||||||
<elf-symbol name='zfs_userquota_prop_prefixes' size='96' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
|
<elf-symbol name='zfs_userquota_prop_prefixes' size='96' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
|
||||||
@ -1172,7 +1170,6 @@
|
|||||||
</data-member>
|
</data-member>
|
||||||
</class-decl>
|
</class-decl>
|
||||||
<typedef-decl name='stack_t' type-id='380f9954' id='ac5e685f'/>
|
<typedef-decl name='stack_t' type-id='380f9954' id='ac5e685f'/>
|
||||||
<typedef-decl name='unw_regnum_t' type-id='95e97e5e' id='c53620f0'/>
|
|
||||||
<class-decl name='unw_cursor' size-in-bits='8128' is-struct='yes' visibility='default' id='384a1f22'>
|
<class-decl name='unw_cursor' size-in-bits='8128' is-struct='yes' visibility='default' id='384a1f22'>
|
||||||
<data-member access='public' layout-offset-in-bits='0'>
|
<data-member access='public' layout-offset-in-bits='0'>
|
||||||
<var-decl name='opaque' type-id='dc70ec0b' visibility='default'/>
|
<var-decl name='opaque' type-id='dc70ec0b' visibility='default'/>
|
||||||
@ -1278,10 +1275,6 @@
|
|||||||
<pointer-type-def type-id='1203d35c' size-in-bits='64' id='3946e4d1'/>
|
<pointer-type-def type-id='1203d35c' size-in-bits='64' id='3946e4d1'/>
|
||||||
<pointer-type-def type-id='190d09ef' size-in-bits='64' id='3e0601f0'/>
|
<pointer-type-def type-id='190d09ef' size-in-bits='64' id='3e0601f0'/>
|
||||||
<pointer-type-def type-id='73d941c6' size-in-bits='64' id='42f5faab'/>
|
<pointer-type-def type-id='73d941c6' size-in-bits='64' id='42f5faab'/>
|
||||||
<function-decl name='_Ux86_64_regname' visibility='default' binding='global' size-in-bits='64'>
|
|
||||||
<parameter type-id='c53620f0'/>
|
|
||||||
<return type-id='80f4b756'/>
|
|
||||||
</function-decl>
|
|
||||||
<function-decl name='_ULx86_64_init_local' visibility='default' binding='global' size-in-bits='64'>
|
<function-decl name='_ULx86_64_init_local' visibility='default' binding='global' size-in-bits='64'>
|
||||||
<parameter type-id='3946e4d1'/>
|
<parameter type-id='3946e4d1'/>
|
||||||
<parameter type-id='2e408b96'/>
|
<parameter type-id='2e408b96'/>
|
||||||
@ -1927,9 +1920,6 @@
|
|||||||
<data-member access='public' layout-offset-in-bits='248'>
|
<data-member access='public' layout-offset-in-bits='248'>
|
||||||
<var-decl name='dds_origin' type-id='d1617432' visibility='default'/>
|
<var-decl name='dds_origin' type-id='d1617432' visibility='default'/>
|
||||||
</data-member>
|
</data-member>
|
||||||
<data-member access='public' layout-offset-in-bits='2296'>
|
|
||||||
<var-decl name='dds_flags' type-id='b96825af' visibility='default'/>
|
|
||||||
</data-member>
|
|
||||||
</class-decl>
|
</class-decl>
|
||||||
<typedef-decl name='dmu_objset_stats_t' type-id='098f0221' id='b2c14f17'/>
|
<typedef-decl name='dmu_objset_stats_t' type-id='098f0221' id='b2c14f17'/>
|
||||||
<enum-decl name='zfs_type_t' naming-typedef-id='2e45de5d' id='5d8f7321'>
|
<enum-decl name='zfs_type_t' naming-typedef-id='2e45de5d' id='5d8f7321'>
|
||||||
@ -2059,13 +2049,7 @@
|
|||||||
<enumerator name='ZFS_PROP_VOLTHREADING' value='97'/>
|
<enumerator name='ZFS_PROP_VOLTHREADING' value='97'/>
|
||||||
<enumerator name='ZFS_PROP_DIRECT' value='98'/>
|
<enumerator name='ZFS_PROP_DIRECT' value='98'/>
|
||||||
<enumerator name='ZFS_PROP_LONGNAME' value='99'/>
|
<enumerator name='ZFS_PROP_LONGNAME' value='99'/>
|
||||||
<enumerator name='ZFS_PROP_DEFAULTUSERQUOTA' value='100'/>
|
<enumerator name='ZFS_NUM_PROPS' value='100'/>
|
||||||
<enumerator name='ZFS_PROP_DEFAULTGROUPQUOTA' value='101'/>
|
|
||||||
<enumerator name='ZFS_PROP_DEFAULTPROJECTQUOTA' value='102'/>
|
|
||||||
<enumerator name='ZFS_PROP_DEFAULTUSEROBJQUOTA' value='103'/>
|
|
||||||
<enumerator name='ZFS_PROP_DEFAULTGROUPOBJQUOTA' value='104'/>
|
|
||||||
<enumerator name='ZFS_PROP_DEFAULTPROJECTOBJQUOTA' value='105'/>
|
|
||||||
<enumerator name='ZFS_NUM_PROPS' value='106'/>
|
|
||||||
</enum-decl>
|
</enum-decl>
|
||||||
<typedef-decl name='zfs_prop_t' type-id='4b000d60' id='58603c44'/>
|
<typedef-decl name='zfs_prop_t' type-id='4b000d60' id='58603c44'/>
|
||||||
<enum-decl name='zprop_source_t' naming-typedef-id='a2256d42' id='5903f80e'>
|
<enum-decl name='zprop_source_t' naming-typedef-id='a2256d42' id='5903f80e'>
|
||||||
@ -2492,13 +2476,6 @@
|
|||||||
<parameter type-id='eaa32e2f'/>
|
<parameter type-id='eaa32e2f'/>
|
||||||
<return type-id='95e97e5e'/>
|
<return type-id='95e97e5e'/>
|
||||||
</function-decl>
|
</function-decl>
|
||||||
<function-decl name='zfs_iter_filesystems_v2' mangled-name='zfs_iter_filesystems_v2' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_iter_filesystems_v2'>
|
|
||||||
<parameter type-id='9200a744'/>
|
|
||||||
<parameter type-id='95e97e5e'/>
|
|
||||||
<parameter type-id='d8e49ab9'/>
|
|
||||||
<parameter type-id='eaa32e2f'/>
|
|
||||||
<return type-id='95e97e5e'/>
|
|
||||||
</function-decl>
|
|
||||||
<function-decl name='zfs_iter_mounted' mangled-name='zfs_iter_mounted' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_iter_mounted'>
|
<function-decl name='zfs_iter_mounted' mangled-name='zfs_iter_mounted' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_iter_mounted'>
|
||||||
<parameter type-id='9200a744'/>
|
<parameter type-id='9200a744'/>
|
||||||
<parameter type-id='d8e49ab9'/>
|
<parameter type-id='d8e49ab9'/>
|
||||||
@ -2618,9 +2595,6 @@
|
|||||||
</function-type>
|
</function-type>
|
||||||
</abi-instr>
|
</abi-instr>
|
||||||
<abi-instr address-size='64' path='lib/libzfs/libzfs_config.c' language='LANG_C99'>
|
<abi-instr address-size='64' path='lib/libzfs/libzfs_config.c' language='LANG_C99'>
|
||||||
<array-type-def dimensions='1' type-id='a84c031d' size-in-bits='2816' id='514368c7'>
|
|
||||||
<subrange length='352' type-id='7359adad' id='b715cd6f'/>
|
|
||||||
</array-type-def>
|
|
||||||
<array-type-def dimensions='1' type-id='a84c031d' size-in-bits='32768' id='d16c6df4'>
|
<array-type-def dimensions='1' type-id='a84c031d' size-in-bits='32768' id='d16c6df4'>
|
||||||
<subrange length='4096' type-id='7359adad' id='bc1b5ddc'/>
|
<subrange length='4096' type-id='7359adad' id='bc1b5ddc'/>
|
||||||
</array-type-def>
|
</array-type-def>
|
||||||
@ -2718,7 +2692,7 @@
|
|||||||
<var-decl name='drr_toname' type-id='d1617432' visibility='default'/>
|
<var-decl name='drr_toname' type-id='d1617432' visibility='default'/>
|
||||||
</data-member>
|
</data-member>
|
||||||
</class-decl>
|
</class-decl>
|
||||||
<class-decl name='zinject_record' size-in-bits='2944' is-struct='yes' visibility='default' id='3216f820'>
|
<class-decl name='zinject_record' size-in-bits='2816' is-struct='yes' visibility='default' id='3216f820'>
|
||||||
<data-member access='public' layout-offset-in-bits='0'>
|
<data-member access='public' layout-offset-in-bits='0'>
|
||||||
<var-decl name='zi_objset' type-id='9c313c2d' visibility='default'/>
|
<var-decl name='zi_objset' type-id='9c313c2d' visibility='default'/>
|
||||||
</data-member>
|
</data-member>
|
||||||
@ -2770,12 +2744,6 @@
|
|||||||
<data-member access='public' layout-offset-in-bits='2784'>
|
<data-member access='public' layout-offset-in-bits='2784'>
|
||||||
<var-decl name='zi_dvas' type-id='8f92235e' visibility='default'/>
|
<var-decl name='zi_dvas' type-id='8f92235e' visibility='default'/>
|
||||||
</data-member>
|
</data-member>
|
||||||
<data-member access='public' layout-offset-in-bits='2816'>
|
|
||||||
<var-decl name='zi_match_count' type-id='9c313c2d' visibility='default'/>
|
|
||||||
</data-member>
|
|
||||||
<data-member access='public' layout-offset-in-bits='2880'>
|
|
||||||
<var-decl name='zi_inject_count' type-id='9c313c2d' visibility='default'/>
|
|
||||||
</data-member>
|
|
||||||
</class-decl>
|
</class-decl>
|
||||||
<typedef-decl name='zinject_record_t' type-id='3216f820' id='a4301ca6'/>
|
<typedef-decl name='zinject_record_t' type-id='3216f820' id='a4301ca6'/>
|
||||||
<class-decl name='zfs_share' size-in-bits='256' is-struct='yes' visibility='default' id='feb6f2da'>
|
<class-decl name='zfs_share' size-in-bits='256' is-struct='yes' visibility='default' id='feb6f2da'>
|
||||||
@ -2864,7 +2832,16 @@
|
|||||||
<var-decl name='zc_begin_record' type-id='09fcdc01' visibility='default'/>
|
<var-decl name='zc_begin_record' type-id='09fcdc01' visibility='default'/>
|
||||||
</data-member>
|
</data-member>
|
||||||
<data-member access='public' layout-offset-in-bits='106368'>
|
<data-member access='public' layout-offset-in-bits='106368'>
|
||||||
<var-decl name='' type-id='ac5ab595' visibility='default'/>
|
<var-decl name='zc_inject_record' type-id='a4301ca6' visibility='default'/>
|
||||||
|
</data-member>
|
||||||
|
<data-member access='public' layout-offset-in-bits='109184'>
|
||||||
|
<var-decl name='zc_defer_destroy' type-id='8f92235e' visibility='default'/>
|
||||||
|
</data-member>
|
||||||
|
<data-member access='public' layout-offset-in-bits='109216'>
|
||||||
|
<var-decl name='zc_flags' type-id='8f92235e' visibility='default'/>
|
||||||
|
</data-member>
|
||||||
|
<data-member access='public' layout-offset-in-bits='109248'>
|
||||||
|
<var-decl name='zc_action_handle' type-id='9c313c2d' visibility='default'/>
|
||||||
</data-member>
|
</data-member>
|
||||||
<data-member access='public' layout-offset-in-bits='109312'>
|
<data-member access='public' layout-offset-in-bits='109312'>
|
||||||
<var-decl name='zc_cleanup_fd' type-id='95e97e5e' visibility='default'/>
|
<var-decl name='zc_cleanup_fd' type-id='95e97e5e' visibility='default'/>
|
||||||
@ -2891,28 +2868,6 @@
|
|||||||
<var-decl name='zc_zoneid' type-id='9c313c2d' visibility='default'/>
|
<var-decl name='zc_zoneid' type-id='9c313c2d' visibility='default'/>
|
||||||
</data-member>
|
</data-member>
|
||||||
</class-decl>
|
</class-decl>
|
||||||
<union-decl name='__anonymous_union__' size-in-bits='2944' is-anonymous='yes' visibility='default' id='ac5ab595'>
|
|
||||||
<data-member access='public'>
|
|
||||||
<var-decl name='zc_inject_record' type-id='a4301ca6' visibility='default'/>
|
|
||||||
</data-member>
|
|
||||||
<data-member access='public'>
|
|
||||||
<var-decl name='' type-id='e7f43f73' visibility='default'/>
|
|
||||||
</data-member>
|
|
||||||
</union-decl>
|
|
||||||
<class-decl name='__anonymous_struct__' size-in-bits='2944' is-struct='yes' is-anonymous='yes' visibility='default' id='e7f43f73'>
|
|
||||||
<data-member access='public' layout-offset-in-bits='0'>
|
|
||||||
<var-decl name='zc_pad1' type-id='514368c7' visibility='default'/>
|
|
||||||
</data-member>
|
|
||||||
<data-member access='public' layout-offset-in-bits='2816'>
|
|
||||||
<var-decl name='zc_defer_destroy' type-id='8f92235e' visibility='default'/>
|
|
||||||
</data-member>
|
|
||||||
<data-member access='public' layout-offset-in-bits='2848'>
|
|
||||||
<var-decl name='zc_flags' type-id='8f92235e' visibility='default'/>
|
|
||||||
</data-member>
|
|
||||||
<data-member access='public' layout-offset-in-bits='2880'>
|
|
||||||
<var-decl name='zc_action_handle' type-id='9c313c2d' visibility='default'/>
|
|
||||||
</data-member>
|
|
||||||
</class-decl>
|
|
||||||
<typedef-decl name='zfs_cmd_t' type-id='3522cd69' id='a5559cdd'/>
|
<typedef-decl name='zfs_cmd_t' type-id='3522cd69' id='a5559cdd'/>
|
||||||
<class-decl name='zfs_stat' size-in-bits='320' is-struct='yes' visibility='default' id='6417f0b9'>
|
<class-decl name='zfs_stat' size-in-bits='320' is-struct='yes' visibility='default' id='6417f0b9'>
|
||||||
<data-member access='public' layout-offset-in-bits='0'>
|
<data-member access='public' layout-offset-in-bits='0'>
|
||||||
@ -3108,6 +3063,9 @@
|
|||||||
</function-type>
|
</function-type>
|
||||||
</abi-instr>
|
</abi-instr>
|
||||||
<abi-instr address-size='64' path='lib/libzfs/libzfs_crypto.c' language='LANG_C99'>
|
<abi-instr address-size='64' path='lib/libzfs/libzfs_crypto.c' language='LANG_C99'>
|
||||||
|
<array-type-def dimensions='1' type-id='38b51b3c' size-in-bits='832' id='02b72c00'>
|
||||||
|
<subrange length='13' type-id='7359adad' id='487fded1'/>
|
||||||
|
</array-type-def>
|
||||||
<array-type-def dimensions='1' type-id='fb7c6451' size-in-bits='256' id='64177143'>
|
<array-type-def dimensions='1' type-id='fb7c6451' size-in-bits='256' id='64177143'>
|
||||||
<subrange length='32' type-id='7359adad' id='ae5bde82'/>
|
<subrange length='32' type-id='7359adad' id='ae5bde82'/>
|
||||||
</array-type-def>
|
</array-type-def>
|
||||||
@ -3120,6 +3078,10 @@
|
|||||||
<class-decl name='_IO_codecvt' is-struct='yes' visibility='default' is-declaration-only='yes' id='a4036571'/>
|
<class-decl name='_IO_codecvt' is-struct='yes' visibility='default' is-declaration-only='yes' id='a4036571'/>
|
||||||
<class-decl name='_IO_marker' is-struct='yes' visibility='default' is-declaration-only='yes' id='010ae0b9'/>
|
<class-decl name='_IO_marker' is-struct='yes' visibility='default' is-declaration-only='yes' id='010ae0b9'/>
|
||||||
<class-decl name='_IO_wide_data' is-struct='yes' visibility='default' is-declaration-only='yes' id='79bd3751'/>
|
<class-decl name='_IO_wide_data' is-struct='yes' visibility='default' is-declaration-only='yes' id='79bd3751'/>
|
||||||
|
<class-decl name='__locale_data' is-struct='yes' visibility='default' is-declaration-only='yes' id='23de8b96'/>
|
||||||
|
<array-type-def dimensions='1' type-id='80f4b756' size-in-bits='832' id='39e6f84a'>
|
||||||
|
<subrange length='13' type-id='7359adad' id='487fded1'/>
|
||||||
|
</array-type-def>
|
||||||
<array-type-def dimensions='1' type-id='95e97e5e' size-in-bits='896' id='47394ee0'>
|
<array-type-def dimensions='1' type-id='95e97e5e' size-in-bits='896' id='47394ee0'>
|
||||||
<subrange length='28' type-id='7359adad' id='3db583d7'/>
|
<subrange length='28' type-id='7359adad' id='3db583d7'/>
|
||||||
</array-type-def>
|
</array-type-def>
|
||||||
@ -3188,7 +3150,7 @@
|
|||||||
<typedef-decl name='ssize_t' type-id='41060289' id='79a0948f'/>
|
<typedef-decl name='ssize_t' type-id='41060289' id='79a0948f'/>
|
||||||
<class-decl name='sigaction' size-in-bits='1216' is-struct='yes' visibility='default' id='fe391c48'>
|
<class-decl name='sigaction' size-in-bits='1216' is-struct='yes' visibility='default' id='fe391c48'>
|
||||||
<data-member access='public' layout-offset-in-bits='0'>
|
<data-member access='public' layout-offset-in-bits='0'>
|
||||||
<var-decl name='__sigaction_handler' type-id='ac5ab596' visibility='default'/>
|
<var-decl name='__sigaction_handler' type-id='ac5ab595' visibility='default'/>
|
||||||
</data-member>
|
</data-member>
|
||||||
<data-member access='public' layout-offset-in-bits='64'>
|
<data-member access='public' layout-offset-in-bits='64'>
|
||||||
<var-decl name='sa_mask' type-id='b9c97942' visibility='default'/>
|
<var-decl name='sa_mask' type-id='b9c97942' visibility='default'/>
|
||||||
@ -3200,7 +3162,7 @@
|
|||||||
<var-decl name='sa_restorer' type-id='953b12f8' visibility='default'/>
|
<var-decl name='sa_restorer' type-id='953b12f8' visibility='default'/>
|
||||||
</data-member>
|
</data-member>
|
||||||
</class-decl>
|
</class-decl>
|
||||||
<union-decl name='__anonymous_union__' size-in-bits='64' is-anonymous='yes' visibility='default' id='ac5ab596'>
|
<union-decl name='__anonymous_union__' size-in-bits='64' is-anonymous='yes' visibility='default' id='ac5ab595'>
|
||||||
<data-member access='public'>
|
<data-member access='public'>
|
||||||
<var-decl name='sa_handler' type-id='8cdd9566' visibility='default'/>
|
<var-decl name='sa_handler' type-id='8cdd9566' visibility='default'/>
|
||||||
</data-member>
|
</data-member>
|
||||||
@ -3244,6 +3206,24 @@
|
|||||||
<typedef-decl name='__clock_t' type-id='bd54fe1a' id='4d66c6d7'/>
|
<typedef-decl name='__clock_t' type-id='bd54fe1a' id='4d66c6d7'/>
|
||||||
<typedef-decl name='__ssize_t' type-id='bd54fe1a' id='41060289'/>
|
<typedef-decl name='__ssize_t' type-id='bd54fe1a' id='41060289'/>
|
||||||
<typedef-decl name='FILE' type-id='ec1ed955' id='aa12d1ba'/>
|
<typedef-decl name='FILE' type-id='ec1ed955' id='aa12d1ba'/>
|
||||||
|
<class-decl name='__locale_struct' size-in-bits='1856' is-struct='yes' visibility='default' id='90cc1ce3'>
|
||||||
|
<data-member access='public' layout-offset-in-bits='0'>
|
||||||
|
<var-decl name='__locales' type-id='02b72c00' visibility='default'/>
|
||||||
|
</data-member>
|
||||||
|
<data-member access='public' layout-offset-in-bits='832'>
|
||||||
|
<var-decl name='__ctype_b' type-id='31347b7a' visibility='default'/>
|
||||||
|
</data-member>
|
||||||
|
<data-member access='public' layout-offset-in-bits='896'>
|
||||||
|
<var-decl name='__ctype_tolower' type-id='6d60f45d' visibility='default'/>
|
||||||
|
</data-member>
|
||||||
|
<data-member access='public' layout-offset-in-bits='960'>
|
||||||
|
<var-decl name='__ctype_toupper' type-id='6d60f45d' visibility='default'/>
|
||||||
|
</data-member>
|
||||||
|
<data-member access='public' layout-offset-in-bits='1024'>
|
||||||
|
<var-decl name='__names' type-id='39e6f84a' visibility='default'/>
|
||||||
|
</data-member>
|
||||||
|
</class-decl>
|
||||||
|
<typedef-decl name='__locale_t' type-id='f01e1813' id='b7ac9b5f'/>
|
||||||
<class-decl name='__sigset_t' size-in-bits='1024' is-struct='yes' naming-typedef-id='b9c97942' visibility='default' id='2616147f'>
|
<class-decl name='__sigset_t' size-in-bits='1024' is-struct='yes' naming-typedef-id='b9c97942' visibility='default' id='2616147f'>
|
||||||
<data-member access='public' layout-offset-in-bits='0'>
|
<data-member access='public' layout-offset-in-bits='0'>
|
||||||
<var-decl name='__val' type-id='d2baa450' visibility='default'/>
|
<var-decl name='__val' type-id='d2baa450' visibility='default'/>
|
||||||
@ -3259,6 +3239,7 @@
|
|||||||
</data-member>
|
</data-member>
|
||||||
</union-decl>
|
</union-decl>
|
||||||
<typedef-decl name='__sigval_t' type-id='a094b870' id='eabacd01'/>
|
<typedef-decl name='__sigval_t' type-id='a094b870' id='eabacd01'/>
|
||||||
|
<typedef-decl name='locale_t' type-id='b7ac9b5f' id='973a4f8d'/>
|
||||||
<class-decl name='siginfo_t' size-in-bits='1024' is-struct='yes' naming-typedef-id='cb681f62' visibility='default' id='d8149419'>
|
<class-decl name='siginfo_t' size-in-bits='1024' is-struct='yes' naming-typedef-id='cb681f62' visibility='default' id='d8149419'>
|
||||||
<data-member access='public' layout-offset-in-bits='0'>
|
<data-member access='public' layout-offset-in-bits='0'>
|
||||||
<var-decl name='si_signo' type-id='95e97e5e' visibility='default'/>
|
<var-decl name='si_signo' type-id='95e97e5e' visibility='default'/>
|
||||||
@ -3273,36 +3254,36 @@
|
|||||||
<var-decl name='__pad0' type-id='95e97e5e' visibility='default'/>
|
<var-decl name='__pad0' type-id='95e97e5e' visibility='default'/>
|
||||||
</data-member>
|
</data-member>
|
||||||
<data-member access='public' layout-offset-in-bits='128'>
|
<data-member access='public' layout-offset-in-bits='128'>
|
||||||
<var-decl name='_sifields' type-id='ac5ab597' visibility='default'/>
|
<var-decl name='_sifields' type-id='ac5ab596' visibility='default'/>
|
||||||
</data-member>
|
</data-member>
|
||||||
</class-decl>
|
</class-decl>
|
||||||
<union-decl name='__anonymous_union__1' size-in-bits='896' is-anonymous='yes' visibility='default' id='ac5ab597'>
|
<union-decl name='__anonymous_union__1' size-in-bits='896' is-anonymous='yes' visibility='default' id='ac5ab596'>
|
||||||
<data-member access='public'>
|
<data-member access='public'>
|
||||||
<var-decl name='_pad' type-id='47394ee0' visibility='default'/>
|
<var-decl name='_pad' type-id='47394ee0' visibility='default'/>
|
||||||
</data-member>
|
</data-member>
|
||||||
<data-member access='public'>
|
<data-member access='public'>
|
||||||
<var-decl name='_kill' type-id='e7f43f74' visibility='default'/>
|
<var-decl name='_kill' type-id='e7f43f73' visibility='default'/>
|
||||||
</data-member>
|
</data-member>
|
||||||
<data-member access='public'>
|
<data-member access='public'>
|
||||||
<var-decl name='_timer' type-id='e7f43f75' visibility='default'/>
|
<var-decl name='_timer' type-id='e7f43f74' visibility='default'/>
|
||||||
</data-member>
|
</data-member>
|
||||||
<data-member access='public'>
|
<data-member access='public'>
|
||||||
<var-decl name='_rt' type-id='e7f43f76' visibility='default'/>
|
<var-decl name='_rt' type-id='e7f43f75' visibility='default'/>
|
||||||
</data-member>
|
</data-member>
|
||||||
<data-member access='public'>
|
<data-member access='public'>
|
||||||
<var-decl name='_sigchld' type-id='e7f43f77' visibility='default'/>
|
<var-decl name='_sigchld' type-id='e7f43f76' visibility='default'/>
|
||||||
</data-member>
|
</data-member>
|
||||||
<data-member access='public'>
|
<data-member access='public'>
|
||||||
<var-decl name='_sigfault' type-id='e7f43f78' visibility='default'/>
|
<var-decl name='_sigfault' type-id='e7f43f77' visibility='default'/>
|
||||||
</data-member>
|
</data-member>
|
||||||
<data-member access='public'>
|
<data-member access='public'>
|
||||||
<var-decl name='_sigpoll' type-id='e7f43f79' visibility='default'/>
|
<var-decl name='_sigpoll' type-id='e7f43f78' visibility='default'/>
|
||||||
</data-member>
|
</data-member>
|
||||||
<data-member access='public'>
|
<data-member access='public'>
|
||||||
<var-decl name='_sigsys' type-id='e7f43f7a' visibility='default'/>
|
<var-decl name='_sigsys' type-id='e7f43f79' visibility='default'/>
|
||||||
</data-member>
|
</data-member>
|
||||||
</union-decl>
|
</union-decl>
|
||||||
<class-decl name='__anonymous_struct__1' size-in-bits='64' is-struct='yes' is-anonymous='yes' visibility='default' id='e7f43f74'>
|
<class-decl name='__anonymous_struct__1' size-in-bits='64' is-struct='yes' is-anonymous='yes' visibility='default' id='e7f43f73'>
|
||||||
<data-member access='public' layout-offset-in-bits='0'>
|
<data-member access='public' layout-offset-in-bits='0'>
|
||||||
<var-decl name='si_pid' type-id='3629bad8' visibility='default'/>
|
<var-decl name='si_pid' type-id='3629bad8' visibility='default'/>
|
||||||
</data-member>
|
</data-member>
|
||||||
@ -3310,7 +3291,7 @@
|
|||||||
<var-decl name='si_uid' type-id='cc5fcceb' visibility='default'/>
|
<var-decl name='si_uid' type-id='cc5fcceb' visibility='default'/>
|
||||||
</data-member>
|
</data-member>
|
||||||
</class-decl>
|
</class-decl>
|
||||||
<class-decl name='__anonymous_struct__2' size-in-bits='128' is-struct='yes' is-anonymous='yes' visibility='default' id='e7f43f75'>
|
<class-decl name='__anonymous_struct__2' size-in-bits='128' is-struct='yes' is-anonymous='yes' visibility='default' id='e7f43f74'>
|
||||||
<data-member access='public' layout-offset-in-bits='0'>
|
<data-member access='public' layout-offset-in-bits='0'>
|
||||||
<var-decl name='si_tid' type-id='95e97e5e' visibility='default'/>
|
<var-decl name='si_tid' type-id='95e97e5e' visibility='default'/>
|
||||||
</data-member>
|
</data-member>
|
||||||
@ -3321,7 +3302,7 @@
|
|||||||
<var-decl name='si_sigval' type-id='eabacd01' visibility='default'/>
|
<var-decl name='si_sigval' type-id='eabacd01' visibility='default'/>
|
||||||
</data-member>
|
</data-member>
|
||||||
</class-decl>
|
</class-decl>
|
||||||
<class-decl name='__anonymous_struct__3' size-in-bits='128' is-struct='yes' is-anonymous='yes' visibility='default' id='e7f43f76'>
|
<class-decl name='__anonymous_struct__3' size-in-bits='128' is-struct='yes' is-anonymous='yes' visibility='default' id='e7f43f75'>
|
||||||
<data-member access='public' layout-offset-in-bits='0'>
|
<data-member access='public' layout-offset-in-bits='0'>
|
||||||
<var-decl name='si_pid' type-id='3629bad8' visibility='default'/>
|
<var-decl name='si_pid' type-id='3629bad8' visibility='default'/>
|
||||||
</data-member>
|
</data-member>
|
||||||
@ -3332,7 +3313,7 @@
|
|||||||
<var-decl name='si_sigval' type-id='eabacd01' visibility='default'/>
|
<var-decl name='si_sigval' type-id='eabacd01' visibility='default'/>
|
||||||
</data-member>
|
</data-member>
|
||||||
</class-decl>
|
</class-decl>
|
||||||
<class-decl name='__anonymous_struct__4' size-in-bits='256' is-struct='yes' is-anonymous='yes' visibility='default' id='e7f43f77'>
|
<class-decl name='__anonymous_struct__4' size-in-bits='256' is-struct='yes' is-anonymous='yes' visibility='default' id='e7f43f76'>
|
||||||
<data-member access='public' layout-offset-in-bits='0'>
|
<data-member access='public' layout-offset-in-bits='0'>
|
||||||
<var-decl name='si_pid' type-id='3629bad8' visibility='default'/>
|
<var-decl name='si_pid' type-id='3629bad8' visibility='default'/>
|
||||||
</data-member>
|
</data-member>
|
||||||
@ -3349,7 +3330,7 @@
|
|||||||
<var-decl name='si_stime' type-id='4d66c6d7' visibility='default'/>
|
<var-decl name='si_stime' type-id='4d66c6d7' visibility='default'/>
|
||||||
</data-member>
|
</data-member>
|
||||||
</class-decl>
|
</class-decl>
|
||||||
<class-decl name='__anonymous_struct__5' size-in-bits='256' is-struct='yes' is-anonymous='yes' visibility='default' id='e7f43f78'>
|
<class-decl name='__anonymous_struct__5' size-in-bits='256' is-struct='yes' is-anonymous='yes' visibility='default' id='e7f43f77'>
|
||||||
<data-member access='public' layout-offset-in-bits='0'>
|
<data-member access='public' layout-offset-in-bits='0'>
|
||||||
<var-decl name='si_addr' type-id='eaa32e2f' visibility='default'/>
|
<var-decl name='si_addr' type-id='eaa32e2f' visibility='default'/>
|
||||||
</data-member>
|
</data-member>
|
||||||
@ -3357,18 +3338,18 @@
|
|||||||
<var-decl name='si_addr_lsb' type-id='a2185560' visibility='default'/>
|
<var-decl name='si_addr_lsb' type-id='a2185560' visibility='default'/>
|
||||||
</data-member>
|
</data-member>
|
||||||
<data-member access='public' layout-offset-in-bits='128'>
|
<data-member access='public' layout-offset-in-bits='128'>
|
||||||
<var-decl name='_bounds' type-id='ac5ab598' visibility='default'/>
|
<var-decl name='_bounds' type-id='ac5ab597' visibility='default'/>
|
||||||
</data-member>
|
</data-member>
|
||||||
</class-decl>
|
</class-decl>
|
||||||
<union-decl name='__anonymous_union__2' size-in-bits='128' is-anonymous='yes' visibility='default' id='ac5ab598'>
|
<union-decl name='__anonymous_union__2' size-in-bits='128' is-anonymous='yes' visibility='default' id='ac5ab597'>
|
||||||
<data-member access='public'>
|
<data-member access='public'>
|
||||||
<var-decl name='_addr_bnd' type-id='e7f43f7b' visibility='default'/>
|
<var-decl name='_addr_bnd' type-id='e7f43f7a' visibility='default'/>
|
||||||
</data-member>
|
</data-member>
|
||||||
<data-member access='public'>
|
<data-member access='public'>
|
||||||
<var-decl name='_pkey' type-id='62f1140c' visibility='default'/>
|
<var-decl name='_pkey' type-id='62f1140c' visibility='default'/>
|
||||||
</data-member>
|
</data-member>
|
||||||
</union-decl>
|
</union-decl>
|
||||||
<class-decl name='__anonymous_struct__6' size-in-bits='128' is-struct='yes' is-anonymous='yes' visibility='default' id='e7f43f7b'>
|
<class-decl name='__anonymous_struct__6' size-in-bits='128' is-struct='yes' is-anonymous='yes' visibility='default' id='e7f43f7a'>
|
||||||
<data-member access='public' layout-offset-in-bits='0'>
|
<data-member access='public' layout-offset-in-bits='0'>
|
||||||
<var-decl name='_lower' type-id='eaa32e2f' visibility='default'/>
|
<var-decl name='_lower' type-id='eaa32e2f' visibility='default'/>
|
||||||
</data-member>
|
</data-member>
|
||||||
@ -3376,7 +3357,7 @@
|
|||||||
<var-decl name='_upper' type-id='eaa32e2f' visibility='default'/>
|
<var-decl name='_upper' type-id='eaa32e2f' visibility='default'/>
|
||||||
</data-member>
|
</data-member>
|
||||||
</class-decl>
|
</class-decl>
|
||||||
<class-decl name='__anonymous_struct__7' size-in-bits='128' is-struct='yes' is-anonymous='yes' visibility='default' id='e7f43f79'>
|
<class-decl name='__anonymous_struct__7' size-in-bits='128' is-struct='yes' is-anonymous='yes' visibility='default' id='e7f43f78'>
|
||||||
<data-member access='public' layout-offset-in-bits='0'>
|
<data-member access='public' layout-offset-in-bits='0'>
|
||||||
<var-decl name='si_band' type-id='bd54fe1a' visibility='default'/>
|
<var-decl name='si_band' type-id='bd54fe1a' visibility='default'/>
|
||||||
</data-member>
|
</data-member>
|
||||||
@ -3384,7 +3365,7 @@
|
|||||||
<var-decl name='si_fd' type-id='95e97e5e' visibility='default'/>
|
<var-decl name='si_fd' type-id='95e97e5e' visibility='default'/>
|
||||||
</data-member>
|
</data-member>
|
||||||
</class-decl>
|
</class-decl>
|
||||||
<class-decl name='__anonymous_struct__8' size-in-bits='128' is-struct='yes' is-anonymous='yes' visibility='default' id='e7f43f7a'>
|
<class-decl name='__anonymous_struct__8' size-in-bits='128' is-struct='yes' is-anonymous='yes' visibility='default' id='e7f43f79'>
|
||||||
<data-member access='public' layout-offset-in-bits='0'>
|
<data-member access='public' layout-offset-in-bits='0'>
|
||||||
<var-decl name='_call_addr' type-id='eaa32e2f' visibility='default'/>
|
<var-decl name='_call_addr' type-id='eaa32e2f' visibility='default'/>
|
||||||
</data-member>
|
</data-member>
|
||||||
@ -3494,9 +3475,13 @@
|
|||||||
<pointer-type-def type-id='bb4788fa' size-in-bits='64' id='cecf4ea7'/>
|
<pointer-type-def type-id='bb4788fa' size-in-bits='64' id='cecf4ea7'/>
|
||||||
<pointer-type-def type-id='010ae0b9' size-in-bits='64' id='e4c6fa61'/>
|
<pointer-type-def type-id='010ae0b9' size-in-bits='64' id='e4c6fa61'/>
|
||||||
<pointer-type-def type-id='79bd3751' size-in-bits='64' id='c65a1f29'/>
|
<pointer-type-def type-id='79bd3751' size-in-bits='64' id='c65a1f29'/>
|
||||||
|
<pointer-type-def type-id='23de8b96' size-in-bits='64' id='38b51b3c'/>
|
||||||
|
<pointer-type-def type-id='90cc1ce3' size-in-bits='64' id='f01e1813'/>
|
||||||
<qualified-type-def type-id='9b23c9ad' restrict='yes' id='8c85230f'/>
|
<qualified-type-def type-id='9b23c9ad' restrict='yes' id='8c85230f'/>
|
||||||
<qualified-type-def type-id='80f4b756' restrict='yes' id='9d26089a'/>
|
<qualified-type-def type-id='80f4b756' restrict='yes' id='9d26089a'/>
|
||||||
<pointer-type-def type-id='80f4b756' size-in-bits='64' id='7d3cd834'/>
|
<pointer-type-def type-id='80f4b756' size-in-bits='64' id='7d3cd834'/>
|
||||||
|
<qualified-type-def type-id='95e97e5e' const='yes' id='2448a865'/>
|
||||||
|
<pointer-type-def type-id='2448a865' size-in-bits='64' id='6d60f45d'/>
|
||||||
<qualified-type-def type-id='aca3bac8' const='yes' id='2498fd78'/>
|
<qualified-type-def type-id='aca3bac8' const='yes' id='2498fd78'/>
|
||||||
<pointer-type-def type-id='2498fd78' size-in-bits='64' id='eed6c816'/>
|
<pointer-type-def type-id='2498fd78' size-in-bits='64' id='eed6c816'/>
|
||||||
<qualified-type-def type-id='eed6c816' restrict='yes' id='a431a9da'/>
|
<qualified-type-def type-id='eed6c816' restrict='yes' id='a431a9da'/>
|
||||||
@ -3510,7 +3495,6 @@
|
|||||||
<qualified-type-def type-id='8efea9e5' const='yes' id='3beb2af4'/>
|
<qualified-type-def type-id='8efea9e5' const='yes' id='3beb2af4'/>
|
||||||
<pointer-type-def type-id='3beb2af4' size-in-bits='64' id='31347b7a'/>
|
<pointer-type-def type-id='3beb2af4' size-in-bits='64' id='31347b7a'/>
|
||||||
<pointer-type-def type-id='31347b7a' size-in-bits='64' id='c59e1ef0'/>
|
<pointer-type-def type-id='31347b7a' size-in-bits='64' id='c59e1ef0'/>
|
||||||
<pointer-type-def type-id='7a6844eb' size-in-bits='64' id='18c91f9e'/>
|
|
||||||
<pointer-type-def type-id='1b941664' size-in-bits='64' id='7e2979d5'/>
|
<pointer-type-def type-id='1b941664' size-in-bits='64' id='7e2979d5'/>
|
||||||
<qualified-type-def type-id='7e2979d5' restrict='yes' id='fc212857'/>
|
<qualified-type-def type-id='7e2979d5' restrict='yes' id='fc212857'/>
|
||||||
<pointer-type-def type-id='fe391c48' size-in-bits='64' id='568dd84e'/>
|
<pointer-type-def type-id='fe391c48' size-in-bits='64' id='568dd84e'/>
|
||||||
@ -3530,6 +3514,7 @@
|
|||||||
<class-decl name='_IO_codecvt' is-struct='yes' visibility='default' is-declaration-only='yes' id='a4036571'/>
|
<class-decl name='_IO_codecvt' is-struct='yes' visibility='default' is-declaration-only='yes' id='a4036571'/>
|
||||||
<class-decl name='_IO_marker' is-struct='yes' visibility='default' is-declaration-only='yes' id='010ae0b9'/>
|
<class-decl name='_IO_marker' is-struct='yes' visibility='default' is-declaration-only='yes' id='010ae0b9'/>
|
||||||
<class-decl name='_IO_wide_data' is-struct='yes' visibility='default' is-declaration-only='yes' id='79bd3751'/>
|
<class-decl name='_IO_wide_data' is-struct='yes' visibility='default' is-declaration-only='yes' id='79bd3751'/>
|
||||||
|
<class-decl name='__locale_data' is-struct='yes' visibility='default' is-declaration-only='yes' id='23de8b96'/>
|
||||||
<function-decl name='zpool_get_prop_int' mangled-name='zpool_get_prop_int' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zpool_get_prop_int'>
|
<function-decl name='zpool_get_prop_int' mangled-name='zpool_get_prop_int' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zpool_get_prop_int'>
|
||||||
<parameter type-id='4c81de99'/>
|
<parameter type-id='4c81de99'/>
|
||||||
<parameter type-id='5d0c23fb'/>
|
<parameter type-id='5d0c23fb'/>
|
||||||
@ -3555,6 +3540,13 @@
|
|||||||
<parameter type-id='58603c44'/>
|
<parameter type-id='58603c44'/>
|
||||||
<return type-id='80f4b756'/>
|
<return type-id='80f4b756'/>
|
||||||
</function-decl>
|
</function-decl>
|
||||||
|
<function-decl name='zfs_iter_filesystems_v2' mangled-name='zfs_iter_filesystems_v2' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_iter_filesystems_v2'>
|
||||||
|
<parameter type-id='9200a744'/>
|
||||||
|
<parameter type-id='95e97e5e'/>
|
||||||
|
<parameter type-id='d8e49ab9'/>
|
||||||
|
<parameter type-id='eaa32e2f'/>
|
||||||
|
<return type-id='95e97e5e'/>
|
||||||
|
</function-decl>
|
||||||
<function-decl name='zfs_parent_name' mangled-name='zfs_parent_name' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_parent_name'>
|
<function-decl name='zfs_parent_name' mangled-name='zfs_parent_name' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_parent_name'>
|
||||||
<parameter type-id='9200a744'/>
|
<parameter type-id='9200a744'/>
|
||||||
<parameter type-id='26a90f95'/>
|
<parameter type-id='26a90f95'/>
|
||||||
@ -3627,6 +3619,10 @@
|
|||||||
<function-decl name='dlerror' visibility='default' binding='global' size-in-bits='64'>
|
<function-decl name='dlerror' visibility='default' binding='global' size-in-bits='64'>
|
||||||
<return type-id='26a90f95'/>
|
<return type-id='26a90f95'/>
|
||||||
</function-decl>
|
</function-decl>
|
||||||
|
<function-decl name='uselocale' visibility='default' binding='global' size-in-bits='64'>
|
||||||
|
<parameter type-id='973a4f8d'/>
|
||||||
|
<return type-id='973a4f8d'/>
|
||||||
|
</function-decl>
|
||||||
<function-decl name='PKCS5_PBKDF2_HMAC_SHA1' visibility='default' binding='global' size-in-bits='64'>
|
<function-decl name='PKCS5_PBKDF2_HMAC_SHA1' visibility='default' binding='global' size-in-bits='64'>
|
||||||
<parameter type-id='80f4b756'/>
|
<parameter type-id='80f4b756'/>
|
||||||
<parameter type-id='95e97e5e'/>
|
<parameter type-id='95e97e5e'/>
|
||||||
@ -3637,14 +3633,6 @@
|
|||||||
<parameter type-id='cf536864'/>
|
<parameter type-id='cf536864'/>
|
||||||
<return type-id='95e97e5e'/>
|
<return type-id='95e97e5e'/>
|
||||||
</function-decl>
|
</function-decl>
|
||||||
<function-decl name='pthread_mutex_lock' visibility='default' binding='global' size-in-bits='64'>
|
|
||||||
<parameter type-id='18c91f9e'/>
|
|
||||||
<return type-id='95e97e5e'/>
|
|
||||||
</function-decl>
|
|
||||||
<function-decl name='pthread_mutex_unlock' visibility='default' binding='global' size-in-bits='64'>
|
|
||||||
<parameter type-id='18c91f9e'/>
|
|
||||||
<return type-id='95e97e5e'/>
|
|
||||||
</function-decl>
|
|
||||||
<function-decl name='regexec' visibility='default' binding='global' size-in-bits='64'>
|
<function-decl name='regexec' visibility='default' binding='global' size-in-bits='64'>
|
||||||
<parameter type-id='a431a9da'/>
|
<parameter type-id='a431a9da'/>
|
||||||
<parameter type-id='9d26089a'/>
|
<parameter type-id='9d26089a'/>
|
||||||
@ -3718,8 +3706,9 @@
|
|||||||
<parameter type-id='80f4b756'/>
|
<parameter type-id='80f4b756'/>
|
||||||
<return type-id='26a90f95'/>
|
<return type-id='26a90f95'/>
|
||||||
</function-decl>
|
</function-decl>
|
||||||
<function-decl name='strerror' visibility='default' binding='global' size-in-bits='64'>
|
<function-decl name='strerror_l' visibility='default' binding='global' size-in-bits='64'>
|
||||||
<parameter type-id='95e97e5e'/>
|
<parameter type-id='95e97e5e'/>
|
||||||
|
<parameter type-id='973a4f8d'/>
|
||||||
<return type-id='26a90f95'/>
|
<return type-id='26a90f95'/>
|
||||||
</function-decl>
|
</function-decl>
|
||||||
<function-decl name='tcgetattr' visibility='default' binding='global' size-in-bits='64'>
|
<function-decl name='tcgetattr' visibility='default' binding='global' size-in-bits='64'>
|
||||||
@ -3826,10 +3815,6 @@
|
|||||||
<parameter type-id='c19b74c3' name='inheritkey'/>
|
<parameter type-id='c19b74c3' name='inheritkey'/>
|
||||||
<return type-id='95e97e5e'/>
|
<return type-id='95e97e5e'/>
|
||||||
</function-decl>
|
</function-decl>
|
||||||
<function-decl name='zfs_is_encrypted' mangled-name='zfs_is_encrypted' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_is_encrypted'>
|
|
||||||
<parameter type-id='9200a744' name='zhp'/>
|
|
||||||
<return type-id='c19b74c3'/>
|
|
||||||
</function-decl>
|
|
||||||
<function-decl name='zfs_error_aux' visibility='default' binding='global' size-in-bits='64'>
|
<function-decl name='zfs_error_aux' visibility='default' binding='global' size-in-bits='64'>
|
||||||
<parameter type-id='b0382bb3'/>
|
<parameter type-id='b0382bb3'/>
|
||||||
<parameter type-id='80f4b756'/>
|
<parameter type-id='80f4b756'/>
|
||||||
@ -3888,7 +3873,7 @@
|
|||||||
</data-member>
|
</data-member>
|
||||||
</class-decl>
|
</class-decl>
|
||||||
<typedef-decl name='renameflags_t' type-id='7aee5792' id='067170c2'/>
|
<typedef-decl name='renameflags_t' type-id='7aee5792' id='067170c2'/>
|
||||||
<typedef-decl name='zfs_userspace_cb_t' type-id='bbaa4f9c' id='16c5f410'/>
|
<typedef-decl name='zfs_userspace_cb_t' type-id='ca64ff60' id='16c5f410'/>
|
||||||
<enum-decl name='lzc_dataset_type' id='bc9887f1'>
|
<enum-decl name='lzc_dataset_type' id='bc9887f1'>
|
||||||
<underlying-type type-id='9cac1fee'/>
|
<underlying-type type-id='9cac1fee'/>
|
||||||
<enumerator name='LZC_DATSET_TYPE_ZFS' value='2'/>
|
<enumerator name='LZC_DATSET_TYPE_ZFS' value='2'/>
|
||||||
@ -4083,7 +4068,7 @@
|
|||||||
<qualified-type-def type-id='566b3f52' restrict='yes' id='c878edd6'/>
|
<qualified-type-def type-id='566b3f52' restrict='yes' id='c878edd6'/>
|
||||||
<pointer-type-def type-id='566b3f52' size-in-bits='64' id='82d4e9e8'/>
|
<pointer-type-def type-id='566b3f52' size-in-bits='64' id='82d4e9e8'/>
|
||||||
<qualified-type-def type-id='82d4e9e8' restrict='yes' id='aa19c230'/>
|
<qualified-type-def type-id='82d4e9e8' restrict='yes' id='aa19c230'/>
|
||||||
<pointer-type-def type-id='02362c02' size-in-bits='64' id='bbaa4f9c'/>
|
<pointer-type-def type-id='7e291ce6' size-in-bits='64' id='ca64ff60'/>
|
||||||
<pointer-type-def type-id='9da381c4' size-in-bits='64' id='cb785ebf'/>
|
<pointer-type-def type-id='9da381c4' size-in-bits='64' id='cb785ebf'/>
|
||||||
<pointer-type-def type-id='1b055409' size-in-bits='64' id='9d424d31'/>
|
<pointer-type-def type-id='1b055409' size-in-bits='64' id='9d424d31'/>
|
||||||
<pointer-type-def type-id='8e0af06e' size-in-bits='64' id='053457bd'/>
|
<pointer-type-def type-id='8e0af06e' size-in-bits='64' id='053457bd'/>
|
||||||
@ -4093,6 +4078,7 @@
|
|||||||
<pointer-type-def type-id='a195f4a3' size-in-bits='64' id='e80ff3ab'/>
|
<pointer-type-def type-id='a195f4a3' size-in-bits='64' id='e80ff3ab'/>
|
||||||
<qualified-type-def type-id='e80ff3ab' restrict='yes' id='8f2c7109'/>
|
<qualified-type-def type-id='e80ff3ab' restrict='yes' id='8f2c7109'/>
|
||||||
<pointer-type-def type-id='eae6431d' size-in-bits='64' id='0d41d328'/>
|
<pointer-type-def type-id='eae6431d' size-in-bits='64' id='0d41d328'/>
|
||||||
|
<pointer-type-def type-id='7a6844eb' size-in-bits='64' id='18c91f9e'/>
|
||||||
<pointer-type-def type-id='dddf6ca2' size-in-bits='64' id='d915a820'/>
|
<pointer-type-def type-id='dddf6ca2' size-in-bits='64' id='d915a820'/>
|
||||||
<qualified-type-def type-id='d915a820' restrict='yes' id='f099ad08'/>
|
<qualified-type-def type-id='d915a820' restrict='yes' id='f099ad08'/>
|
||||||
<pointer-type-def type-id='5d6479ae' size-in-bits='64' id='892b4acc'/>
|
<pointer-type-def type-id='5d6479ae' size-in-bits='64' id='892b4acc'/>
|
||||||
@ -4169,12 +4155,6 @@
|
|||||||
<parameter type-id='5d6479ae'/>
|
<parameter type-id='5d6479ae'/>
|
||||||
<return type-id='95e97e5e'/>
|
<return type-id='95e97e5e'/>
|
||||||
</function-decl>
|
</function-decl>
|
||||||
<function-decl name='lzc_ioctl_fd' visibility='default' binding='global' size-in-bits='64'>
|
|
||||||
<parameter type-id='95e97e5e'/>
|
|
||||||
<parameter type-id='7359adad'/>
|
|
||||||
<parameter type-id='b65f7fd1'/>
|
|
||||||
<return type-id='95e97e5e'/>
|
|
||||||
</function-decl>
|
|
||||||
<function-decl name='lzc_snapshot' visibility='default' binding='global' size-in-bits='64'>
|
<function-decl name='lzc_snapshot' visibility='default' binding='global' size-in-bits='64'>
|
||||||
<parameter type-id='5ce45b60'/>
|
<parameter type-id='5ce45b60'/>
|
||||||
<parameter type-id='5ce45b60'/>
|
<parameter type-id='5ce45b60'/>
|
||||||
@ -4551,6 +4531,14 @@
|
|||||||
<parameter type-id='18c91f9e'/>
|
<parameter type-id='18c91f9e'/>
|
||||||
<return type-id='95e97e5e'/>
|
<return type-id='95e97e5e'/>
|
||||||
</function-decl>
|
</function-decl>
|
||||||
|
<function-decl name='pthread_mutex_lock' visibility='default' binding='global' size-in-bits='64'>
|
||||||
|
<parameter type-id='18c91f9e'/>
|
||||||
|
<return type-id='95e97e5e'/>
|
||||||
|
</function-decl>
|
||||||
|
<function-decl name='pthread_mutex_unlock' visibility='default' binding='global' size-in-bits='64'>
|
||||||
|
<parameter type-id='18c91f9e'/>
|
||||||
|
<return type-id='95e97e5e'/>
|
||||||
|
</function-decl>
|
||||||
<function-decl name='getpwnam_r' visibility='default' binding='global' size-in-bits='64'>
|
<function-decl name='getpwnam_r' visibility='default' binding='global' size-in-bits='64'>
|
||||||
<parameter type-id='9d26089a'/>
|
<parameter type-id='9d26089a'/>
|
||||||
<parameter type-id='33518961'/>
|
<parameter type-id='33518961'/>
|
||||||
@ -4613,6 +4601,12 @@
|
|||||||
<parameter is-variadic='yes'/>
|
<parameter is-variadic='yes'/>
|
||||||
<return type-id='95e97e5e'/>
|
<return type-id='95e97e5e'/>
|
||||||
</function-decl>
|
</function-decl>
|
||||||
|
<function-decl name='ioctl' visibility='default' binding='global' size-in-bits='64'>
|
||||||
|
<parameter type-id='95e97e5e'/>
|
||||||
|
<parameter type-id='7359adad'/>
|
||||||
|
<parameter is-variadic='yes'/>
|
||||||
|
<return type-id='95e97e5e'/>
|
||||||
|
</function-decl>
|
||||||
<function-decl name='zfs_type_to_name' mangled-name='zfs_type_to_name' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_type_to_name'>
|
<function-decl name='zfs_type_to_name' mangled-name='zfs_type_to_name' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_type_to_name'>
|
||||||
<parameter type-id='2e45de5d' name='type'/>
|
<parameter type-id='2e45de5d' name='type'/>
|
||||||
<return type-id='80f4b756'/>
|
<return type-id='80f4b756'/>
|
||||||
@ -5019,12 +5013,11 @@
|
|||||||
<parameter type-id='80f4b756'/>
|
<parameter type-id='80f4b756'/>
|
||||||
<return type-id='c19b74c3'/>
|
<return type-id='c19b74c3'/>
|
||||||
</function-decl>
|
</function-decl>
|
||||||
<function-type size-in-bits='64' id='02362c02'>
|
<function-type size-in-bits='64' id='7e291ce6'>
|
||||||
<parameter type-id='eaa32e2f'/>
|
<parameter type-id='eaa32e2f'/>
|
||||||
<parameter type-id='80f4b756'/>
|
<parameter type-id='80f4b756'/>
|
||||||
<parameter type-id='354978ed'/>
|
<parameter type-id='354978ed'/>
|
||||||
<parameter type-id='9c313c2d'/>
|
<parameter type-id='9c313c2d'/>
|
||||||
<parameter type-id='9c313c2d'/>
|
|
||||||
<return type-id='95e97e5e'/>
|
<return type-id='95e97e5e'/>
|
||||||
</function-type>
|
</function-type>
|
||||||
</abi-instr>
|
</abi-instr>
|
||||||
@ -5294,12 +5287,6 @@
|
|||||||
<parameter type-id='b59d7dce'/>
|
<parameter type-id='b59d7dce'/>
|
||||||
<return type-id='79a0948f'/>
|
<return type-id='79a0948f'/>
|
||||||
</function-decl>
|
</function-decl>
|
||||||
<function-decl name='ioctl' visibility='default' binding='global' size-in-bits='64'>
|
|
||||||
<parameter type-id='95e97e5e'/>
|
|
||||||
<parameter type-id='7359adad'/>
|
|
||||||
<parameter is-variadic='yes'/>
|
|
||||||
<return type-id='95e97e5e'/>
|
|
||||||
</function-decl>
|
|
||||||
<function-decl name='fstat64' visibility='default' binding='global' size-in-bits='64'>
|
<function-decl name='fstat64' visibility='default' binding='global' size-in-bits='64'>
|
||||||
<parameter type-id='95e97e5e'/>
|
<parameter type-id='95e97e5e'/>
|
||||||
<parameter type-id='62f7a03d'/>
|
<parameter type-id='62f7a03d'/>
|
||||||
@ -7260,7 +7247,7 @@
|
|||||||
<var-decl name='drr_payloadlen' type-id='8f92235e' visibility='default'/>
|
<var-decl name='drr_payloadlen' type-id='8f92235e' visibility='default'/>
|
||||||
</data-member>
|
</data-member>
|
||||||
<data-member access='public' layout-offset-in-bits='64'>
|
<data-member access='public' layout-offset-in-bits='64'>
|
||||||
<var-decl name='drr_u' type-id='ac5ab599' visibility='default'/>
|
<var-decl name='drr_u' type-id='ac5ab598' visibility='default'/>
|
||||||
</data-member>
|
</data-member>
|
||||||
</class-decl>
|
</class-decl>
|
||||||
<enum-decl name='__anonymous_enum__' is-anonymous='yes' id='08f5ca17'>
|
<enum-decl name='__anonymous_enum__' is-anonymous='yes' id='08f5ca17'>
|
||||||
@ -7278,7 +7265,7 @@
|
|||||||
<enumerator name='DRR_REDACT' value='10'/>
|
<enumerator name='DRR_REDACT' value='10'/>
|
||||||
<enumerator name='DRR_NUMTYPES' value='11'/>
|
<enumerator name='DRR_NUMTYPES' value='11'/>
|
||||||
</enum-decl>
|
</enum-decl>
|
||||||
<union-decl name='__anonymous_union__' size-in-bits='2432' is-anonymous='yes' visibility='default' id='ac5ab599'>
|
<union-decl name='__anonymous_union__' size-in-bits='2432' is-anonymous='yes' visibility='default' id='ac5ab598'>
|
||||||
<data-member access='public'>
|
<data-member access='public'>
|
||||||
<var-decl name='drr_begin' type-id='09fcdc01' visibility='default'/>
|
<var-decl name='drr_begin' type-id='09fcdc01' visibility='default'/>
|
||||||
</data-member>
|
</data-member>
|
||||||
@ -7625,10 +7612,10 @@
|
|||||||
<var-decl name='sigev_notify' type-id='95e97e5e' visibility='default'/>
|
<var-decl name='sigev_notify' type-id='95e97e5e' visibility='default'/>
|
||||||
</data-member>
|
</data-member>
|
||||||
<data-member access='public' layout-offset-in-bits='128'>
|
<data-member access='public' layout-offset-in-bits='128'>
|
||||||
<var-decl name='_sigev_un' type-id='ac5ab59a' visibility='default'/>
|
<var-decl name='_sigev_un' type-id='ac5ab599' visibility='default'/>
|
||||||
</data-member>
|
</data-member>
|
||||||
</class-decl>
|
</class-decl>
|
||||||
<union-decl name='__anonymous_union__1' size-in-bits='384' is-anonymous='yes' visibility='default' id='ac5ab59a'>
|
<union-decl name='__anonymous_union__1' size-in-bits='384' is-anonymous='yes' visibility='default' id='ac5ab599'>
|
||||||
<data-member access='public'>
|
<data-member access='public'>
|
||||||
<var-decl name='_pad' type-id='73b82f0f' visibility='default'/>
|
<var-decl name='_pad' type-id='73b82f0f' visibility='default'/>
|
||||||
</data-member>
|
</data-member>
|
||||||
@ -7636,10 +7623,10 @@
|
|||||||
<var-decl name='_tid' type-id='3629bad8' visibility='default'/>
|
<var-decl name='_tid' type-id='3629bad8' visibility='default'/>
|
||||||
</data-member>
|
</data-member>
|
||||||
<data-member access='public'>
|
<data-member access='public'>
|
||||||
<var-decl name='_sigev_thread' type-id='e7f43f7c' visibility='default'/>
|
<var-decl name='_sigev_thread' type-id='e7f43f7b' visibility='default'/>
|
||||||
</data-member>
|
</data-member>
|
||||||
</union-decl>
|
</union-decl>
|
||||||
<class-decl name='__anonymous_struct__' size-in-bits='128' is-struct='yes' is-anonymous='yes' visibility='default' id='e7f43f7c'>
|
<class-decl name='__anonymous_struct__' size-in-bits='128' is-struct='yes' is-anonymous='yes' visibility='default' id='e7f43f7b'>
|
||||||
<data-member access='public' layout-offset-in-bits='0'>
|
<data-member access='public' layout-offset-in-bits='0'>
|
||||||
<var-decl name='_function' type-id='5f147c28' visibility='default'/>
|
<var-decl name='_function' type-id='5f147c28' visibility='default'/>
|
||||||
</data-member>
|
</data-member>
|
||||||
@ -8381,11 +8368,6 @@
|
|||||||
<parameter type-id='95e97e5e'/>
|
<parameter type-id='95e97e5e'/>
|
||||||
<return type-id='48b5725f'/>
|
<return type-id='48b5725f'/>
|
||||||
</function-decl>
|
</function-decl>
|
||||||
<function-decl name='setpgid' visibility='default' binding='global' size-in-bits='64'>
|
|
||||||
<parameter type-id='3629bad8'/>
|
|
||||||
<parameter type-id='3629bad8'/>
|
|
||||||
<return type-id='95e97e5e'/>
|
|
||||||
</function-decl>
|
|
||||||
<function-decl name='fork' visibility='default' binding='global' size-in-bits='64'>
|
<function-decl name='fork' visibility='default' binding='global' size-in-bits='64'>
|
||||||
<return type-id='3629bad8'/>
|
<return type-id='3629bad8'/>
|
||||||
</function-decl>
|
</function-decl>
|
||||||
@ -9550,8 +9532,8 @@
|
|||||||
</function-decl>
|
</function-decl>
|
||||||
</abi-instr>
|
</abi-instr>
|
||||||
<abi-instr address-size='64' path='module/zcommon/zfs_deleg.c' language='LANG_C99'>
|
<abi-instr address-size='64' path='module/zcommon/zfs_deleg.c' language='LANG_C99'>
|
||||||
<array-type-def dimensions='1' type-id='fa1870fd' size-in-bits='4224' id='55e705e7'>
|
<array-type-def dimensions='1' type-id='fa1870fd' size-in-bits='4096' id='59e94aca'>
|
||||||
<subrange length='33' type-id='7359adad' id='6a5934df'/>
|
<subrange length='32' type-id='7359adad' id='ae5bde82'/>
|
||||||
</array-type-def>
|
</array-type-def>
|
||||||
<array-type-def dimensions='1' type-id='fa1870fd' size-in-bits='infinite' id='7c00e69d'>
|
<array-type-def dimensions='1' type-id='fa1870fd' size-in-bits='infinite' id='7c00e69d'>
|
||||||
<subrange length='infinite' id='031f2035'/>
|
<subrange length='infinite' id='031f2035'/>
|
||||||
@ -10081,12 +10063,6 @@
|
|||||||
<parameter type-id='b59d7dce' name='outlen'/>
|
<parameter type-id='b59d7dce' name='outlen'/>
|
||||||
<return type-id='b59d7dce'/>
|
<return type-id='b59d7dce'/>
|
||||||
</function-decl>
|
</function-decl>
|
||||||
<function-decl name='zfs_valstr_zio_type' mangled-name='zfs_valstr_zio_type' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_valstr_zio_type'>
|
|
||||||
<parameter type-id='95e97e5e' name='v'/>
|
|
||||||
<parameter type-id='26a90f95' name='out'/>
|
|
||||||
<parameter type-id='b59d7dce' name='outlen'/>
|
|
||||||
<return type-id='b59d7dce'/>
|
|
||||||
</function-decl>
|
|
||||||
<function-decl name='zfs_valstr_zio_priority' mangled-name='zfs_valstr_zio_priority' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_valstr_zio_priority'>
|
<function-decl name='zfs_valstr_zio_priority' mangled-name='zfs_valstr_zio_priority' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_valstr_zio_priority'>
|
||||||
<parameter type-id='95e97e5e' name='v'/>
|
<parameter type-id='95e97e5e' name='v'/>
|
||||||
<parameter type-id='26a90f95' name='out'/>
|
<parameter type-id='26a90f95' name='out'/>
|
||||||
|
@ -1818,14 +1818,3 @@ error:
|
|||||||
zfs_error(zhp->zfs_hdl, EZFS_CRYPTOFAILED, errbuf);
|
zfs_error(zhp->zfs_hdl, EZFS_CRYPTOFAILED, errbuf);
|
||||||
return (ret);
|
return (ret);
|
||||||
}
|
}
|
||||||
|
|
||||||
boolean_t
|
|
||||||
zfs_is_encrypted(zfs_handle_t *zhp)
|
|
||||||
{
|
|
||||||
uint8_t flags = zhp->zfs_dmustats.dds_flags;
|
|
||||||
|
|
||||||
if (flags & DDS_FLAG_HAS_ENCRYPTED)
|
|
||||||
return ((flags & DDS_FLAG_ENCRYPTED) != 0);
|
|
||||||
|
|
||||||
return (zfs_prop_get_int(zhp, ZFS_PROP_ENCRYPTION) != ZIO_CRYPT_OFF);
|
|
||||||
}
|
|
||||||
|
@ -2308,12 +2308,6 @@ get_numeric_property(zfs_handle_t *zhp, zfs_prop_t prop, zprop_source_t *src,
|
|||||||
case ZFS_PROP_NORMALIZE:
|
case ZFS_PROP_NORMALIZE:
|
||||||
case ZFS_PROP_UTF8ONLY:
|
case ZFS_PROP_UTF8ONLY:
|
||||||
case ZFS_PROP_CASE:
|
case ZFS_PROP_CASE:
|
||||||
case ZFS_PROP_DEFAULTUSERQUOTA:
|
|
||||||
case ZFS_PROP_DEFAULTGROUPQUOTA:
|
|
||||||
case ZFS_PROP_DEFAULTPROJECTQUOTA:
|
|
||||||
case ZFS_PROP_DEFAULTUSEROBJQUOTA:
|
|
||||||
case ZFS_PROP_DEFAULTGROUPOBJQUOTA:
|
|
||||||
case ZFS_PROP_DEFAULTPROJECTOBJQUOTA:
|
|
||||||
zcmd_alloc_dst_nvlist(zhp->zfs_hdl, &zc, 0);
|
zcmd_alloc_dst_nvlist(zhp->zfs_hdl, &zc, 0);
|
||||||
|
|
||||||
(void) strlcpy(zc.zc_name, zhp->zfs_name, sizeof (zc.zc_name));
|
(void) strlcpy(zc.zc_name, zhp->zfs_name, sizeof (zc.zc_name));
|
||||||
@ -4028,26 +4022,6 @@ zfs_destroy_snaps_nvl(libzfs_handle_t *hdl, nvlist_t *snaps, boolean_t defer)
|
|||||||
dgettext(TEXT_DOMAIN, "snapshot is cloned"));
|
dgettext(TEXT_DOMAIN, "snapshot is cloned"));
|
||||||
ret = zfs_error(hdl, EZFS_EXISTS, errbuf);
|
ret = zfs_error(hdl, EZFS_EXISTS, errbuf);
|
||||||
break;
|
break;
|
||||||
case EBUSY: {
|
|
||||||
nvlist_t *existing_holds;
|
|
||||||
int err = lzc_get_holds(nvpair_name(pair),
|
|
||||||
&existing_holds);
|
|
||||||
|
|
||||||
/* check the presence of holders */
|
|
||||||
if (err == 0 && !nvlist_empty(existing_holds)) {
|
|
||||||
zfs_error_aux(hdl,
|
|
||||||
dgettext(TEXT_DOMAIN, "it's being held. "
|
|
||||||
"Run 'zfs holds -r %s' to see holders."),
|
|
||||||
nvpair_name(pair));
|
|
||||||
ret = zfs_error(hdl, EBUSY, errbuf);
|
|
||||||
} else {
|
|
||||||
ret = zfs_standard_error(hdl, errno, errbuf);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (err == 0)
|
|
||||||
nvlist_free(existing_holds);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
default:
|
default:
|
||||||
ret = zfs_standard_error(hdl, errno, errbuf);
|
ret = zfs_standard_error(hdl, errno, errbuf);
|
||||||
break;
|
break;
|
||||||
@ -4911,7 +4885,7 @@ zfs_smb_acl_mgmt(libzfs_handle_t *hdl, char *dataset, char *path,
|
|||||||
default:
|
default:
|
||||||
return (-1);
|
return (-1);
|
||||||
}
|
}
|
||||||
error = lzc_ioctl_fd(hdl->libzfs_fd, ZFS_IOC_SMB_ACL, &zc);
|
error = ioctl(hdl->libzfs_fd, ZFS_IOC_SMB_ACL, &zc);
|
||||||
nvlist_free(nvlist);
|
nvlist_free(nvlist);
|
||||||
return (error);
|
return (error);
|
||||||
}
|
}
|
||||||
@ -4986,7 +4960,7 @@ zfs_userspace(zfs_handle_t *zhp, zfs_userquota_prop_t type,
|
|||||||
|
|
||||||
while (zc.zc_nvlist_dst_size > 0) {
|
while (zc.zc_nvlist_dst_size > 0) {
|
||||||
if ((ret = func(arg, zua->zu_domain, zua->zu_rid,
|
if ((ret = func(arg, zua->zu_domain, zua->zu_rid,
|
||||||
zua->zu_space, zc.zc_guid)) != 0)
|
zua->zu_space)) != 0)
|
||||||
return (ret);
|
return (ret);
|
||||||
zua++;
|
zua++;
|
||||||
zc.zc_nvlist_dst_size -= sizeof (zfs_useracct_t);
|
zc.zc_nvlist_dst_size -= sizeof (zfs_useracct_t);
|
||||||
@ -5436,12 +5410,12 @@ zfs_get_holds(zfs_handle_t *zhp, nvlist_t **nvl)
|
|||||||
* +-------+-------+-------+-------+-------+
|
* +-------+-------+-------+-------+-------+
|
||||||
*
|
*
|
||||||
* Above, notice that the 4k block required one sector for parity and another
|
* Above, notice that the 4k block required one sector for parity and another
|
||||||
* for data. vdev_raidz_psize_to_asize() will return 8k and as such the pool's
|
* for data. vdev_raidz_asize() will return 8k and as such the pool's allocated
|
||||||
* allocated and free properties will be adjusted by 8k. The dataset will not
|
* and free properties will be adjusted by 8k. The dataset will not be charged
|
||||||
* be charged 8k. Rather, it will be charged a value that is scaled according
|
* 8k. Rather, it will be charged a value that is scaled according to the
|
||||||
* to the overhead of the 128k block on the same vdev. This 8k allocation will
|
* overhead of the 128k block on the same vdev. This 8k allocation will be
|
||||||
* be charged 8k * 128k / 160k. 128k is from SPA_OLD_MAXBLOCKSIZE and 160k is
|
* charged 8k * 128k / 160k. 128k is from SPA_OLD_MAXBLOCKSIZE and 160k is as
|
||||||
* as calculated in the 128k block example above.
|
* calculated in the 128k block example above.
|
||||||
*
|
*
|
||||||
* Every raidz allocation is sized to be a multiple of nparity+1 sectors. That
|
* Every raidz allocation is sized to be a multiple of nparity+1 sectors. That
|
||||||
* is, every raidz1 allocation will be a multiple of 2 sectors, raidz2
|
* is, every raidz1 allocation will be a multiple of 2 sectors, raidz2
|
||||||
@ -5488,7 +5462,7 @@ zfs_get_holds(zfs_handle_t *zhp, nvlist_t **nvl)
|
|||||||
* not necessarily equal to "blksize", due to RAIDZ deflation.
|
* not necessarily equal to "blksize", due to RAIDZ deflation.
|
||||||
*/
|
*/
|
||||||
static uint64_t
|
static uint64_t
|
||||||
vdev_raidz_psize_to_asize(uint64_t ndisks, uint64_t nparity, uint64_t ashift,
|
vdev_raidz_asize(uint64_t ndisks, uint64_t nparity, uint64_t ashift,
|
||||||
uint64_t blksize)
|
uint64_t blksize)
|
||||||
{
|
{
|
||||||
uint64_t asize, ndata;
|
uint64_t asize, ndata;
|
||||||
@ -5508,7 +5482,7 @@ vdev_raidz_psize_to_asize(uint64_t ndisks, uint64_t nparity, uint64_t ashift,
|
|||||||
* size.
|
* size.
|
||||||
*/
|
*/
|
||||||
static uint64_t
|
static uint64_t
|
||||||
vdev_draid_psize_to_asize(uint64_t ndisks, uint64_t nparity, uint64_t ashift,
|
vdev_draid_asize(uint64_t ndisks, uint64_t nparity, uint64_t ashift,
|
||||||
uint64_t blksize)
|
uint64_t blksize)
|
||||||
{
|
{
|
||||||
ASSERT3U(ndisks, >, nparity);
|
ASSERT3U(ndisks, >, nparity);
|
||||||
@ -5568,12 +5542,12 @@ volsize_from_vdevs(zpool_handle_t *zhp, uint64_t nblocks, uint64_t blksize)
|
|||||||
continue;
|
continue;
|
||||||
|
|
||||||
/* allocation size for the "typical" 128k block */
|
/* allocation size for the "typical" 128k block */
|
||||||
tsize = vdev_raidz_psize_to_asize(ndisks, nparity,
|
tsize = vdev_raidz_asize(ndisks, nparity, ashift,
|
||||||
ashift, SPA_OLD_MAXBLOCKSIZE);
|
SPA_OLD_MAXBLOCKSIZE);
|
||||||
|
|
||||||
/* allocation size for the blksize block */
|
/* allocation size for the blksize block */
|
||||||
asize = vdev_raidz_psize_to_asize(ndisks, nparity,
|
asize = vdev_raidz_asize(ndisks, nparity, ashift,
|
||||||
ashift, blksize);
|
blksize);
|
||||||
} else {
|
} else {
|
||||||
uint64_t ndata;
|
uint64_t ndata;
|
||||||
|
|
||||||
@ -5582,12 +5556,12 @@ volsize_from_vdevs(zpool_handle_t *zhp, uint64_t nblocks, uint64_t blksize)
|
|||||||
continue;
|
continue;
|
||||||
|
|
||||||
/* allocation size for the "typical" 128k block */
|
/* allocation size for the "typical" 128k block */
|
||||||
tsize = vdev_draid_psize_to_asize(ndata + nparity,
|
tsize = vdev_draid_asize(ndata + nparity, nparity,
|
||||||
nparity, ashift, SPA_OLD_MAXBLOCKSIZE);
|
ashift, SPA_OLD_MAXBLOCKSIZE);
|
||||||
|
|
||||||
/* allocation size for the blksize block */
|
/* allocation size for the blksize block */
|
||||||
asize = vdev_draid_psize_to_asize(ndata + nparity,
|
asize = vdev_draid_asize(ndata + nparity, nparity,
|
||||||
nparity, ashift, blksize);
|
ashift, blksize);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -570,7 +570,7 @@ iter_dependents_cb(zfs_handle_t *zhp, void *arg)
|
|||||||
err = zfs_iter_filesystems_v2(zhp, ida->flags,
|
err = zfs_iter_filesystems_v2(zhp, ida->flags,
|
||||||
iter_dependents_cb, ida);
|
iter_dependents_cb, ida);
|
||||||
if (err == 0)
|
if (err == 0)
|
||||||
err = zfs_iter_snapshots_sorted_v2(zhp, ida->flags,
|
err = zfs_iter_snapshots_v2(zhp, ida->flags,
|
||||||
iter_dependents_cb, ida, 0, 0);
|
iter_dependents_cb, ida, 0, 0);
|
||||||
ida->stack = isf.next;
|
ida->stack = isf.next;
|
||||||
}
|
}
|
||||||
|
@ -2761,11 +2761,6 @@ zpool_scan(zpool_handle_t *zhp, pool_scan_func_t func, pool_scrub_cmd_t cmd)
|
|||||||
* 1. we resumed a paused scrub.
|
* 1. we resumed a paused scrub.
|
||||||
* 2. we resumed a paused error scrub.
|
* 2. we resumed a paused error scrub.
|
||||||
* 3. Error scrub is not run because of no error log.
|
* 3. Error scrub is not run because of no error log.
|
||||||
*
|
|
||||||
* Note that we no longer return ECANCELED in case 1 or 2. However, in
|
|
||||||
* order to prevent problems where we have a newer userland than
|
|
||||||
* kernel, we keep this check in place. That prevents erroneous
|
|
||||||
* failures when an older kernel returns ECANCELED in those cases.
|
|
||||||
*/
|
*/
|
||||||
if (err == ECANCELED && (func == POOL_SCAN_SCRUB ||
|
if (err == ECANCELED && (func == POOL_SCAN_SCRUB ||
|
||||||
func == POOL_SCAN_ERRORSCRUB) && cmd == POOL_SCRUB_NORMAL)
|
func == POOL_SCAN_ERRORSCRUB) && cmd == POOL_SCRUB_NORMAL)
|
||||||
@ -2966,18 +2961,6 @@ vdev_to_nvlist_iter(nvlist_t *nv, nvlist_t *search, boolean_t *avail_spare,
|
|||||||
idx = p + 1;
|
idx = p + 1;
|
||||||
*p = '\0';
|
*p = '\0';
|
||||||
|
|
||||||
/*
|
|
||||||
* draid names are presented like: draid2:4d:6c:0s
|
|
||||||
* We match them up to the first ':' so we can still
|
|
||||||
* do the parity check below, but the other params
|
|
||||||
* are ignored.
|
|
||||||
*/
|
|
||||||
if ((p = strchr(type, ':')) != NULL) {
|
|
||||||
if (strncmp(type, VDEV_TYPE_DRAID,
|
|
||||||
strlen(VDEV_TYPE_DRAID)) == 0)
|
|
||||||
*p = '\0';
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* If the types don't match then keep looking.
|
* If the types don't match then keep looking.
|
||||||
*/
|
*/
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user