]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
vhost-scsi: Allocate T10 PI structs only when enabled
authorMike Christie <michael.christie@oracle.com>
Tue, 3 Dec 2024 19:15:09 +0000 (13:15 -0600)
committerMichael S. Tsirkin <mst@redhat.com>
Tue, 25 Feb 2025 12:10:46 +0000 (07:10 -0500)
T10 PI is not a widely used feature. This has us only allocate the
structs for it if the feature has been enabled. For a common small setup
where you have 1 virtqueue and 128 commands per queue, this saves:

8MB = 32 bytes per sg * 2048 entries * 128 commands

per vhost-scsi device.

Signed-off-by: Mike Christie <michael.christie@oracle.com>
Message-Id: <20241203191705.19431-3-michael.christie@oracle.com>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
Acked-by: Stefan Hajnoczi <stefanha@redhat.com>
drivers/vhost/scsi.c

index c266171045c54af60b66371f0aa5b0397878ffc6..e361c43d07307f19ed27da45c906237caba9442d 100644 (file)
@@ -1651,12 +1651,14 @@ static int vhost_scsi_setup_vq_cmds(struct vhost_virtqueue *vq, int max_cmds)
                        goto out;
                }
 
-               tv_cmd->tvc_prot_sgl = kcalloc(VHOST_SCSI_PREALLOC_PROT_SGLS,
-                                              sizeof(struct scatterlist),
-                                              GFP_KERNEL);
-               if (!tv_cmd->tvc_prot_sgl) {
-                       pr_err("Unable to allocate tv_cmd->tvc_prot_sgl\n");
-                       goto out;
+               if (vhost_has_feature(vq, VIRTIO_SCSI_F_T10_PI)) {
+                       tv_cmd->tvc_prot_sgl = kcalloc(VHOST_SCSI_PREALLOC_PROT_SGLS,
+                                               sizeof(struct scatterlist),
+                                               GFP_KERNEL);
+                       if (!tv_cmd->tvc_prot_sgl) {
+                               pr_err("Unable to allocate tv_cmd->tvc_prot_sgl\n");
+                               goto out;
+                       }
                }
        }
        return 0;