On 1/12/25 11:35 AM, michael.christie@xxxxxxxxxx wrote: > So I think to fix the issue, we would want to: > > 1. move the > > memcpy(vs_tpg, vs->vs_tpg, len); > > to the end of the function after we do the vhost_scsi_flush. This will > be more complicated than the current memcpy though. We will want to > merge the local vs_tpg and the vs->vs_tpg like: > > for (i = 0; i < VHOST_SCSI_MAX_TARGET; i++) { > if (vs_tpg[i]) > vs->vs_tpg[i] = vs_tpg[i]) > } I think I wrote that in reverse. We would want: vhost_scsi_flush(vs); if (vs->vs_tpg) { for (i = 0; i < VHOST_SCSI_MAX_TARGET; i++) { if (vs->vs_tpg[i]) vs_tpg[i] = vs->vs_tpg[i]) } } kfree(vs->vs_tpg); vs->vs_tpg = vs_tpg; or we could just allocate the vs_tpg with the vhost_scsi like: struct vhost_scsi { .... struct vhost_scsi_tpg *vs_tpg[VHOST_SCSI_MAX_TARGET]; then when we loop in vhost_scsi_set/clear_endpoint set/clear the every vs_tpg entry.