]> git.proxmox.com Git - mirror_zfs.git/commitdiff
zvol_write() can use dmu_tx_hold_write_by_dnode()
authorMatthew Ahrens <mahrens@delphix.com>
Sat, 11 Apr 2020 04:14:01 +0000 (21:14 -0700)
committerGitHub <noreply@github.com>
Sat, 11 Apr 2020 04:14:01 +0000 (21:14 -0700)
We can improve the performance of writes to zvols by using
dmu_tx_hold_write_by_dnode() instead of dmu_tx_hold_write().  This
reduces lock contention on the first block of the dnode object, and also
reduces the amount of CPU needed.  The benefit will be highest with
multi-threaded async writes (i.e. writes that don't call zil_commit()).

Reviewed-by: Jorgen Lundman <lundman@lundman.net>
Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Reviewed-by: Tony Nguyen <tony.nguyen@delphix.com>
Signed-off-by: Matthew Ahrens <mahrens@delphix.com>
Closes #10184

module/os/linux/zfs/zvol_os.c

index fe45d76a62ac9c6a64dac83d53f1bcc1dbf367e3..286c39d5ce8bfdb90372a7959144e1b5d813262e 100644 (file)
@@ -143,7 +143,7 @@ zvol_write(void *arg)
                if (bytes > volsize - off)      /* don't write past the end */
                        bytes = volsize - off;
 
-               dmu_tx_hold_write(tx, ZVOL_OBJ, off, bytes);
+               dmu_tx_hold_write_by_dnode(tx, zv->zv_dn, off, bytes);
 
                /* This will only fail for ENOSPC */
                error = dmu_tx_assign(tx, TXG_WAIT);