diff --git a/virtcontainers/kata_agent.go b/virtcontainers/kata_agent.go index 305db6ecf9..47ea5ddfd9 100644 --- a/virtcontainers/kata_agent.go +++ b/virtcontainers/kata_agent.go @@ -1101,6 +1101,13 @@ func (k *kataAgent) appendDevices(deviceList []*grpc.Device, c *Container) []*gr continue } + if d.Pmem { + // block drive is a persistent memory device that + // was passed as volume (-v) not as device (--device). + // It shouldn't be visible in the container + continue + } + kataDevice := &grpc.Device{ ContainerPath: dev.ContainerPath, } @@ -1439,7 +1446,18 @@ func (k *kataAgent) handleBlockVolumes(c *Container) ([]*grpc.Storage, error) { k.Logger().Error("malformed block drive") continue } + + vol.MountPoint = m.Destination + vol.Fstype = "bind" + vol.Options = []string{"bind"} + switch { + // pmem volumes case + case blockDrive.Pmem: + vol.Driver = kataNvdimmDevType + vol.Source = fmt.Sprintf("/dev/pmem%s", blockDrive.NvdimmID) + vol.Fstype = blockDrive.Format + vol.Options = []string{"dax"} case c.sandbox.config.HypervisorConfig.BlockDeviceDriver == config.VirtioBlockCCW: vol.Driver = kataBlkCCWDevType vol.Source = blockDrive.DevNo @@ -1456,10 +1474,6 @@ func (k *kataAgent) handleBlockVolumes(c *Container) ([]*grpc.Storage, error) { return nil, fmt.Errorf("Unknown block device driver: %s", c.sandbox.config.HypervisorConfig.BlockDeviceDriver) } - vol.MountPoint = m.Destination - vol.Fstype = "bind" - vol.Options = []string{"bind"} - volumeStorages = append(volumeStorages, vol) }