Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion build/multi/Dockerfile.multi.asi
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ ARG OSSFS_IMAGE_TAG=v1.91.9.ack.1-b81059f
ARG OSSFS2_IMAGE_TAG=v2.0.5.ack.1-663afcf
LABEL defaultOssfsImageTag="${OSSFS_IMAGE_TAG}" defaultOssfs2ImageTag="${OSSFS2_IMAGE_TAG}"

RUN yum install -y ca-certificates file tzdata nfs-utils xfsprogs e4fsprogs pciutils iputils strace util-linux nc telnet tar cpio lsof && \
RUN yum install -y ca-certificates file tzdata nfs-utils xfsprogs e4fsprogs pciutils iputils strace util-linux nc telnet tar cpio && \
yum clean all
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone

Expand Down
22 changes: 16 additions & 6 deletions pkg/disk/bdf.go
Original file line number Diff line number Diff line change
Expand Up @@ -658,16 +658,26 @@ func (d *driver) GetPCIDeviceDriverType() string {
}

func (d *driver) CheckVFIOUsage() error {
actualPath, err := filepath.EvalSymlinks(filepath.Join("/sys/bus", d.machineType.BusName(), "devices", d.deviceNumber, "iommu_group"))
actualPath, err := os.Readlink(filepath.Join("/sys/bus", d.machineType.BusName(), "devices", d.deviceNumber, "iommu_group"))
if err != nil {
return err
}
klog.V(5).InfoS("CheckVFIOUsage: eval symlink success", "path", actualPath)
groupNumber := filepath.Base(actualPath)
// the command returns -1 if nothing is returned
output, _ := exec.Command("lsof", filepath.Join("/dev/vfio", groupNumber)).CombinedOutput()
if strings.TrimSpace(string(output)) != "" {
return errors.Errorf("CheckVFIOUsage: device: %s is still be in used, output: %s", d.deviceNumber, output)
fd, err := unix.Open("/dev/vfio/"+groupNumber, unix.O_RDWR, 0)

switch err {
case nil:
err = unix.Close(fd)
if err != nil {
klog.ErrorS(err, "close vfio fd", "fd", fd, "iommu_group", groupNumber)
}
return nil
case unix.ENOENT:
return nil
case unix.EBUSY:
return fmt.Errorf("VFIO group %s is in use", groupNumber)
default:
return fmt.Errorf("cannot verify VFIO group %s is free: %w", groupNumber, err)
}
return nil
}