]> git.proxmox.com Git - mirror_zfs.git/commit
Deny block cloning is dbuf size doesn't match BP size.
authorPawel Jakub Dawidek <pawel@dawidek.net>
Tue, 2 May 2023 21:24:43 +0000 (14:24 -0700)
committerBrian Behlendorf <behlendorf1@llnl.gov>
Thu, 11 May 2023 23:06:52 +0000 (16:06 -0700)
commitbd8c6bd66f9dde7534ae2f52237a1b208721cbf7
treea6aa60b672bb9eb57d63cd9f9b4f00a8be5f10bf
parent555ef90c5c1db5dcd1b47c02134c85b5a03dc6bc
Deny block cloning is dbuf size doesn't match BP size.

I don't know an easy way to shrink down dbuf size, so just deny block cloning
into dbufs that don't match our BP's size.

This fixes the following situation:
1. Create a small file, eg. 1kB of random bytes. Its dbuf will be 1kB.
2. Create a larger file, eg. 2kB of random bytes. Its dbuf will be 2kB.
3. Truncate the large file to 0. Its dbuf will remain 2kB.
4. Clone the small file into the large file. Small file's BP lsize is
   1kB, but the large file's dbuf is 2kB.

Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Signed-off-by: Pawel Jakub Dawidek <pawel@dawidek.net>
Closes #14825
include/sys/dmu.h
module/zfs/dmu.c
module/zfs/zfs_vnops.c