The nodatacow mount option seems to have no effect when mounting a
subvolume into the same filesystem.
I did some testing:
sudo mount -o compress=zstd /dev/sda /mnt -> compression enabled
sudo mount -o compress=zstd,nodatacow /dev/sda /mnt -> compression disabled
sudo mount -o nodatacow,compress=zstd /dev/sda /mnt -> compression enabled
All as I would expect, setting compress or nodatacow disables the other.
Compression gets enabled without problems when mounting a subvolume into
the same filesystem:
sudo mount /dev/sda /mnt; sudo mount -o subvol=@test,compress=zstd
/dev/sda /mnt/test -> compression enabled
sudo mount /dev/sda /mnt; sudo mount -o subvol=@/testsub,compress=zstd
/dev/sda /mnt/testsub -> compression enabled
But nodatacow apparently doesn't:
sudo mount -o compress=zstd /dev/sda /mnt; sudo mount -o
subvol=@test,nodatacow /dev/sda /mnt/test -> compression enabled
sudo mount -o compress=zstd /dev/sda /mnt; sudo mount -o
subvol=@/testsub,nodatacow /dev/sda /mnt/testsub -> compression enabled
And I don't think it's because of the compress mount option, some
benchmarks I did indicate that nodatacow never gets set when mounting a
subvolume into the same filesystem.